4. Infrastructure Openstack

Installation OpenStack Training Labs sur un serveur Scaleway C2L 8 CPUs, 32 Go RAM

1. Révision de l'architecture et des services

...

Architecture conceptuelle d'OpenStack
Figure 45 : Architecture conceptuelle d'OpenStack

2. Connexion aux noeuds

2.1. Connexion SSH aux noeuds Virtualbox

stack@stacktrain1:~$ tail -n14 $HOME/labs/log/stacktrain.log
14585 22:53:51.942 stacktrain.core.report INFO VM name: compute1
14585 22:53:51.943 stacktrain.core.report INFO     SSH login: ssh -p 2232 osbash@127.0.0.1
14585 22:53:51.943 stacktrain.core.report INFO                (password: osbash)
14585 22:53:51.943 stacktrain.core.report INFO VM name: controller
14585 22:53:51.944 stacktrain.core.report INFO     SSH login: ssh -p 2230 osbash@127.0.0.1
14585 22:53:51.944 stacktrain.core.report INFO                (password: osbash)
14585 22:53:51.944 stacktrain.core.report INFO     Dashboard: Assuming horizon is on controller VM.
14585 22:53:51.944 stacktrain.core.report INFO                http://127.0.0.1:8888/horizon/
14585 22:53:51.944 stacktrain.core.report INFO                User  : demo (password: demo_user_pass)
14585 22:53:51.945 stacktrain.core.report INFO                User  : admin (password: admin_user_secret)
14585 22:53:51.945 stacktrain.core.report INFO Network: mgmt
14585 22:53:51.945 stacktrain.core.report INFO          Network address: 10.0.0.0
14585 22:53:51.945 stacktrain.core.report INFO Network: provider
14585 22:53:51.946 stacktrain.core.report INFO          Network address: 203.0.113.0

Pour contrôler notre solution, nous allons nous connecter en SSH sur l'hôte de virtualisation qui héberge les deux noeuds installés en transférant localement les ports TCP 2230 (controller) et TCP 2232 (compute1), ainsi que le port TCP 8888 qui héberge le panneau de contrôle Horizon :

ssh -L 8888:127.0.0.1:8888 -L 2230:127.0.0.1:2230 -L 2232:127.0.0.1:2232 root@stacktrain
Connexion à Horizon
Figure 46 : Connexion à Horizon

On peut alors se connecter facilement aux deux noeuds et y transférer du trafic.

Connexion au noeud "controller"

$ ssh -p 2230 osbash@127.0.0.1
osbash@127.0.0.1 s password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-142-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Sat Mar  2 22:37:26 2019 from 10.0.2.2
osbash@controller:~$

Connexion au noeud "compute1"

$ ssh -p 2232 osbash@127.0.0.1
osbash@127.0.0.1 s password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-142-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Sat Mar  2 22:51:19 2019 from 10.0.2.2
osbash@compute1:~$

2.2. Connexion SSH aux noeuds KVM

...

3. Méthode d'administration d'OpenStack

Les méthode d'administration d'OpenStack peuvent être les suivantes :

On notera aussi que l'on peut l'administrer avec Ansible : http://docs.ansible.com/ansible/list_of_cloud_modules.html#openstack dans des objectifs d'orchestration cloud.

OpenStackClient

OpenStackClient (aka OSC) est un client en ligne de commande pour OpenStack qui rassemble l'ensemble des commandes des APIs de calcul, d'identité, d'image, de stockage d'objets et de stockage en bloc en un shell unique avec une structure de commandes uniforme.

Python OpenStackClient

Chargement de l'environnement Admin

osbash@controller:~$ cat ~/admin-openrc.sh
export OS_USERNAME=admin
export OS_PASSWORD=admin_user_secret
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://10.0.0.11:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

. ~/admin-openrc.sh

Services sur le noeud Controller

osbash@controller:~$ openstack service list
+----------------------------------+-----------+----------------+
| ID                               | Name      | Type           |
+----------------------------------+-----------+----------------+
| 0147f2eb77a84c86b32c313734c39872 | nova      | compute        |
| 1f6d4ad10143424bba5a02e69c1eb671 | heat      | orchestration  |
| 295c9e72a6e9490da59fa876a60dd8f4 | cinderv3  | volumev3       |
| 3cb13c39a8454773b79ad1ceea9f9277 | neutron   | network        |
| 490128f58d594ed19d30ebe6cc6dd122 | heat-cfn  | cloudformation |
| 7fb80054a22849be84c072a94734e488 | placement | placement      |
| 983711b741a14122b0e0ed019f0923fa | cinderv2  | volumev2       |
| e0374ee5cc8145ab8d8b6d0a121b4713 | keystone  | identity       |
| ea937163db594f16ae6b2ca28e66a0b4 | glance    | image          |
+----------------------------------+-----------+----------------+

Base de données

osbash@controller:~$ sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT user,plugin FROM mysql.user;
+----------+-------------+
| user     | plugin      |
+----------+-------------+
| root     | unix_socket |
| keystone |             |
| keystone |             |
| glance   |             |
| glance   |             |
| nova     |             |
| nova     |             |
| neutron  |             |
| neutron  |             |
| cinder   |             |
| cinder   |             |
| heat     |             |
| heat     |             |
+----------+-------------+
13 rows in set (0.00 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| cinder             |
| glance             |
| heat               |
| information_schema |
| keystone           |
| mysql              |
| neutron            |
| nova               |
| nova_api           |
| nova_cell0         |
| performance_schema |
+--------------------+
11 rows in set (0.00 sec)

MariaDB [(none)]> exit
Bye
osbash@controller:~$ mysql -u keystone -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 75
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| keystone           |
+--------------------+
2 rows in set (0.00 sec)

MariaDB [(none)]> USE keystone;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [keystone]> SHOW TABLES;
+------------------------+
| Tables_in_keystone     |
+------------------------+
| access_token           |
| assignment             |
| config_register        |
| consumer               |
| credential             |
| endpoint               |
| endpoint_group         |
| federated_user         |
| federation_protocol    |
| group                  |
| id_mapping             |
| identity_provider      |
| idp_remote_ids         |
| implied_role           |
| local_user             |
| mapping                |
| migrate_version        |
| nonlocal_user          |
| password               |
| policy                 |
| policy_association     |
| project                |
| project_endpoint       |
| project_endpoint_group |
| region                 |
| request_token          |
| revocation_event       |
| role                   |
| sensitive_config       |
| service                |
| service_provider       |
| token                  |
| trust                  |
| trust_role             |
| user                   |
| user_group_membership  |
| user_option            |
| whitelisted_config     |
+------------------------+
38 rows in set (0.00 sec)

MariaDB [keystone]> exit
Bye

4. Service d'identification : Keystone

Fonctions du service d'identification Keystone

Gestion des utilisateurs

Suit les utilisateurs et leurs permissions.

Catalogue de services

Un catalogue des services disponibles et de leur endpoint d'API.

Crédits

Données qui permet aux utilisateurs de prouver qui ils sont :

  • Username/Password
  • Username/API key
  • Jeton d'authentification (authentication token)

Domaine

Un domaine OpenStack est une entité Identity APIv3. Il représente un ensemble de projets, de groupes et d'utilisateurs qui définissent les limites administratives pour la gestion des entités OpenStack Identity.

Jeton d'authentification

Un jeton est un texte arbitraire utilisé pour accéder aux ressources. Chaque jeton a une portée, décrivant quelles ressources sont accessibles avec lui. Le jeton peut être révoqué à tout moment et est valable pour une durée limitée.

Projet

Un projet est une sorte de conteneur utilisé pour regrouper ou isoler des ressources et/ou des objets d'identité. Selon l'opérateur de service, un projet peut correspondre à un client, un compte, une organisation ou un projet.

Service

Un service tel que Compute (Nova), Object storage (Swift) ou Image service (Glance). Il fournit un ou plusieurs points terminaux (endpoints) grâce auxquels les utilisateurs peuvent accéder aux ressources et effectuer des opérations.

Points terminal (Endpoint)

Un point terminal (Endpoint) est une adresse accessible au réseau, généralement décrite par une URL, à partir de laquelle on peut accéder à un service.

Rôle

Un rôle est la personnalité qu'un utilisateur assume et qui lui permet d'effectuer un ensemble spécifique d'opérations. Un rôle comprend un ensemble de droits et de privilèges. Un utilisateur prenant ce rôle en charge hérite de ses droits et privilèges. Dans le service d'identité, un jeton délivré à un utilisateur inclut une liste des rôles qu'un utilisateur possède. Les services qui sont appelés par cet utilisateur déterminent comment ils interprètent l'ensemble des rôles d'un utilisateur et à quelles opérations ou ressources chaque rôle donne accès.

Examen sur le noeud Controller

Chargement des variables d'environnement

osbash@controller:~$ . admin-openrc.sh

Domaines

osbash@controller:~$ openstack domain list
+----------------------------------+---------+---------+--------------------------+
| ID                               | Name    | Enabled | Description              |
+----------------------------------+---------+---------+--------------------------+
| c414549a7d9442fc82c7bd914297aeaa | heat    | True    | Stack projects and users |
| default                          | Default | True    | The default domain       |
+----------------------------------+---------+---------+--------------------------+

Projets

osbash@controller:~$ openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 6ec31424782241649f1f1165c1621db3 | service |
| 88286827b5bf4ca197928a47ea118136 | admin   |
| e7bb777bdfae4003939e5bffe920f0c9 | demo    |
+----------------------------------+---------+

Utilisateurs

osbash@controller:~$ openstack user list
+----------------------------------+-------------------+
| ID                               | Name              |
+----------------------------------+-------------------+
| 1f6a1ea4b7884a1583a148e517a6a65c | glance            |
| 308f0be7c9b5494db8e0ec055b76efb9 | neutron           |
| 3bacac47f77f48aa9a83b902dd65519a | cinder            |
| 3c5a42369af94e27a051790bff61370e | heat_domain_admin |
| 51e03b69079341288c4e9aea2ce859fe | nova              |
| 91e1392791a145f985ea1153e2b2525b | demo              |
| dc18ccebb49746ffaeec988a86196436 | placement         |
| e5f2b47e72de4d858893880538b0d39f | heat              |
| f62d54a6ee694e90a36e6612d97b475c | admin             |
+----------------------------------+-------------------+

Rôles

osbash@controller:~$ openstack role list
+----------------------------------+------------------+
| ID                               | Name             |
+----------------------------------+------------------+
| 5abbdafd8a81419eb22ccb9dd7744585 | admin            |
| 72f15611395e4d7181f0b8b38090262f | user             |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_         |
| c5e2289ad8294142a6639c5bdfce5e81 | heat_stack_user  |
| c76fbb01b98346dcb7d4d19f316f2af4 | heat_stack_owner |
+----------------------------------+------------------+

5. Service d'images : Glance

Le service d'image d'OpenStack permet aux utilisateurs de découvrir, enregistrer et récupérer des images VM. Glance propose une API RESTful qui permet d'interroger les métadonnées des machines virtuelles et de récupérer l'image. Il prend en charge le stockage d'images de disque ou de serveur sur différents types de dépôts, y compris OpenStack Object Storage.

Composants

  • glance-api : accepte les appels API pour la découverte, la récupération et l'archivage des images.
  • glance-registry : stocke, traite et récupère les métadonnées sur les images. Les métadonnées comprennent des informations comme la taille et le type.
  • base de donnée : Stocke les métadonnées des images. La plupart des déploiements utilisent MySQL ou SQLite.
  • Dépôts de stockage : Différents types de référentiels sont pris en charge, y compris les systèmes de fichiers normaux, le stockage d'objets, les périphériques de type bloc "Reliable Autonomic Distributed Object Store (RADOS)", HTTP, et Amazon S3. Certains dépôts ne prennent en charge que l'utilisation en lecture seule.

Liste des images

Sur le noeud de contrôle.

openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 9173ec36-6beb-4361-9446-021cf5dc8b9c | cirros | active |
+--------------------------------------+--------+--------+

6. Service de calcul : Nova

OpenStack Compute héberge et gère les systèmes cloud computing. Il interagit avec OpenStack Identity pour l'authentification, OpenStack Image service pour les disques et les images des serveurs, et avec OpenStack Dashboard pour l'interface utilisateur et administrative. L'accès aux images est limité par projet, et par utilisateur ; les quotas sont limités par projet (le nombre d'instances, par exemple). OpenStack Compute peut évoluer horizontalement sur du matériel standard et télécharger des images pour lancer des instances.

APIs

Service nova-api

Accepte et répond aux appels de l'API de calcul par l'utilisateur final. Le service prend en charge l'API OpenStack Compute, l'API Amazon Elastic Compute 2 (EC2) et une API d'administration spéciale pour les utilisateurs privilégiés pour effectuer des actions administratives. Il renforce certaines politiques et lance la plupart des activités d'orchestration, comme l'exécution d'une instance.

Service nova-api-metadata

Accepte les demandes de métadonnées provenant des instances. Le service nova-api-metadata est généralement utilisé lorsque vous exécutez en mode multi-hôte avec des installations "nova-network".

Coeur du calcul

Service nova-compute

Un "Worker Daemon" qui crée et termine les instances des machines virtuelles par l'intermédiaire des API de l'hyperviseur. Par exemple :

  • Xen API for XenServer/XenCloudPlatform (XCP)
  • libvirt for KVM or QEMU
  • VMware API for VMware.

Service nova-scheduler

Service qui prend une requête d'instance de VM dans la file d'attente et détermine sur quel serveur de calcul elle s'exécute.

Module nova-conductor

Assure la liaison entre le service nova-compute et la base de données. Il élimine l'accès direct à la base de données en nuage du service nova-compute. Le module nova-conductor s'adapte horizontalement. Cependant, il ne faut pas le déployer sur les nœuds où le service nova-compute fonctionne.

Service réseau pour les instances

nova-network worker daemon

Semblable au service nova-compute, il accepte les tâches réseau de la file d'attente et manipule le réseau. Effectue des tâches telles que la mise en place d'interfaces de pontage ou la modification des règles IPtables.

Les interfaces console

  • nova-novnc proxy daemon : Fournit un proxy pour accéder aux instances en cours d'exécution via une connexion Virtual Network Computing (VNC). Prend en charge les clients novnc basés sur un navigateur.
  • nova-spicehtml5 proxy daemon : Fournit un proxy pour accéder aux instances en cours d'exécution via une connexion SPICE (Simple Protocol for Independent Computing Environments). Prise en charge du client HTML5 par navigateur.
  • nova-xvpvnc proxy daemon : Fournit un proxy pour accéder aux instances en cours d'exécution via une connexion VNC. Prise en charge d'un client Java spécifique à OpenStack.
  • nova-cert module : Un démon de serveur qui sert le service Nova Cert pour les certificats X509. Il est utilisé pour générer des certificats pour euca-bundle-image. Nécessaire uniquement pour l'API EC2.
  • Démon nova-cert : certificats x509.

Gestion des images

Client euca2ools : Un ensemble de commandes pour la gestion des ressources en nuage. Bien que ce ne soit pas un module OpenStack, vous pouvez configurer nova-api pour supporter cette interface EC2.

Ligne de commande et autres interfaces

Client nova : Permet aux utilisateurs de soumettre des commandes en tant qu'administrateur de projet ou utilisateur final.

La file d'attente

Un concentrateur central est nécessaire pour passer les messages entre les démons. Généralement implémenté avec RabbitMQ, mais peut être implémenté avec une file de messages AMQP, comme Apache Qpid ou Zero MQ.

La base de donnée SQL

La base de donnée SQL stocke la plupart des états de construction et d'exécution d'une infrastructure cloud, y compris :

  • Les types d'instances disponibles
  • Les instances en utilisation
  • Les réseaux disponibles
  • Les projets.

En théorie, OpenStack Compute peut supporter n'importe quelle base de données que SQL-Alchemy supporte. Les bases de données communes sont SQLite3 pour le développement et les tests, MySQL et PostgreSQL. SQL-Alchemy est la boîte à outils SQL de Python et l'Object Relational Mapper (ORM) qui donne aux développeurs d'applications la pleine puissance et la flexibilité du SQL. Il fournit une suite complète de modèles de persistance bien connus au niveau de l'entreprise, conçus pour un accès efficace et performant aux bases de données, adaptés à un langage de domaine simple et en Python.

Services compute sur le noeud Controller

osbash@controller:~$ openstack compute service list
+----+------------------+------------+----------+---------+-------+----------------------------+
| ID | Binary           | Host       | Zone     | Status  | State | Updated At                 |
+----+------------------+------------+----------+---------+-------+----------------------------+
|  1 | nova-scheduler   | controller | internal | enabled | up    | 2019-03-02T18:53:14.000000 |
|  2 | nova-consoleauth | controller | internal | enabled | up    | 2019-03-02T18:53:08.000000 |
|  3 | nova-conductor   | controller | internal | enabled | up    | 2019-03-02T18:53:08.000000 |
|  7 | nova-compute     | compute1   | nova     | enabled | up    | 2019-03-02T18:53:11.000000 |
+----+------------------+------------+----------+---------+-------+----------------------------+

7. Service réseau : Neutron

Le service réseau OpenStack permet la création et la connexion d'adaptateurs gérés par d'autres services OpenStack aux réseaux, à l'infrastructure de réseau virtuel (VNI) et son accès à l'infrastructure de réseau physique (PNI). Des plug-ins peuvent être implémentés pour s'adapter à différents équipements et logiciels réseau, offrant ainsi une flexibilité à l'architecture et au déploiement OpenStack.

Pour ce faire, Neutron fournit des objets pour imiter son homologue physique :

  • Réseaux
  • Sous-réseaux
  • Routeurs
  • Groupes de sécurité

Composants du service Neutron

neutron-server

Accepte et achemine les requêtes APIs vers le plug-in réseau approprié pour agir.

Agents et plug-ins réseau

  • Branchement et débranchement des ports, création de réseaux ou de sous-réseaux, et fourniture d'adresses IP. Ces plug-ins et agents diffèrent en fonction du fournisseur et des technologies utilisées dans le nuage en présence.
  • Mise en réseau avec des plug-ins et des agents pour les commutateurs virtuels et physiques Cisco, les produits NEC OpenFlow, Open vSwitch (OvS), Linux Bridging et le produit VMware NSX.
  • Les agents habituels sont L3 (couche 3), Dynamic Host Configuration Protocol (DHCP) et un agent plug-in.

File d'attente de messages

Utilisé par la plupart des installations OpenStack pour acheminer les informations entre le serveur neutron et les différents agents. Il sert également de base de données pour stocker l'état de mise en réseau de plug-ins particuliers.

Liste des extension réseau sur le controlleur

osbash@controller:~$ openstack extension list --column "Name" --network
+----------------------------------------------------------------------------------------------+
| Name                                                                                         |
+----------------------------------------------------------------------------------------------+
| Default Subnetpools                                                                          |
| Network IP Availability                                                                      |
| Network Availability Zone                                                                    |
| Auto Allocated Topology Services                                                             |
| Neutron L3 Configurable external gateway mode                                                |
| Port Binding                                                                                 |
| agent                                                                                        |
| Subnet Allocation                                                                            |
| L3 Agent Scheduler                                                                           |
| Tag support                                                                                  |
| Neutron external network                                                                     |
| Tag support for resources with standard attribute: trunk, policy, security_group, floatingip |
| Neutron Service Flavors                                                                      |
| Network MTU                                                                                  |
| Availability Zone                                                                            |
| Quota management support                                                                     |
| If-Match constraints based on revision_number                                                |
| HA Router extension                                                                          |
| Provider Network                                                                             |
| Multi Provider Network                                                                       |
| Quota details management support                                                             |
| Address scope                                                                                |
| Neutron Extra Route                                                                          |
| Network MTU (writable)                                                                       |
| Subnet service types                                                                         |
| Resource timestamps                                                                          |
| Neutron Service Type Management                                                              |
| Router Flavor Extension                                                                      |
| Port Security                                                                                |
| Neutron Extra DHCP options                                                                   |
| Resource revision numbers                                                                    |
| Pagination support                                                                           |
| Sorting support                                                                              |
| security-group                                                                               |
| DHCP Agent Scheduler                                                                         |
| Router Availability Zone                                                                     |
| RBAC Policies                                                                                |
| Tag support for resources: subnet, subnetpool, port, router                                  |
| standard-attr-description                                                                    |
| Neutron L3 Router                                                                            |
| Allowed Address Pairs                                                                        |
| project_id field enabled                                                                     |
| Distributed Virtual Router                                                                   |
+----------------------------------------------------------------------------------------------+

Liste des agents

openstack network agent list
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 391aff6f-3932-4a70-a86a-cdbc4dfceebc | L3 agent           | controller | nova              | :-)   | UP    | neutron-l3-agent          |
| 88352283-11ac-4560-8457-00000683e4c2 | Metadata agent     | controller | None              | :-)   | UP    | neutron-metadata-agent    |
| 8e3c59cc-a09d-45ad-a470-1e074936a1d2 | Linux bridge agent | compute1   | None              | :-)   | UP    | neutron-linuxbridge-agent |
| a2418f32-726f-48ad-8595-f441b243573f | Linux bridge agent | controller | None              | :-)   | UP    | neutron-linuxbridge-agent |
| bed4d037-e0dc-4d5e-981f-2410d11c6c8e | DHCP agent         | controller | nova              | :-)   | UP    | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+

Organisation des réseaux

La configuration réseau utilise un réseau de provider (externe) qui se connecte à l'infrastructure réseau physique via la couche 2 (pontage/commutation). Ce réseau comprend un serveur DHCP qui fournit des adresses IP aux instances.

Le réseau du provider utilise le réseau 203.0.113.0/24 avec une passerelle à l'adresse 203.0.113.1. Le serveur DHCP attribue à chaque instance une adresse IP flottante comprise entre 203.0.113.101 et 203.0.113.250. Toutes les instances utilisent 8.8.4.4.4 comme résolveur DNS.

Il est à noter que sur l'instance VM elle-même, l'adresse IP flottante n'est pas connue. Neutron agit comme un routeur NAT mappant l'adresse IP privée interne avec l'adresse IP flottante.

Liste des réseaux

osbash@controller:~$ openstack network list --external
+--------------------------------------+----------+--------------------------------------+
| ID                                   | Name     | Subnets                              |
+--------------------------------------+----------+--------------------------------------+
| f3e4c1f9-0df6-4eb4-ac8b-6cc41ec21dbf | provider | 0d737ddd-1128-49cd-acae-78a73ac91503 |
+--------------------------------------+----------+--------------------------------------+
osbash@controller:~$ openstack subnet show provider
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| allocation_pools        | 203.0.113.101-203.0.113.200          |
| cidr                    | 203.0.113.0/24                       |
| created_at              | 2019-02-28T22:49:07Z                 |
| description             |                                      |
| dns_nameservers         | 8.8.4.4                              |
| enable_dhcp             | True                                 |
| gateway_ip              | 203.0.113.1                          |
| host_routes             |                                      |
| id                      | 0d737ddd-1128-49cd-acae-78a73ac91503 |
| ip_version              | 4                                    |
| ipv6_address_mode       | None                                 |
| ipv6_ra_mode            | None                                 |
| name                    | provider                             |
| network_id              | f3e4c1f9-0df6-4eb4-ac8b-6cc41ec21dbf |
| project_id              | 88286827b5bf4ca197928a47ea118136     |
| revision_number         | 0                                    |
| segment_id              | None                                 |
| service_types           |                                      |
| subnetpool_id           | None                                 |
| tags                    |                                      |
| updated_at              | 2019-02-28T22:49:07Z                 |
| use_default_subnet_pool | None                                 |
+-------------------------+--------------------------------------+

Activation du NAT sur l'hôte

Ce script donne accès à l'Internet aux instances virtuelles.

Il est à exécuter sur l'hôte physique qui héberge la solution de lab avec la commande sudo :

sudo $OS_LAB/nat_tables.sh

echo "1" > /proc/sys/net/ipv4/ip_forward

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  any    eth0    anywhere             anywhere

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  eth0   vboxnet1  anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  vboxnet1 eth0    anywhere             anywhere

8. Le service de stockage : Cinder

Cinder, le service de stockage type blocs OpenStack ajoute le stockage persistant à une machine virtuelle. Block Storage fournit une infrastructure de gestion des volumes et interagit avec OpenStack Compute pour fournir des volumes pour les instances. Le service permet également de gérer les instantanés de volume et les types de volume.

Composants Cinder

  • cinder-api : Accepte les demandes d'API et les achemine vers cinder-volume pour action.
  • cinder-volume
    • Interagit directement avec le service de stockage de blocs et les processus tels cinder-scheduler
    • Interagit avec ces processus par l'intermédiaire d'une file d'attente de messages
    • Répond aux demandes de lecture et d'écriture adressées au service Block Storage pour maintenir l'état
    • Interagit avec une variété de fournisseurs de stockage par l'intermédiaire d'un pilote l'architecture.
  • Démon cinder-scheduler : Sélectionne le nœud de fournisseur de stockage optimal sur lequel créer le volume.
  • Démon cinder-backup :
    • Fournit des volumes de sauvegarde de tout type à un fournisseur de stockage de sauvegarde
    • Interagit avec une variété de fournisseurs de stockage grâce à une architecture de pilotes.
  • File d'attente de messages : Achemine les informations entre les processus de stockage en bloc.

Liste des services de volumes

osbash@controller:~$ openstack volume service list
+------------------+--------------+------+---------+-------+----------------------------+
| Binary           | Host         | Zone | Status  | State | Updated At                 |
+------------------+--------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller   | nova | enabled | up    | 2019-03-02T20:48:17.000000 |
| cinder-volume    | compute1@lvm | nova | enabled | up    | 2019-03-02T20:48:16.000000 |
+------------------+--------------+------+---------+-------+----------------------------+

9. Le service d'orchestration : Heat

Heat, le service d'orchestration fournit une orchestration basée sur des modèles pour décrire une application en nuage en exécutant des appels de l'API OpenStack pour générer des applications en nuage. Le logiciel intègre tous les autres composants de base d'OpenStack dans un système de modèle à fichier unique. Les modèles permettent la création de la plupart des types de ressources OpenStack tels que les instances, les IP flottantes, les volumes, les groupes de sécurité et les utilisateurs. Il fournit également des fonctionnalités avancées telles que l'instance Haute Disponibilité (HA), la mise à l'échelle automatique des instances et les stacks imbriqués. Ceci permet aux projets de base OpenStack de recevoir une plus grande base d'utilisateurs.

Le service peut être intégré au service Orchestration directement ou via des plug-ins personnalisés.

Composants du service d'orchestration Heat

  • Client en ligne de commande Heat
  • heat-api
  • heat-api-cfn
  • heat-engine

Liste des services d'orchestration

osbash@controller:~$ openstack orchestration service list
+------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+
| Hostname   | Binary      | Engine ID                            | Host       | Topic  | Updated At                 | Status |
+------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+
| controller | heat-engine | d5c5cf0e-d7f3-4976-b71f-e7c5ec7634d6 | controller | engine | 2019-03-02T20:58:33.000000 | up     |
| controller | heat-engine | d32baf2f-9c6d-4393-9ffc-d97414126b57 | controller | engine | 2019-03-02T20:58:32.000000 | up     |
| controller | heat-engine | 5fde3605-f341-4226-ad09-48d83454194d | controller | engine | 2019-03-02T20:58:32.000000 | up     |
| controller | heat-engine | 7205ef1f-4589-409f-ad4f-1cdc8c58e859 | controller | engine | 2019-03-02T20:58:32.000000 | up     |
+------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+

10. Gabarits d'instances

Les profils d'instance des machines virtuelles s'appellent des "flavours". Ces gabarits précisent le profil d'allocation des ressources virtuelles qui inclut le processeur, la mémoire et le stockage. La plus petite "flavour" par défaut consomme 512 mégaoctets (Mo) de mémoire par instance. Pour les environnements dont les nœuds de calcul contiennent moins de 4 Gigaoctets (Go) de mémoire, il est recommandé de créer la variante m1.nano qui nécessite seulement 64 Mo par exemple. Ce gabarit ne peut être utilisée qu'avec l'image CirrOS à des fins de test.

Liste des gabarits

osbash@controller:~$ openstack flavor list

Pour l'instant, aucun gabarit n'est configuré.

Création de gabarits

osbash@controller:~$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
+----------------------------+---------+
| Field                      | Value   |
+----------------------------+---------+
| OS-FLV-DISABLED:disabled   | False   |
| OS-FLV-EXT-DATA:ephemeral  | 0       |
| disk                       | 1       |
| id                         | 0       |
| name                       | m1.nano |
| os-flavor-access:is_public | True    |
| properties                 |         |
| ram                        | 64      |
| rxtx_factor                | 1.0     |
| swap                       |         |
| vcpus                      | 1       |
+----------------------------+---------+
osbash@controller:~$ openstack flavor create --id 1 --vcpus 1 --ram 2048 --disk 6 m1.small
+----------------------------+----------+
| Field                      | Value    |
+----------------------------+----------+
| OS-FLV-DISABLED:disabled   | False    |
| OS-FLV-EXT-DATA:ephemeral  | 0        |
| disk                       | 6        |
| id                         | 1        |
| name                       | m1.small |
| os-flavor-access:is_public | True     |
| properties                 |          |
| ram                        | 2048     |
| rxtx_factor                | 1.0      |
| swap                       |          |
| vcpus                      | 1        |
+----------------------------+----------+
osbash@controller:~$ openstack flavor list
+----+----------+------+------+-----------+-------+-----------+
| ID | Name     |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+----------+------+------+-----------+-------+-----------+
| 0  | m1.nano  |   64 |    1 |         0 |     1 | True      |
| 1  | m1.small | 2048 |    1 |         0 |     1 | True      |
+----+----------+------+------+-----------+-------+-----------+

Languages de présentation JSON et YAML

OpenStack, comme d'autres solutions de gestion des infrastructures en nuage, rend des sorties sous différents formats :

  • Tabulaire
  • CSV
  • JSON
  • YAML

Illustration par l'exemple

Ici un exemple de liste à deux entrées qui contiennent chacune 7 champs clé/valeur.

osbash@controller:~$ openstack flavor list
+----+----------+------+------+-----------+-------+-----------+
| ID | Name     |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+----------+------+------+-----------+-------+-----------+
| 0  | m1.nano  |   64 |    1 |         0 |     1 | True      |
| 1  | m1.small | 2048 |    1 |         0 |     1 | True      |
+----+----------+------+------+-----------+-------+-----------+
[
  {
    "Name": "m1.nano",
    "RAM": 64,
    "Ephemeral": 0,
    "VCPUs": 1,
    "Is Public": true,
    "Disk": 1,
    "ID": "0"
  },
  {
    "Name": "m1.small",
    "RAM": 2048,
    "Ephemeral": 0,
    "VCPUs": 1,
    "Is Public": true,
    "Disk": 1,
    "ID": "1"
  }
]
- Disk: 1
  Ephemeral: 0
  ID: '0'
  Is Public: true
  Name: m1.nano
  RAM: 64
  VCPUs: 1
- Disk: 1
  Ephemeral: 0
  ID: '1'
  Is Public: true
  Name: m1.small
  RAM: 2048
  VCPUs: 1

Traitement des sorties avec JQ (Json Query)

osbash@controller:~$ openstack flavor list -f json | jq -r '.[]'
{
  "Name": "m1.nano",
  "RAM": 64,
  "Ephemeral": 0,
  "VCPUs": 1,
  "Is Public": true,
  "Disk": 1,
  "ID": "0"
}
{
  "Name": "m1.small",
  "RAM": 2048,
  "Ephemeral": 0,
  "VCPUs": 1,
  "Is Public": true,
  "Disk": 1,
  "ID": "1"
}
osbash@controller:~$ openstack flavor list -f json | jq -r '.[].Name'
m1.nano
m1.small
osbash@controller:~$ openstack flavor list -f json | jq -r '.[0].RAM'
64
osbash@controller:~$ openstack flavor list -f json | jq -r '.[1].RAM'
2048