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:

  1. Controller
  2. 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:

  1. Controller
  2. Network
  3. 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:

  1. ajouter les repositories EPEL et les activer
  2. ajouter à nos VM les sources list de OpenStack
  3. update les sources
  4. 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:

  1. suivre les utilisateurs et leurs permissions
  2. donner une liste des services disponibles ainsi que leur location

Le service d'identité utilise les concepts suivants:

  1. User (utilisateur final)
  2. Credentials (couple login/mot de passe de l'utilisateur)
  3. Authentication (vérifie si le couple login est bon )
  4. Token (chaine de caractères utilisée pour accéder a l'API OpenStack et aux différentes ressources)
  5. Tenant (un espace pour regrouper ou isoler les ressources)
  6. Service (service openStack tel que Compute (nova), Object Storage (swift), Service d'images (glance))
  7. Endpoint (une adresse accessible sur le réseau, en général une URL)
  8. Role (un utilisateur définit pour une opération spécifique telle que la bdd)
  9. 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:

  1. le token administrateur
  2. l'accès a la base de données
  3. le service memcache
  4. le token
  5. 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:

  1. Créer le répertoire utilisé pour WSGI
  2. Ajouter les composants WSGI
  3. Modifier les droits et le propriétaire des composants
  4. 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:

  1. admin qui va gérer les utilisateurs, etc..
  2. public atteignable depuis l’extérieur pour la gestion
  3. 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:

  1. Créer le projet admin
  2. Créer l'utilisateur admin
  3. Créer le rôle admin
  4. Ajouter le role admin au projet et utilisateur admin
  5. 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:

  1. Un public
  2. Un interne
  3. 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:

  1. nova-api service : Accepte et réponds aux appels fait par les utilisateurs via l'API
  2. nova-api-metadata service : Accepte les requetes des métadatas venant des instances (multi-hosts+nova-network installations)
  3. 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
  4. nova-scheduler service : prend une requete d'instance depuis la queue et determine le server compute hôte sur lequel il va tourner.
  5. 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
  6. Nova-cert module : daemon qui sert le service Nova Cert pour les certificats X509
  7. 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
  8. Nova-consoleauth daemon : Autorise les tokens pour les utilisateurs que les proxy fournit
  9. Nova-novncproxy daemon : fournit un proxy pour accèder aux instances via VNC
  10. Nova-spicehtml5proxy daemon : fournit un proxy pour accèder aux instances via SPICE
  11. Nova-xvpvncproxy daemon : fournit un proxy pour accèder aux instances via VNC
  12. Nova-cert daemon : certificats x509
  13. Euca2ools client : un ensemble de lignes de commandes pour gérer les ressources du cloud
  14. Nova client : permet a l'utilisateur de lancer des commandes en tant qu'admministrateur ou utilisateur du conteneur
  15. The queue : point de passage des messages entre les différents daemons, implémenté avec RabbitMQ
  16. 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:

  1. 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 | -               |
+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
  1. 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           |
+-----------+----------------------------------+
  1. Les images
        nova image-list
+--------------------------------------+-------------+--------+--------+
| ID                                   | Name        | Status | Server |
+--------------------------------------+-------------+--------+--------+
| b8ab3980-b361-4f18-9e55-ceb067b8696f | cirros      | ACTIVE |        |
+--------------------------------------+-------------+--------+--------+

networking component

dashboard

block storage service

object storage

orchestration module

telemetry module

wiki/openstack.txt · Dernière modification: 2018/04/23 19:13 (modification externe)
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5