Openstack
Présentation
Le projet OpenStack est une plateforme de cloud computing open source supportant tout type d'environnement cloud.
Beaucoup de grosses entreprises telles que AT&T, AMD, Cisco,Google, IBM, Intel, Oracle, Red Hat, SUSE Linux et VMware contribuent au développement d’OpenStack.
Architecture
Nous allons voir sur ce wiki l'installation d'OpenStack sur RHEL7.
Pour la mise en place d'une solution OpenStack, deux choix d'architecture sont possibles avec chacune ses modules et ses caractéristiques.
Pour plus d'informations sur les architectures go ici.
Two-node architecture
Composé de:
- Controller
- Compute
The example architecture with legacy networking (nova-network) requires a controller node and at least one compute node. The controller node contains one network interface on the management network. The compute node contains one network interface on the management network and one on the external network.
Three-node architecture
Composé de:
- Controller
- Network
- Compute
The example architecture with OpenStack Networking (neutron) requires one controller node, one network node, and at least one compute node. The controller node contains one network interface on the management network. The network node contains one network interface on the management network, one on the instance tunnels network, and one on the external network. The compute node contains one network interface on the management network and one on the instance tunnels network.
Schéma
Ici nous allons ici mettre en place une architecture three-node
┌───────────────────┐ ┌──────────────────────┐ ┌────────────────────┐ │ VM1 │ │ VM2 │ │ VM3 │ │ Controller │ │ Network │ │ Compute │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Con │ │ N1 N2 N3 │ │ Com1 Com2 │ └─────────┬─────────┘ └─────┬─────┬─────┬────┘ └─────┬───────┬──────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┌───────┴─────┴─────┴─────┐ │ │ │ │ │ │ │ └─────────────────────┤ hyperviseur ├───────────────────┴───────┘ └─────────────────────────┘
Basic environment
Réseau
Nous allons commencer par la configuration des cartes réseaux de chacune de nos VM, pour cela il faudra éditer le fichier /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
Controller node:
Con:
- /etc/sysconfig/network-scripts/ifcfg-eno167777736
DEVICE=ifcfg-eno167777736 TYPE="Ethernet" BOOTPROTO="static" IPADDR=10.0.0.11 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 ONBOOT="yes"
network node:
N1:
- /etc/sysconfig/network-scripts/ifcfg-eno33554992
DEVICE=ifcfg-eno33554992 TYPE="Ethernet" BOOTPROTO="static" IPADDR=10.0.0.21 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 ONBOOT="yes"
N2:
- /etc/sysconfig/network-scripts/ifcfg-eno167777736
DEVICE=ifcfg-eno167777736 TYPE="Ethernet" BOOTPROTO="static" IPADDR=10.0.1.21 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 ONBOOT="yes"
N3:
- /etc/sysconfig/network-scripts/ifcfg-eno50332216
DEVICE=ifcfg-eno50332216 TYPE="Ethernet" BOOTPROTO="none"
Compute node:
Com1:
- /etc/sysconfig/network-scripts/ifcfg-eno167777736
DEVICE=ifcfg-eno167777736 TYPE="Ethernet" BOOTPROTO="static" IPADDR=10.0.0.31 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 ONBOOT="yes"
Com2:
- /etc/sysconfig/network-scripts/ifcfg-eno33554992
DEVICE=ifcfg-eno33554992 TYPE="Ethernet" BOOTPROTO="static" IPADDR=10.0.1.31 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 ONBOOT="yes"
Il faut ensuite modifier le fichier /,etc/hosts sur chaque machine, et on rajoute:
- /,etc/hosts/
10.0.0.11 controller 10.0.0.21 network 10.0.0.31 compute1 10.0.0.xx localhost
Une fois toutes les modifications effectuées, il suffit de redémarrer et tester si toutes les VM peuvent se ping.
Système
Une fois tout bien configuré et que les VM se ping entre elles, nous allons:
- ajouter les repositories EPEL et les activer
- ajouter à nos VM les sources list de OpenStack
- update les sources
- installer les packages SElinux pour OpenStack
yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm subscription-manager repos --enable=rhel-7-server-optional-rpms #seulement sur RHEL subscription-manager repos --enable=rhel-7-server-extras-rpms #seulement sur RHEL yum install http://rdo.fedorapeople.org/openstack-kilo/rdo-release-kilo.rpm yum upgrade yum install openstack-selinux
Database
Il va aussi falloir installer la base de données mariadb:
yum install mariadb mariadb-server MySQL-python
Il faut ensuite modifier le fichier /etc/mysql/my.cnf et y ajouter les lignes suivantes:
- /etc/mysql/my.cnf
[mysqld] bind-address = 10.0.0.11 default-storage-engine = innodb innodb_file_per_table init-connect = 'SET NAMES utf8'
systemctl enable mariadb.service
systemctl start mariadb.service
RabbitMQ
RabbitMQ est un message broker, c'est a dire un service qui a pour rôle de coordonner les opérations entre les différents services OpenStack
yum install rabbitmq-server systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service rabbitmqctl add_user openstack toto
On attribue a notre utilisateur les droits de lecture d'écriture et d'accès:
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Identity service
le service d'identité sert a:
- suivre les utilisateurs et leurs permissions
- donner une liste des services disponibles ainsi que leur location
Le service d'identité utilise les concepts suivants:
- User (utilisateur final)
- Credentials (couple login/mot de passe de l'utilisateur)
- Authentication (vérifie si le couple login est bon )
- Token (chaine de caractères utilisée pour accéder a l'API OpenStack et aux différentes ressources)
- Tenant (un espace pour regrouper ou isoler les ressources)
- Service (service openStack tel que Compute (nova), Object Storage (swift), Service d'images (glance))
- Endpoint (une adresse accessible sur le réseau, en général une URL)
- Role (un utilisateur définit pour une opération spécifique telle que la bdd)
- keystone client (CLI pour l'API d'identité OpenStack pour que les utilisateurs enregistrent des services dans leur installation OpenStack)
Pour commencer, il faut créer la base de données keystone sous mysql et on lui attribue des droits:
mysql -u root -p CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'Password'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'Password';
pour la mise en place du service d'identité, il faudra installer Apache et Memcached.
yum install openstack-keystone httpd mod_wsgi python-openstackclient memcached python-memcached
Memcached
Memcached est un système d'usage général servant à gérer la mémoire cache distribuée. Il est souvent utilisé pour augmenter la vitesse de réponse des sites web créés à partir de bases de données. Il gère les données et les objets en RAM de façon à réduire le nombre de fois qu'une même donnée stockée dans un périphérique externe est lue.
yum install openstack-keystone httpd mod_wsgi python-openstackclient memcached python-memcached
On active et on start memcached
systemctl enable memcached.service
systemctl start memcached.service
Ensuite il faut éditer le fichier /etc/keystone/keystone.conf pour y configurer:
- le token administrateur
- l'accès a la base de données
- le service memcache
- le token
- le driver de révocation SQL
Pour générer le “admin_token”, la commande suivante peut être utilisée
openssl rand -hex 10
- /etc/keystone/keystone.conf
[DEFAULT] admin_token = aef63cde4f97d8ffb094 [database] connection = mysql://keystone:Password@localhost/keystone [memcache] servers = localhost:11211 [token] provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.memcache.Token [revoke] driver = keystone.contrib.revoke.backends.sql.Revoke
On remplis enfin la base de données:
keystone-manage db_sync keystone
Apache2
On va pour commencer, modifier le fichier /etc/httpd/httpd.conf/ et modifier le ServerName: <file apache /etc/httpd/httpd.conf/> Servername controller </file> On va ensuite créer le fichier /etc/httpd/conf.d/wsgi-keystone.conf/ avec la config suivante:
- /etc/httpd/conf.d/wsgi-keystone.conf/
Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On LogLevel info ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined </VirtualHost> <VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /var/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On LogLevel info ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined </VirtualHost>
Ici on configure afin que apache écoute sur le pots 5000 pour le répertoire /var/www/cgi-bin/keystone/main et sur le port 35357 pour /var/www/cgi-bin/keystone/admin
Ensuite il faut:
- Créer le répertoire utilisé pour WSGI
- Ajouter les composants WSGI
- Modifier les droits et le propriétaire des composants
- Redémarrer apache
mkdir -p /var/www/cgi-bin/keystone curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo \ | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin chown -R keystone:keystone /var/www/cgi-bin/keystone chmod 755 /var/www/cgi-bin/keystone/* systemctl enable httpd.service systemctl start httpd.service
Service d'entité et l'API endpoint
Nous allons maintenant créer le service d'entité et l'API endpoint
service identité
le service d'identité donne accès a un catalogue de service et leur location. Chaque service qui sera rajouté a OpenStack demande un service d'entité et un endpoint.
Tous les services utiliseront ce catalogue afin de déterminer quels services sont disponibles dans l'environnement et pour savoir comment communiquer avec.
Il va donc falloir remplir la base de données, pour cela on va configurer 2 variables d'environnement:
export OS_TOKEN=f7eecd14a22d5e282582 #OS_TOKEN est le token admin généré avant export OS_URL=http://controller:35357/v2.0
et enfin on va créer le service identité
openstack service create --name keystone --description "OpenStack Identity" identity +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | enabled | True | | id | 45b51f4a900b4c6ea5bde12aea084265 | | name | keystone | | type | identity | +-------------+----------------------------------+
Chaque service OpenStack utilise 3 endpoints différents:
- admin qui va gérer les utilisateurs, etc..
- public atteignable depuis l’extérieur pour la gestion
- interne connecté à tous les hôtes
openstack endpoint create \ --publicurl http://controller:5000/v2.0 \ --internalurl http://controller:5000/v2.0 \ --adminurl http://controller:35357/v2.0 \ --region RegionOne \ identity +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | adminurl | http://controller:35357/v2.0 | | id | fe93cd7dbdd34eee9520af1799f264a6 | | internalurl | http://controller:5000/v2.0 | | publicurl | http://controller:5000/v2.0 | | region | regionOne | | service_id | 71b527ce960f46d59803bb8adaa62935 | | service_name | keystone | | service_type | identity | +--------------+----------------------------------+
Utilisateurs rôles et projets
On va ici:
- Créer le projet admin
- Créer l'utilisateur admin
- Créer le rôle admin
- Ajouter le role admin au projet et utilisateur admin
- Faire de même pour l'utilisateur demo
root@controller ~ $ openstack project create --description "Admin Project" admin +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Admin Project | | enabled | True | | id | 69fd1d938d58494b8a09af04d2ea44b3 | | name | admin | +-------------+----------------------------------+ root@controller ~ $ openstack user create --password-prompt admin User Password: Repeat User Password: +----------+----------------------------------+ | Field | Value | +----------+----------------------------------+ | email | None | | enabled | True | | id | 245cff82f2994b06957c0fc89a0fc31b | | name | admin | | username | admin | +----------+----------------------------------+ root@controller ~ $ openstack role create admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 06c1e1a41f6746038cb101d42bfa8129 | | name | admin | +-------+----------------------------------+ root@controller ~ $ openstack role add --project admin --user admin admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 06c1e1a41f6746038cb101d42bfa8129 | | name | admin | +-------+----------------------------------+ root@controller ~ $ openstack project create --description "Service Project" service +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Service Project | | enabled | True | | id | e44ddd3826694a6188e7b6776a7e7269 | | name | service | +-------------+----------------------------------+ root@controller ~ $ openstack project create --description "Demo Project" demo +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Demo Project | | enabled | True | | id | 72458da5060e4d70b77b219781e4fdab | | name | demo | +-------------+----------------------------------+ root@controller ~ $ openstack user create --password-prompt demo User Password: Repeat User Password: +----------+----------------------------------+ | Field | Value | +----------+----------------------------------+ | email | None | | enabled | True | | id | ea0d882d106346ff9c889aacea14b6e5 | | name | demo | | username | demo | +----------+----------------------------------+ root@controller ~ $ openstack role create user +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 1bc328bc460c4908ac04b1e24fa344f7 | | name | user | +-------+----------------------------------+ root@controller ~ $ openstack role add --project demo --user demo user +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 1bc328bc460c4908ac04b1e24fa344f7 | | name | user | +-------+----------------------------------+
Vérifications
Maintenant que nos services sont crées ainsi que les utilisateurs et groupes, on va vérifier que tout fonctionne, pour cela il faut enlever l'admin token utilisé, pour cela, il faut modifier le fichier /usr/share/keystone/keystone-dist-paste.ini et enlever “admin_token_auth” dans les sections suivantes:
[pipeline:public_api]
[pipeline:admin_api]
[pipeline:api_v3]
et on désactive les variables d'environnement:
unset OS_TOKEN OS_URL
Enfin on test en demandant des tokens pour les utilisateurs admin et demo
openstack --os-auth-url http://controller:35357/v3 \ > --os-project-domain-id default --os-user-domain-id default \ > --os-project-name admin --os-username admin --os-auth-type password \ > token issue Password: +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | expires | 2015-11-28T23:20:52.033044Z | | id | 462d97611e964a91ac5147bb93d4d6b9 | | project_id | e41097e466b54c94a4ff754f005cc96b | | user_id | dffb8fddb02c4c4a9b7920ecc80492f0 | +------------+----------------------------------+ openstack --os-auth-url http://controller:5000/v3 \ > --os-project-domain-id default --os-user-domain-id default \ > --os-project-name demo --os-username demo --os-auth-type password \ > token issue Password: +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | expires | 2015-11-28T23:26:30.256833Z | | id | 598235874b2849ce82d6e4233aa291cf | | project_id | 20398b7ab52e4fd7a584b7f0f0d6cd13 | | user_id | a718b6f88473493fa4c8d5835b107b49 | +------------+----------------------------------+
Scripts utilisateurs
Comme on peut le voir pour les commandes précédentes, il faut a chaque fois spécifier des variables, pour éviter d'avoir a le faire a chaque fois et pour chaque utilisateur, il suffis de créer des script contenant des variables d'environnements, ces scripts sont aussi appelés OpenRC files.
On va créer deux scripts, un pour l'admin et un pour l'utilisateur demo
export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=admin export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3
export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=demo export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3
Pour utiliser ces scripts et ainsi changer sont environnement, il faut charger le fichier:
source admin.sh
et ensuite on peut utiliser la commande openstack sans spécifier toutes les options:
openstack token issue
Images service
Install and configure
Comme pour keystone, on crée une database et on y ajoute un utilisateur avec les droits nécessaires:
CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ IDENTIFIED BY 'GLANCE_DBPASS'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ IDENTIFIED BY 'GLANCE_DBPASS';
On va a présent utilisé le script admin crée plus haut pour créer notre utilisateur et notre service glance et on va passer cet utilisateur dans le role d'admin:
openstack user create --domain default --password-prompt glance openstack role add --project service --user glance admin openstack service create --name glance \ --description "OpenStack Image service" image
et enfin on va créer nos 3 endpoints pour l'api de glance:
- Un public
- Un interne
- Un admin
openstack endpoint create \ --publicurl http://controller:9292 \ --internalurl http://controller:9292 \ --adminurl http://controller:9292 \ --region RegionOne \ image
Maintenant que la les bdd, les utilisateurs et les endpoints sont crées, on va installer glance:
yum install openstack-glance python-glance python-glanceclient
et le configurer en éditant le fichier /etc/glance/glance-api.conf et y ajouter les éléments suivants:
[database] connection = mysql://glance:GLANCE_DBPASS@controller/glance [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = glance password = GLANCE_PASS [paste_deploy] flavor = keystone [glance_store] default_store = file filesystem_store_datadir = /var/lib/glance/images/ [DEFAULT] notification_driver = noop verbose = True
On édite enfin le fichier /,etc/glance/glance-registry et on ajoute comme au dessus sauf la partie [glance_store]
on remplis la base de données:
/bin/sh -c "glance-manage db_sync" glance
et enfin on active et démarre les services API et registry de glance:
systemctl enable openstack-glance-api.service \
openstack-glance-registry.service
systemctl start openstack-glance-api.service \
openstack-glance-registry.service
Vérifications
Pour vérifier que tout fonctionne on va upload une image dans glance:
on la télécharge:
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
on crée l'image:
glance image-create --name "cirros" \ --file cirros-0.3.4-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --visibility public --progress [=============================>] 100% +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | ee1eca47dc88f4879d8a229cc70a07c6 | | container_format | bare | | created_at | 2015-11-29T13:41:05Z | | disk_format | qcow2 | | id | 16bd92f7-a629-4513-a778-bd999c23df70 | | min_disk | 0 | | min_ram | 0 | | name | cirros | | owner | e41097e466b54c94a4ff754f005cc96b | | protected | False | | size | 13287936 | | status | active | | tags | [] | | updated_at | 2015-11-29T13:41:05Z | | virtual_size | None | | visibility | public | +------------------+--------------------------------------+
et on vérifie que l'image soit bien upload :
glance image-list +--------------------------------------+--------+ | ID | Name | +--------------------------------------+--------+ | 16bd92f7-a629-4513-a778-bd999c23df70 | cirros | +--------------------------------------+--------+
Compute service
Overview
Le service compute d'OpenStack se nomme “Nova”, c'est lui qui va heberger et gérér les instance. Nova va intéragir avec le service d'identité pour l'authentification des utilisateurs, le service d'images pour les disques et les images des servers et le dashboard pour l'interface d'administration. Les accès aux images sont limités par projets et par utilisateurs et les quotas sont limités par projets ( le nombre d'instances lancées). Le service Nova est composé de:
- nova-api service : Accepte et réponds aux appels fait par les utilisateurs via l'API
- nova-api-metadata service : Accepte les requetes des métadatas venant des instances (multi-hosts+nova-network installations)
- nova-compute service : daemon qui créer et stop les instances virtuelles, il accepte les commandes venant de la queue et effectue une série de commandes comme lancer une instance KVM et met a jour la base de données
- nova-scheduler service : prend une requete d'instance depuis la queue et determine le server compute hôte sur lequel il va tourner.
- Nova-conductor module : Mediatise les interactions entre le service nova-compute et la base de données, il élimite l'accès direct a la base de données du cloud fait par le service nova-compute
- Nova-cert module : daemon qui sert le service Nova Cert pour les certificats X509
- Nova-network worker daemon : Similaire au service nova-compute, il accepte les taches réseaux depuis la queue et manipule le réseau, mise en place du pontage des interfaces et des règles iptables
- Nova-consoleauth daemon : Autorise les tokens pour les utilisateurs que les proxy fournit
- Nova-novncproxy daemon : fournit un proxy pour accèder aux instances via VNC
- Nova-spicehtml5proxy daemon : fournit un proxy pour accèder aux instances via SPICE
- Nova-xvpvncproxy daemon : fournit un proxy pour accèder aux instances via VNC
- Nova-cert daemon : certificats x509
- Euca2ools client : un ensemble de lignes de commandes pour gérer les ressources du cloud
- Nova client : permet a l'utilisateur de lancer des commandes en tant qu'admministrateur ou utilisateur du conteneur
- The queue : point de passage des messages entre les différents daemons, implémenté avec RabbitMQ
- SQL database : stocke les types d'instance disponnibles,les instances lancées, les réseaux disponibles et les projets
Controller node
Pour commencer, on créer la base de données nova et on attribue les droits a l'utilisateur nova sur cette base de données
CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY 'toto'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY 'toto';
on définit l'environnement:
source admin-openrc.sh
creation d'utilisateur,de services et d'API endpoint:
openstack user create --domain default --password-prompt nova User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | default | | enabled | True | | id | 43248987f3c1483ba018d27cb13985f8 | | name | nova | +-----------+----------------------------------+
ajout de l'utilisateur nova au rôle administrateur:
openstack role add --project service --user nova admin
Création du service nova:
openstack service create --name nova \ --description "OpenStack Compute" compute +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | 57ec033fd5684cf18efcede6108f81cc | | name | nova | | type | compute | +-------------+----------------------------------+
Création des API endpoints:
root@controller ~ $ openstack endpoint create --region RegionOne \ > compute public http://controller:8774/v2/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 3dcea6f8efc543c08625d7067501a17f | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 57ec033fd5684cf18efcede6108f81cc | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2/%(tenant_id)s | +--------------+-----------------------------------------+ root@controller ~ $ openstack endpoint create --region RegionOne \ > compute internal http://controller:8774/v2/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 029ff031993c41cca53f27b46c6fc23e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 57ec033fd5684cf18efcede6108f81cc | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2/%(tenant_id)s | +--------------+-----------------------------------------+ root@controller ~ $ openstack endpoint create --region RegionOne \ > compute admin http://controller:8774/v2/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 5fadb9c4f4f1422bb205ffc1afd3b329 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 57ec033fd5684cf18efcede6108f81cc | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2/%(tenant_id)s | +--------------+-----------------------------------------+
installer et configurer les composants
Installation des packages necessaires:
yum install -y openstack-nova-api openstack-nova-cert \ openstack-nova-conductor openstack-nova-console \ openstack-nova-novncproxy openstack-nova-scheduler \ python-novaclient
edition du fichier /etc/nova/nova.conf
- /etc/nova/nova.conf
[database] connection = mysql://nova:NOVA_DBPASS@localhost/nova [DEFAULT] rpc_backend = rabbit auth_strategy = keystone my_ip = 10.0.0.11 network_api_class = nova.network.neutronv2.api.API security_group_api = neutron linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver firewall_driver = nova.virt.firewall.NoopFirewallDriver verbose = True enabled_apis=osapi_compute,metadata [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = nova password = NOVA_PASS [vnc] vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip [glance] host = controller [oslo_concurrency] lock_path = /var/lib/nova/tmp
remplissage de la bdd:
su -s /bin/sh -c "nova-manage db sync" nova
acivation et demarrage des services:
systemctl enable openstack-nova-api.service \
openstack-nova-cert.service openstack-nova-consoleauth.service \
openstack-nova-scheduler.service openstack-nova-conductor.service \
openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service \
openstack-nova-cert.service openstack-nova-consoleauth.service \
openstack-nova-scheduler.service openstack-nova-conductor.service \
openstack-nova-novncproxy.service
Compute node
Maintenant que le node controller est configuré, au tour du compute.
Installation des packages necessaires:
yum install -y openstack-nova-compute sysfsutils
Il faut ensuite éditer le fichier /etc/nova/nova.conf et y ajouter ceci:
- /etc/nova/nova.conf
[DEFAULT] rpc_backend = rabbit auth_strategy = keystone network_api_class = nova.network.neutronv2.api.API security_group_api = neutron linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver firewall_driver = nova.virt.firewall.NoopFirewallDriver verbose = True [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS my_ip = 10.0.0.31 [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = nova password = NOVA_PASS [vnc] enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html [glance] host = controller [oslo_concurrency] lock_path = /var/lib/nova/tmp
Il faut ensuite tester si le node supporte l'acceleration matérielle pour les VM
egrep -c '(vmx|svm)' /proc/cpuinfo
si la commande au dessus retourne 0, soit il faut modifier les parametres du node sur l'hyperviseur si les nodes sont des VM, soit on modifie le fichier /etc/nova/nova.conf et on y ajoute ceci:
- /etc/nova/nova.conf
[libvirt] virt_type = qemu
enfin on active et demarre les services:
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
si Openstack nova ne demarre pas, c'est peut etre le firewall qui bloque la connexion, on ouvre donc les ports:
iptables -I INPUT -p tcp -m tcp --dport 5672 -j ACCEPT iptables -I INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
On vérifie que tout fonctionne en listant:
- Les services
nova service-list +----+------------------+------------+----------+---------+-------+----------------------------+-----------------+ | Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | +----+------------------+------------+----------+---------+-------+----------------------------+-----------------+ | 1 | nova-scheduler | controller | internal | enabled | up | 2015-12-02T14:10:33.000000 | - | | 2 | nova-consoleauth | controller | internal | enabled | up | 2015-12-02T14:10:33.000000 | - | | 3 | nova-conductor | controller | internal | enabled | up | 2015-12-02T14:10:33.000000 | - | | 4 | nova-cert | controller | internal | enabled | up | 2015-12-02T14:10:33.000000 | - | | 5 | nova-compute | compute | nova | enabled | down | 2015-11-29T23:44:47.000000 | - | +----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
- Les api endpoints
nova endpoints +-----------+------------------------------------------------------------+ | nova | Value | +-----------+------------------------------------------------------------+ | id | 029ff031993c41cca53f27b46c6fc23e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | url | http://controller:8774/v2/e41097e466b54c94a4ff754f005cc96b | +-----------+------------------------------------------------------------+ +-----------+------------------------------------------------------------+ | nova | Value | +-----------+------------------------------------------------------------+ | id | 3dcea6f8efc543c08625d7067501a17f | | interface | public | | region | RegionOne | | region_id | RegionOne | | url | http://controller:8774/v2/e41097e466b54c94a4ff754f005cc96b | +-----------+------------------------------------------------------------+ +-----------+------------------------------------------------------------+ | nova | Value | +-----------+------------------------------------------------------------+ | id | 5fadb9c4f4f1422bb205ffc1afd3b329 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | url | http://controller:8774/v2/e41097e466b54c94a4ff754f005cc96b | +-----------+------------------------------------------------------------+ +-----------+----------------------------------+ | keystone | Value | +-----------+----------------------------------+ | id | 76d76ed4f9b1443a820818a1c8b09b79 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | url | http://controller:35357/v2.0 | +-----------+----------------------------------+ +-----------+----------------------------------+ | keystone | Value | +-----------+----------------------------------+ | id | d9bf9e4f009445708f817f9fa9ecddc1 | | interface | public | | region | RegionOne | | region_id | RegionOne | | url | http://controller:5000/v2.0 | +-----------+----------------------------------+ +-----------+----------------------------------+ | keystone | Value | +-----------+----------------------------------+ | id | e58f6d966c564129b21fc4db21e0729e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | url | http://controller:5000/v2.0 | +-----------+----------------------------------+ +-----------+----------------------------------+ | glance | Value | +-----------+----------------------------------+ | id | d43f4659c411417f8510f3bafbbcd455 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | url | http://controller:9292 | +-----------+----------------------------------+ +-----------+----------------------------------+ | glance | Value | +-----------+----------------------------------+ | id | d9003452b2064fb39ba1f8fd14a05df3 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | url | http://controller:9292 | +-----------+----------------------------------+ +-----------+----------------------------------+ | glance | Value | +-----------+----------------------------------+ | id | e6c342506c49453aa8ca231e2f026554 | | interface | public | | region | RegionOne | | region_id | RegionOne | | url | http://controller:9292 | +-----------+----------------------------------+
- Les images
nova image-list +--------------------------------------+-------------+--------+--------+ | ID | Name | Status | Server | +--------------------------------------+-------------+--------+--------+ | b8ab3980-b361-4f18-9e55-ceb067b8696f | cirros | ACTIVE | | +--------------------------------------+-------------+--------+--------+