Apportez votre aide…
Ceci est une ancienne révision du document !
OpenStack
OpenStack est un logiciel libre (license Apache 2.0) qui permet la construction de cloud privé et public. OpenStack est aussi une communauté et un projet en plus d'un logiciel qui à pour but d'aider les organisations à mettre en oeuvre un système de serveur et de stockage virtuel. OpenStack est composé d'une série de logiciels et de projets au code source libre qui sont maintenu par la communauté incluant: OpenStack Compute (nommé Nova), OpenStack Object Storage (nommé Swift), et OpenStack Image Service (nommé Glance).
Ce document présente l'installation des composant d'identité, d'images et virtualisation sur une seule machine.
Il s'agit plutôt d'une configuration de développement mais néanmoins fonctionnelle. les services réseau(Quantum) et stockage(Swift) ne sont pas abordés(du moins pour l'instant).
Pré-requis
- Disposer des droits d'administration.
- Disposer d'une connexion à Internet configurée et activée.
- Un processeur supportant la virtualisation matérielle (test sur la page KVM)
- Disposer d'un disque dur ou d'une partition non formatée pour LVM
- Ne pas avoir peur de la ligne de commande
- Il est nécéssaire de configurer le réseau en IP Fixe. Supprimez les paquets Network-Manager ou Wicd et resolvconf.
Les paquets OpenStack utilisés sont ceux des dépots Ubuntu.
Tous les services OpenStack seront installés sur la même machine.
La configuration abordée suppose l'utilisation de 2 interfaces réseau
Toutes les éditions de fichier, sans precision contraire, sont faites avec les droits de root(sudo). Donc avant de commencer,choisissez votre méthode d'édition : Modifier un fichier
Préparation du système
Réseau
Modifiez votre fichier /etc/network/interfaces comme ci-dessous en adaptant a votre configuration.
auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto eth1 iface eth1 inet manual auto br0 iface inet br0 static bridge_ports eth0 address 192.168.1.250 netmask 255.255.255.0 gateway 192.168.1.254 broadcast 192.168.1.255 auto br1 iface inet br1 manual bridge_ports eth1
Modifiez votre fichier /etc/resolv.conf comme ci-dessous et ajoutez vos DNS habituels.
Les DNS ci dessous sont ceux de Google
nameserver 8.8.8.8 nameserver 8.8.4.4
Redémarrez pour que les modifications réseau soit prisent en compte.
Serveur NTP
Le serveur NTP est nécéssaires a la bonne synchronisation du cloud.
Installez le paquet ntp.
Ouvrez le fichier /etc/ntp.conf et ajoutez les lignes
serveur ntp.ubuntu.com iburst serveur 127.127.1.0 fudge 127.127.1.0 stratum 10
redémarrez le service
sudo service ntp restart
LVM
Les volumes LVM serviront de disques durs supplémentaires pour les serveurs virtuels.
Installez les paquets tgt open-iscsi open-iscsi-utils lvm2
Cette commande suppose que vous ayez un disque dur /dev/sdc vide sans partition. Adaptez en fonction de votre configuration.Si vous utilisez Gparted, créez une partition non formatée.
Créez une partion de 100Giga sur /dev/sdc
sudo fdisk /dev/sdc n p 1 <return> +100G w
Vous avez maintenant une partition primaire vide de 100 Gigas /dev/sdc1,créez maintenant le volume LVM. Attention, le nom nova-volumes doit être respecté.
sudo pvcreate /dev/sdc1 sudo vgcreate nova-volumes /dev/sdc1
RabbitMQ
RabbitMQ est un broker de messages se basant sur le standard AMQP afin d'échanger avec différents clients.
C'est le service qui permet aux composants OpenStack de communiquer entre eux(pour faire simple).
Installez les paquets rabbitmq-server memcached python-memcache
Mysql
Chaque composant possède sa base de données MySQL, contenant toutes les données modifiables a chaud(ID des images disques, des instances virtuelles, réseaux, identités…). Les données de configuration fixes sont stockées dans des fichiers texte.
Il est possible d'utiliser un autre SGBD, MySQL étant recommandé dans la documentation OpenStack.
Modifiez la configuration de Mysql.
modifiez le fichier /etc/mysql/my.cnf pour indiquer a MySQL que le serveur doit écouter sur toutes les adresses, pas seulement sur la boucle locale.
Remplacez
bind-address = 127.0.0.1
par
bind-address = 0.0.0.0
et redémarrez MySQL
sudo service mysql restart
Keystone
Installation du module de gestion d'identités Keystone
Le composant Keystone est chargé de la gestion des utilisateurs et des services.
Gestion des utilisateurs. Users, roles & Tenants
La gestion des utilisateurs s'articule autour de 3 objets
l'objet User représentant l'utilisateur final.
L'objet Tenant qui l'on peut représenter par un projet, une organisation au sein duquel les instances seront regroupées et administrées par les utilisateurs.
L'objet Role qui définit le rôle de l'utilisateur sur un Tenant. Un utilisateur peut avoir un ou plusieurs rôles sur différents Tenants.
Gestion des services et points d'accès
La gestion des différents services, comme Glance pour les images ou Swift pour le stockage.
La définition des points d'accès a ces différents services, les url et ports pour y accéder
Préparation de la base de données Mysql
Commençons par créer la base MySQL.
mysql -u root -p <<EOF CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'qhKz6YYg'; FLUSH PRIVILEGES; EOF
Installation
Installez les paquets keystone python-keystone python-keystoneclient
Configuration
Ouvrez le fichier /etc/keystone/keystone.conf dans un éditeur et modifier les sections suivantes
[DEFAULT] bind_host = 0.0.0.0 public_port = 5000 admin_port = 35357 admin_token = 2BSpUaPV compute_port = 8774 verbose = True debug = True log_config = /etc/keystone/logging.conf [sql] connection = mysql://keystone:qhKz6YYg@192.168.1.250:3306/keystone idle_timeout = 200
Redémarrez keystone
sudo service keystone restart
et synchronisez la base de données
sudo keystone-manage db_sync
Création des utilisateurs
Chaque commande ci-dessous contient l'authentification définie dans le fichier keystone.conf et utilisée par le client python sous la forme –token admin_token (jeton d'authentification de l'admin) –endpoint url_du_service_keystone (adresse du serveur:port/directory/).
Il est bien sur possible d'envoyer des commandes à partir de n'importe quel autre ordinateur ou python-keystoneclient est installé.
Création du compte admin
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=admin --pass=2BSpUaPV --email=admin@example.com +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | admin@example.com | | enabled | True | | id | c97c87b3ed894401975dd6d757b40330 | | name | admin | | password | $6$rounds=40000$cZhg187ypC6hMMD1$YQAxiXspmMVsu1di.o3UlZjvjlEO9WXii48Q29tyIXTzDpT5e92XBij9Pz4A5YLoGaccf8PBf1jcAan9YLDOl. | | tenantId | None | +----------+-------------------------------------------------------------------------------------------------------------------------+
Le compte interne du service Glance
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=glance --pass=2BSpUaPV --email=glance@example.com +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | glance@example.com | | enabled | True | | id | 876ef0a6c0c048039f847e61da7260b4 | | name | glance | | password | $6$rounds=40000$pYJjQYtDJGdFB/nl$UOmryhbqCIROSPNhs8/svbPg2JIns31yImcAXTh/CXT3o9GOZTNYadZe2zp7M0.XeHqJD5bI1lhZYM09uSrmN0 | | tenantId | None | +----------+-------------------------------------------------------------------------------------------------------------------------+
Le compte interne du service Nova
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=nova --pass=2BSpUaPV --email=nova@example.com +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | nova@example.com | | enabled | True | | id | 5c54624fef2242e185af10b7a2a2768f | | name | nova | | password | $6$rounds=40000$ogH/.VbZJgp2pDF8$w7TCuRu95Q8c6PMR5Zmbs7Osjk8tXfkDKixzRY.t/Ghv/WvOoLD1au/cCbMWVfaEhr14RAGheTA2E2rPoVEjd1 | | tenantId | None | +----------+-------------------------------------------------------------------------------------------------------------------------+
Création des rôles
Pour les rôles utilisateurs vous avez le choix entre :
- admin, donnant le droit de modifier la configuration des services(ex. allouer une plage d'adresse IP, un quota d'espace disque pour un projet etc…)
- Member, permet de gérer le contenu du projet(création d'instances de machines, ajout d'un disque virtuel a l'une d'elles etc…)
Les rôles KeystoneAdmin et KeystoneServiceAdmin sont des rôles internes nécéssaires.
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=admin +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | id | 3d945f41e08e4e2db1584fdb8f05d333 | | name | admin | +----------+----------------------------------+ keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=Member +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | id | 84697b61736c439288900904bdf4a48d | | name | Member | +----------+----------------------------------+ keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=KeystoneAdmin +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | id | d4d6482b0ec04e0fa24aa8263c182d08 | | name | KeystoneAdmin | +----------+----------------------------------+ keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=KeystoneServiceAdmin +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | id | 46590e32dbbe40f29253b5b928b83d1b | | name | KeystoneServiceAdmin | +----------+----------------------------------+
Création des "tenants"
En premier le "tenant" admin qui permet a ses membres d'administrer les services.
Ensuite le "tenant" interne des services.
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=admin +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | None | | enabled | True | | id | 0f71e86d30e247d3b1216fe5f2f3aa50 | | name | admin | +-------------+----------------------------------+ keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=service +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | None | | enabled | True | | id | 1a3515e468f14e0ebb4a4e83447e7bf7 | | name | service | +-------------+----------------------------------+
Définition des rôles
Il faut pour cela utiliser les ID affichés lors de la création des users, roles & tenants.
L'utilisateur admin a un rôle admin sur le "tenant" admin.
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-role-add --user c97c87b3ed894401975dd6d757b40330 --role 3d945f41e08e4e2db1584fdb8f05d333 --tenant_id 0f71e86d30e247d3b1216fe5f2f3aa50
Comme ce n'est pas pratique de recopier les IDs, on vas s'éviter les erreurs de frappe avec awk
L'utilisateur admin a un rôle KeystoneAdmin sur le "tenant" admin.
L'utilisateur admin a un rôle KeystoneServiceAdmin sur le "tenant" admin.
L'utilisateur glance a un rôle admin sur le "tenant" service.
L'utilisateur nova a un rôle admin sur le "tenant" service.
Voici les commandes correspondantes :
keystone user-role-add --user `keystone user-list | awk '/ admin / { print $2 }'` --role `keystone role-list | awk '/ KeystoneAdmin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ admin / { print $2 }'` keystone user-role-add --user `keystone user-list | awk '/ admin / { print $2 }'` --role `keystone role-list | awk '/ KeystoneServiceAdmin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ admin / { print $2 }'` keystone user-role-add --user `keystone user-list | awk '/ glance / { print $2 }'` --role `keystone role-list | awk '/ admin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ service / { print $2 }'` keystone user-role-add --user `keystone user-list | awk '/ nova / { print $2 }'` --role `keystone role-list | awk '/ admin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ service / { print $2 }'`
Création d'un utilisateur supplémentaire
Création d'un compte utilisateur, d'un projet supplémentaire et définition du role avec la variable d'environnement $USER (remplacer par ce que vous voulez, c'est juste un exemple) Le rôle "Member" est suffisant.
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=$USER --pass=STRONGPWD --email=$USER@example.com +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | xavier@example.com | | enabled | True | | id | 13247a59ad844458ad36c0bd06451376 | | name | xavier | | password | $6$rounds=40000$3YPS4NJ1DqKdzEjc$XPGFlqCfu2ZCNUMJCjFMkvFfXrOkixuVq1I6.mjd9PXzU.4u6ELHYeNbvYJyiCGvUHaggIgo9rMESeA8v4x3Y1 | | tenantId | None | +----------+-------------------------------------------------------------------------------------------------------------------------+ keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=$USER +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | None | | enabled | True | | id | c6f05a03b4aa482c91b61a2230356618 | | name | xavier | +-------------+----------------------------------+ keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-role-add --user 13247a59ad844458ad36c0bd06451376 --role 84697b61736c439288900904bdf4a48d --tenant_id c6f05a03b4aa482c91b61a2230356618
Création des services et leurs points d'accès
En premier le service Keystone
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ service-create --name=keystone --type=identity --description='Keystone Identity Service' +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Keystone Identity Service | | id | 41905e02540d48228166c6d06ddcd9f0 | | name | keystone | | type | identity | +-------------+----------------------------------+
Le point d'accès correspondant
keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ endpoint-create --region RegionOne --service_id=41905e02540d48228166c6d06ddcd9f0 --publicurl=http://192.168.1.250:5000/v2.0 --internalurl=http://192.168.1.250:5000/v2.0 --adminurl=http://192.168.1.250:35357/v2.0 +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | adminurl | http://192.168.1.250:35357/v2.0 | | id | f1c517d5754a493fa67fc21b3f4264c4 | | internalurl | http://192.168.1.250:5000/v2.0 | | publicurl | http://192.168.1.250:5000/v2.0 | | region | RegionOne | | service_id | 41905e02540d48228166c6d06ddcd9f0 | +-------------+----------------------------------+
Les services et points d'accès des autes services seront ajoutés après l'installation du composant bien qu'il soit possible de les définir dès maintenant.
Utilisation
Il y plusieurs façon possible de s'identifier en lançant une commande keystone.
La méthode d'identification avec le token de l'administrateur avec les arguments, utilisable dès que le fichier de configuration de Keystone est renseigné
keystone --endpoint http://localhost:35357/v2.0 --token 2BSpUaPV user-list
la méthode user/password avec les arguments, après définition des utilisateurs, rôles et projets.
keystone --username admin --password 2BSpUaPV --tenant_name admin --auth_url http://localhost:5000/v2.0 user-list
Pour les deux méthodes, il est possible d'utiliser des variables d'environnement pour éviter de ressaisir tous les arguments a chaque commande.
1ère méthode
export SERVICE_ENDPOINT=http://localhost:5000/v2.0/ export SERVICE_TOKEN=2BSpUaPV keystone user-list
2ème méthode
export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=2BSpUaPV export OS_AUTH_URL="http://localhost:5000/v2.0/" keystone user-list
Pour éviter de refaire un export des variables a chaque ouverture de terminal, vous pouvez les exporter automatiquement.
Il suffit de créer un fichier .novarc contenant les lignes suivantes a la racine de votre dossier personnel
export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=2BSpUaPV export OS_AUTH_URL="http://192.168.1.250:5000/v2.0/"
Ajoutez ensuite la ligne suivante a la fin de votre fichier .bashrc
source ~/.novarc
Les variables seront exportées comme variables d'environnement et vous pourrez utiliser toutes les commandes sous la forme simple sans ressaisir les informations d'authentification.
keystone user-list +----------------------------------+---------+--------------------------+--------+ | id | enabled | email | name | +----------------------------------+---------+--------------------------+--------+ | 13247a59ad844458ad36c0bd06451376 | True | xavier@example.com | xavier | | 5c54624fef2242e185af10b7a2a2768f | True | nova@example.com | nova | | 876ef0a6c0c048039f847e61da7260b4 | True | glance@example.com | glance | | c97c87b3ed894401975dd6d757b40330 | True | admin@example.com | admin | +----------------------------------+---------+--------------------------+--------+ keystone role-list +----------------------------------+----------------------+ | id | name | +----------------------------------+----------------------+ | 3d945f41e08e4e2db1584fdb8f05d333 | admin | | 46590e32dbbe40f29253b5b928b83d1b | KeystoneServiceAdmin | | 84697b61736c439288900904bdf4a48d | Member | | d4d6482b0ec04e0fa24aa8263c182d08 | KeystoneAdmin | +----------------------------------+----------------------+ keystone tenant-list +----------------------------------+---------+---------+ | id | name | enabled | +----------------------------------+---------+---------+ | 0f71e86d30e247d3b1216fe5f2f3aa50 | admin | True | | 1a3515e468f14e0ebb4a4e83447e7bf7 | service | True | | c6f05a03b4aa482c91b61a2230356618 | xavier | True | +----------------------------------+---------+---------+
Pour voir la liste des commandes disponibles et les détails utilisez :
keystone help [NOM DE LA COMMANDE]
Glance
La prochaine étape est l'installation du service d'images Glance.
C'est le service chargé de distribuer les images de disque dur système utilisées par les machines virtuelles
préparation de la base de données Mysql
mysql -u root -p <<EOF CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '4Wh7g9GE'; FLUSH PRIVILEGES; EOF
Installation
installez les paquets glance glance-api glance-client glance-common glance-registry python-glance
Configuration
Il faut aussi créer les services et points d'accès correspondants Keystone
keystone service-create --name=glance --type=image --description='Glance Image Service' +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Glance Image Service | | id | 39bbd3107c4c4153a408a3b6a34ef931 | | name | glance | | type | image | +-------------+----------------------------------+ keystone endpoint-create --region RegionOne --service_id=39bbd3107c4c4153a408a3b6a34ef931 --publicurl=http://192.168.1.250:9292/v1 --internalurl=http://192.168.1.250:9292/v1 --adminurl=http://192.168.1.250:9292/v1 +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | adminurl | http://192.168.1.250:9292/v1 | | id | 8fa4c9092dbb4ce989fdcbaceddec45d | | internalurl | http://192.168.1.250:9292/v1 | | publicurl | http://192.168.1.250:9292/v1 | | region | RegionOne | | service_id | 39bbd3107c4c4153a408a3b6a34ef931 | +-------------+----------------------------------+
Ouvrez le fichier /etc/glance/glance-api-paste.ini dans un éditeur et allez a la fin. modifiez ces lignes avec les valeurs correctes pour votre installation.
admin_tenant_name = service admin_user = glance admin_password = 2BSpUaPV
La section [pipeline:glance-api] doit contenir
[pipeline:glance-api] pipeline = versionnegotiation authtoken auth-context apiv1app
Ouvrez le fichier /etc/glance/glance-api.conf. Ajoutez les lignes suivantes
[paste_deploy] flavor = keystone
Ouvrez le fichier /etc/glance/glance-registry.conf dans un éditeur. modifiez les lignes suivantes
sql_connection = mysql://glance:4Wh7g9GE@192.168.1.250:3306/glance
et ajoutez a la fin
[paste_deploy] flavor = keystone
Ouvrez le fichier /etc/glance/glance-scrubber.conf. Ajoutez les lignes suivantes
sql_connection = mysql://glance:4Wh7g9GE@192.168.1.250:3306/glance sql_idle_timeout = 3600
Ouvrez le fichier /etc/glance/glance-registry-paste.ini.Modifiez les lignes suivantes
admin_tenant_name = service admin_user = glance admin_password = 2BSpUaPV
et la section
[pipeline:glance-registry] pipeline = authtoken auth-context context registryapp
Synchronisez maintenant la base de données MySQL
sudo glance-manage version_control 0 sudo glance-manage db_sync
Redémarrez les services pour la prise en compte des modifications
sudo service glance-api restart && sudo service glance-registry restart
Utilisation
vérifiez maintenant si tous fonctionne correctement, téléchargez une première image pour tester.
wget http://uec-images.ubuntu.com/releases/precise/release/ubuntu-12.04-server-cloudimg-amd64-disk1.img
ajoutez maintenant l'image téléchargée aux images Glance
glance add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovf disk_format=qcow2 < ubuntu-12.04-server-cloudimg-amd64-disk1.img Uploading image 'Ubuntu 12.04 cloudimg amd64' =====================================================================================================================================================================================================================================[100%] 136.648660M/s, ETA 0h 0m 0s Added new image with ID: d1b7defa-0c35-4e8c-aef5-0d58c8d80a52
La commande glance index donne une liste des images
La commande glance details affiche des infos détaillées sur toutes les images.
glance index ID Name Disk Format Container Format Size ------------------------------------ ------------------------------ -------------------- -------------------- -------------- d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 Ubuntu 12.04 cloudimg amd64 qcow2 ovf 230490112 glance details ================================================================================ URI: http://192.168.1.250:9292/v1/images/d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 Id: d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 Public: Yes Protected: No Name: Ubuntu 12.04 cloudimg amd64 Status: active Size: 230490112 Disk format: qcow2 Container format: ovf Minimum Ram Required (MB): 0 Minimum Disk Required (GB): 0 Owner: 0f71e86d30e247d3b1216fe5f2f3aa50 ================================================================================
La syntaxe de la commande glance add est la suivante :
glance add name="%Image name%" is_public=true container_format=%container_format% disk_format=%disk_format% < %filename%
%Image name% Nom que l'on veut donner a l'image
is_public=true L'image est elle visible dans tous les projets
%container_format% Container Type de container bare pas de container, ovf OVF Container, aki ari ami Amazon kernel ramdisk ou machine
%disk_format% Format de l'image raw, qcow2, vmdk, iso etc…
%filename% Le nom de l'image a uploader
Nova
Passez maintenant a l'installation de Nova, la gestion des instances des machines virtuelles, de leur espace disque et du réseau.
Préparation de la base de données Mysql
mysql -u root -p <<EOF CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '5DTSDdzj'; EOF
Installation
installez les paquets nova-api nova-cert nova-common nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler novnc nova-consoleauth nova-volume python-nova python-novaclient.
Configuration
Création des services et points d'accès pour Keystone, au nombre de 2, les services compute et volume.
keystone service-create --name=nova --type=compute --description='OpenStack Compute Service' +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | OpenStack Compute Service | | id | 4ba6c7149dd1421f8c429afc0c8dbdfe | | name | nova | | type | compute | +-------------+----------------------------------+ keystone endpoint-create --region RegionOne --service_id=4ba6c7149dd1421f8c429afc0c8dbdfe --publicurl='http://192.168.1.250:8774/v2/%(tenant_id)s' --internalurl='http://192.168.1.250:8774/v2/%(tenant_id)s' --adminurl='http://192.168.1.250:8774/v2/%(tenant_id)s' +-------------+--------------------------------------------+ | Property | Value | +-------------+--------------------------------------------+ | adminurl | http://192.168.1.250:8774/v2/%(tenant_id)s | | id | f783461a1d0f4d9fb8e6dabc0fd0a177 | | internalurl | http://192.168.1.250:8774/v2/%(tenant_id)s | | publicurl | http://192.168.1.250:8774/v2/%(tenant_id)s | | region | RegionOne | | service_id | 4ba6c7149dd1421f8c429afc0c8dbdfe | +-------------+--------------------------------------------+ keystone service-create --name=volume --type=volume --description='OpenStack Volume Service' +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | OpenStack Volume Service | | id | de65a68c5ae34737bc6678f6c7bc884a | | name | volume | | type | volume | +-------------+----------------------------------+ keystone endpoint-create --region RegionOne --service_id=de65a68c5ae34737bc6678f6c7bc884a --publicurl='http://192.168.1.250:8776/v1/%(tenant_id)s' --internalurl='http://192.168.1.250:8776/v1/%(tenant_id)s' --adminurl='http://192.168.1.250:8776/v1/%(tenant_id)s' +-------------+--------------------------------------------+ | Property | Value | +-------------+--------------------------------------------+ | adminurl | http://192.168.1.250:8776/v1/%(tenant_id)s | | id | 36834fdc7ce3410a8442dffd90c3d3e2 | | internalurl | http://192.168.1.250:8776/v1/%(tenant_id)s | | publicurl | http://192.168.1.250:8776/v1/%(tenant_id)s | | region | RegionOne | | service_id | de65a68c5ae34737bc6678f6c7bc884a | +-------------+--------------------------------------------+
ouvrez le fichier /etc/nova/api-paste.ini et modifiez les lignes:
admin_tenant_name = service admin_user = nova admin_password = 2BSpUaPV
ouvrez le fichier /etc/nova/nova.conf et remplacer tout avec les lignes ci dessous.
La configuration obtenue utilisera le mode Dhcp. La ligne "nova.scheduler.simple.SimpleScheduler" défini une utilisation avec un seul serveur.
Pour un mode Vlan, pour utiliser plusieurs serveurs ou d'autres options, reportez vous a la documentation OpenStack.
# LOGS/STATE --verbose --logdir=/var/log/nova --state_path=/var/lib/nova --lock_path=/var/lock/nova --allow_admin_api=true --use_deprecated_auth=false --cc_host=192.168.1.250 --nova_url=http://192.168.1.250:8774/v1.1/ --routing_source_ip=192.168.1.250 --s3_host=192.168.1.250 --ec2_host=192.168.1.250 --ec2_url=http://192.168.1.250:8773/services/Cloud --keystone_ec2_url=http://192.168.1.250:5000/v2.0/ec2tokens --scheduler_driver=nova.scheduler.simple.SimpleScheduler --root_helper=sudo nova-rootwrap # AUTHENTICATION --auth_strategy=keystone # VOLUMES --iscsi_helper=tgtadm --iscsi_ip_prefix=172.16.0 # DATABASE --sql_connection=mysql://nova:5DTSDdzj@192.168.1.250/nova # COMPUTE --libvirt_type=kvm --connection_type=libvirt --libvirt_use_virtio_for_bridges=true --api_paste_config=/etc/nova/api-paste.ini --allow_resize_to_same_host=True --start_guests_on_host_boot=true --resume_guests_state_on_host_boot=true # RABBITMQ --rabbit_host=192.168.1.250 # GLANCE --image_service=nova.image.glance.GlanceImageService --glance_api_servers=192.168.1.250:9292 # NETWORK --network_manager=nova.network.manager.FlatDHCPManager --dhcpbridge_flagfile=/etc/nova/nova.conf --dhcpbridge=/usr/bin/nova-dhcpbridge --fixed_range=172.16.0.0/24 --flat_network_dhcp_start=172.16.0.2 --flat_network_bridge=br1 --flat_interface=eth1 --network_size=256 --flat_injected=False --my_ip=192.168.1.250 --floating_range=192.168.1.0/24 --force_dhcp_release --public_interface=br0 # NOVNC CONSOLE --vnc_enabled=true --novncproxy_base_url=http://192.168.1.250:6080/vnc_auto.html --vncserver_proxyclient_address=127.0.0.1 --vncserver_listen=127.0.0.1
toutes les entrées –flat… correspondent au réseau privé (172.16.0.0/24, début 172.16.0.2)
–floating_range est le réseau public(LAN) sur lequel est branché l'interface br0, pour attribuer une adresse aux VMs sur le réseau public. L'adresse 192.168.1.250 est celle de l'interface br0, ne remplacez pas par 127.0.0.1, ça ne fonctionnera pas.
Modifiez les droits sur le répertoire /etc/nova
sudo chown -R nova:nova /etc/nova/
Redémarrez tous les services nova
for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler nova-volume nova-cert nova-consoleauth novnc; do sudo service "$a" stop; done for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler nova-volume nova-cert nova-consoleauth novnc; do sudo service "$a" start; done
Synchronisez la base de données
sudo nova-manage db sync
Redémarrez de nouveau tous les service
for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler nova-volume nova-cert nova-consoleauth novnc; do sudo service "$a" stop; done for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler nova-volume nova-cert nova-consoleauth novnc; do sudo service "$a" start; done
Vous pouvez maintenant vérifier que tous les services fonctionnent, le résultat dans la colonne STATE doit être un smiley pour OK. Si c'est un XXX, quelque chose n'as pas fonctionné, consultez les logs dans /var/log/nova/nova-le_nom_du_service_KO.
sudo nova-manage service list 2012-05-16 00:20:09 DEBUG nova.utils [req-527f4f50-f02e-41da-bc96-43d3d9070807 None None] backend <module 'nova.db.sqlalchemy.api' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.pyc'> from (pid=9869) __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:658 Binary Host Zone Status State Updated_At nova-scheduler myhost nova enabled :-) 2012-05-15 22:20:04 nova-volume myhost nova enabled :-) 2012-05-15 22:20:03 nova-compute myhost nova enabled :-) 2012-05-15 22:20:05 nova-network myhost nova enabled :-) 2012-05-15 22:20:03 nova-consoleauth myhost nova enabled :-) 2012-05-15 22:20:03 nova-cert myhost nova enabled :-) 2012-05-15 22:20:04
Exemples: l'atribution d'une adresse IP publique ou la création d'un disque virtuel.
N'hésitez pas à… patienter
Listez les images disque fournies par le service Glance
nova image-list +--------------------------------------+-----------------------------+--------+--------+ | ID | Name | Status | Server | +--------------------------------------+-----------------------------+--------+--------+ | d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | Ubuntu 12.04 cloudimg amd64 | ACTIVE | | +--------------------------------------+-----------------------------+--------+--------+
Profitons en pour créer les réseaux privés et publics, les adresses seront enregistrées dans la base MySQL.
sudo nova-manage network create private --fixed_range_v4=172.16.0.0/24 --num_networks=1 --bridge=br1 --bridge_interface=eth1 --network_size=256 sudo nova-manage floating create --ip_range=192.168.1.0/24
Par défaut, les règles de parefeu bloquent les paquets entrants sur l'interface publique a destination des VMs. Il est possible de créer des ensembles de règles. L'ensemble de règles utilisée devra être spécifié au lancement de chaque instance. Ci dessous un exemple de création de règles sur l'ensemble "default" créé automatiquement a l'installation, si vous voulez autoriser le ping et SSH pour toutes les VMs sur l'interface publique.( icmp -1 correspond a tout )
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | -1 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 22 | 22 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Listez les règles de ports autorisés sur le groupe de règles "default"
nova secgroup-list-rules default +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | -1 | 0.0.0.0/0 | | | tcp | 22 | 22 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Première machine virtuelle
Maintenant que tout fonctionne, vous allez pouvoir créez votre première VM Assurez vous d'avoir créé une clé SSH
ssh-keygen -t rsa
ajoutez la au serveur
nova keypair-add --pub_key ~/.ssh/id_rsa.pub key1
il faut définir les spécifications de la future VM, pour voir les possibilités, utilisez la commande ci-dessous. la création de vos propres définitions est bien sur possible.
nova flavor-list +----+-----------+-----------+------+-----------+------+-------+-------------+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | +----+-----------+-----------+------+-----------+------+-------+-------------+ | 1 | m1.tiny | 512 | 0 | 0 | | 1 | 1.0 | | 2 | m1.small | 2048 | 10 | 20 | | 1 | 1.0 | | 3 | m1.medium | 4096 | 10 | 40 | | 2 | 1.0 | | 4 | m1.large | 8192 | 10 | 80 | | 4 | 1.0 | | 5 | m1.xlarge | 16384 | 10 | 160 | | 8 | 1.0 | +----+-----------+-----------+------+-----------+------+-------+-------------+
Utilisons l'ID 1 correspondant a une machine disposant de 512 Mb de RAM, 1 CPU virtuel et aucun disque supplémentaire.
lancez votre première VM avec la commande nova boot, le paramètre –flavor indique quelles spécifications, –image l'ID de l'image fournie par glance, vient ensuite le nom et la clé ssh utilisée. Indiquez aussi l'ensemble de règles de parfeu, sinon c'est l'ensemble "default" qui est appliqué.
nova boot --flavor 1 --image d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 myfirstvm --key_name key1 & [1] 5472 +-------------------------------------+--------------------------------------+ | Property | Value | +-------------------------------------+--------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-SRV-ATTR:host | myhost | | OS-EXT-SRV-ATTR:hypervisor_hostname | None | | OS-EXT-SRV-ATTR:instance_name | instance-00000003 | | OS-EXT-STS:power_state | 0 | | OS-EXT-STS:task_state | scheduling | | OS-EXT-STS:vm_state | building | | accessIPv4 | | | accessIPv6 | | | adminPass | 4BMRzdXgtLvF | | config_drive | | | created | 2012-07-09T17:09:18Z | | flavor | m1.tiny | | hostId | | | id | 9360ae16-6b3a-4eb6-9b15-6b05d3f83989 | | image | Ubuntu 12.04 cloudimg amd64 | | key_name | key1 | | metadata | {} | | name | myfirstvm | | progress | 0 | | status | BUILD | | tenant_id | 0f71e86d30e247d3b1216fe5f2f3aa50 | | updated | 2012-07-09T17:09:19Z | | user_id | c97c87b3ed894401975dd6d757b40330 | +-------------------------------------+--------------------------------------+ [1]+ Fini nova boot --flavor 1 --image d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 myfirstvm --key_name key1
Un récapitulatif des propriétés de la machine s'affiche. Pour le réafficher, utilisez la commande
nova show myfirstvm
Pour lister les VM existantes
nova list +--------------------------------------+-----------+--------+--------------------+ | ID | Name | Status | Networks | +--------------------------------------+-----------+--------+--------------------+ | 9360ae16-6b3a-4eb6-9b15-6b05d3f83989 | myfirstvm | ACTIVE | private=172.16.0.2 | +--------------------------------------+-----------+--------+--------------------+
Connectez vous sur la VM
ssh ubuntu@172.16.0.2 Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-virtual x86_64) * Documentation: https://help.ubuntu.com/ System information as of Mon Jul 9 17:10:53 UTC 2012 . . . To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@myfirstvm:~$ exit logout Connection to 172.16.0.2 closed.
Vous pouvez créez un disque dur supplémentaire
nova volume-create --display_name "volume1" 10
Attachez le à la VM
nova volume-attach myfirstvm 1 /dev/vdb nova volume-list +----+--------+--------------+------+-------------+--------------------------------------+ | ID | Status | Display Name | Size | Volume Type | Attached to | +----+--------+--------------+------+-------------+--------------------------------------+ | 1 | in-use | volume1 | 10 | None | 9360ae16-6b3a-4eb6-9b15-6b05d3f83989 | +----+--------+--------------+------+-------------+--------------------------------------+
Vous pouvez maintenant vous reconnecter a la Vm pour partitionner ce disque et l'utiliser.
Connectez maintenant cette instance virtuelle a votre LAN.
Il faut tout d'abord allouer une adresse IP
nova floating-ip-create +-------------+-------------+----------+------+ | Ip | Instance Id | Fixed Ip | Pool | +-------------+-------------+----------+------+ | 192.168.1.1 | None | None | nova | +-------------+-------------+----------+------+
Puis attachez cette adresse a la VM
nova add-floating-ip myfirstvm 192.168.1.1
Patientez quelques secondes et vérifiez la présence sur votre LAN d'une mchine a cette adresse
ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.589 ms 64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.452 ms ^C --- 192.168.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.452/0.520/0.589/0.072 ms
La commande nova list vous confirme l'attribution
nova list +--------------------------------------+-----------+--------+---------------------------------+ | ID | Name | Status | Networks | +--------------------------------------+-----------+--------+---------------------------------+ | 9360ae16-6b3a-4eb6-9b15-6b05d3f83989 | myfirstvm | ACTIVE | private=172.16.0.2, 192.168.1.1 | +--------------------------------------+-----------+--------+---------------------------------+
Dashboard Horizon
Passons a l'interface graphique, le dashboard Horizon
Installation
Installez les paquets apache2 libapache2-mod-wsgi openstack-dashboard
redémarrez le serveur web Apache pour vérifier que tout est OK
sudo service apache2 restart
Utilisation
Ouvrez votre navigateur favori à l'adresse de votre interface publique ou 127.0.0.1
Exemples: l'atribution d'une adresse IP publique ou la création d'un disque virtuel.
N'hésitez pas à… patienter
Les identifiants de connexion de l'admin sont les mêmes que ceux du fichier .novarc
Si vous avez suivi ce document sans rien changer c'est
Username : admin Password: 2BSpUaPV pour le compte d'administration.
Les comptes qui ont pour role "admin" ont accès a l'interface d'administration sur le Dashboard, ainsi qu'a leur(s) projet(s). Les roles Member n'ont accès qu'a leur(s) projet(s).
Accès Admin
Dans l'ordre les différents menus :
- Overview : Récapitulatif de l'usage des serveurs par projet, utilisation actuelle en nombre de CPU virtuels, RAM et Disques puis compteur en CPU et espace disque(GB) par heures.
- Instances : Liste des instances de machines virtuelles actuelles plus quelques infos globales comme le projet auquel elles appartiennent, le serveur hôte, l'adresse IP, la taille, le statut et les actions en cours.
- Services : Liste des services activés et le serveur hôte.
- Flavors : La liste des types d'instances disponibles, leurs spécifications en nombre de CPUs, mémoire, espace disque. La création de nouvelles définitions d'instance est possible.
- Images : Les images disques stockées par le service Glance.
- Projects : les projets existants et leur statut. Il est possible de créer de nouveaux projets.
- Users : La liste des utilisateurs enregistrés, avec la possibilité d'ajouter ou d'éditer les détails mais pas d'ajouter l'utilisateur a plusieurs projets.
- Quotas : les quotas définis sur les ressources des serveurs, pas de modification possible.
Accès projets
Un bouton permet de switcher entre les différents projets dont l'utilisateur est membre, si il y a. Puis viennent les menus :
- Overview : Récapitulatif, comme dans la partie Admin, mais ne concernant que le projet sélectionné.
- Instances & Volumes : La liste des instances existantes et les possibilité de les éditer, la création ou modification des volumes disques virtuels.
- Images & Snapshots : Liste des images autorisées pour le projet, sert a lancer de nouvelles instances. Regroupe aussi les instantanés disponibles, instances et volumes disques.
- Acces & Security : Les adresses IP disponibles pour connecter les instances au réseau public avec possibilité de création, les groupes de règles de parefeu et leur interface d'édition et enfin la liste des clés SSH avec l'import ou la création de certificat.
Désinstallation
Pour supprimer cette application, supprimer les paquets. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.
Supprimez ensuite les bases de données keystone, glance et nova
Voir aussi
Contributeurs principaux : Xavier4811.