Tutoriel

fr_en

Ce tutoriel a pour objectif de vous introduire l’utilisation du client en ligne de commande (« Command Line Interface » ou CLI) de base OpenStack.

Il existe différentes manières d’utiliser OpenStack:

Avec ce tutoriel, vous apprendrez à utiliser le CLI pour créer une machine virtuelle (VM), vous y connecter en ssh, créer un volume cinder et l’attacher à la VM.

Table des matières

Notes de lecture

Les commandes à exécuter sont écrites dans un encadré, en police de caractère « courrier ».

Les commandes que vous devez exécuter sur votre propre station de travail sont préfixées avec « user@cli # ».  Voici un exemple de commande à exécuter sur votre propre poste de travail:

user@cli # echo "blah"
blah

Les commandes que vous devez exécuter dans votre machine virtuelle sont préfixées avec « cloud-user@vm # ».  Voici un exemple de commande à exécuter dans votre machine virtuelle:

cloud-user@vm # echo "blah"
blah

 Pour les impatients

Les impatients sont invités à suivre le tutoriel sur Stacktile.

 Enregistrement

Vous trouverez toutes les informations nécessaires à la création d’un compte dans l’article « registration ».

Cet article peut aussi vous permettre de réinitialiser votre mot de passe, si vous avez l’avez perdu.

 Installation du client

Le client en ligne de commande d’OpenStack est écrit en language Python. Vous trouverez toutes les information nécessaires sur la page officielle d’OpenStack.

La configuration du client se fait à l’aide de variables d’environnement. Vous trouverez les informations nécessaires à la configuration du client dans l’article « configuration du client ».

Une fois que vous avez configuré votre client, vous pouvez vérifier votre configuration avec la commande suivante:

user@cli # openstack token issue
+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2016-06-25T10:35:07.571937Z      |
| id         | c5cd50223f4b4913b78c1955c6af4fac |
| project_id | 1b693dd6ab914fc0b5398f96e7866dd2 |
| user_id    | f1e4d8ddde8847ba8d86df5831048f1b |
+------------+----------------------------------+

 Insertion d’une clé publique

Pour pouvoir se connecter en SSH sur les machines virtuelles, vous devez importer votre clef publique SSH dans votre compte OpenStack. Si vous ne possédez pas de clé, vous pouvez en créer une avec l’outil openstack.

Vous remarquerez que vous devez fournir un nom de clé. Ce nom est libre, vous pouvez choisir le nom que vous voulez. Vous devrez utiliser ce nom pour associer cette clé au lancement d’une machine virtuelle.

Si vous possédez déjà une clé SSH

La commande suivante permet d’insérer votre clé publique en la nommant « ma-clef-ssh »:

user@cli # openstack keypair create --public-key $HOME/.ssh/id_rsa.pub ma-clef-ssh
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn:oo:pp |
| name        | ma-clef-ssh                                     |
| user_id     | f1e4d8ddde8847ba8d86df5831048f1b                |
+-------------+-------------------------------------------------+

Si vous ne possédez pas de clé SSH

Attention: n’exécuter pas cette commande si vous possedez déjà une clé !

 

La commande suivante permet de créer une nouvelle clé SSH en la nommant « ma-clef-ssh ». Cette commande stocke la clé publique dans votre compte OpenStack et enregister la clé privée dans un fichier:

user@cli # mkdir -p $HOME/.ssh/ && \
openstack keypair create  ma-clef-ssh > $HOME/.ssh/id_rsa && \
chmod 600 $HOME/.ssh/id_rsa

 

 Ma première machine virtuelle

Une machine virtuelle (VM) nécessite la gestion d’un ensemble de paramètres:

  • l’image de boot, contenant le système d’exploitation (Operating System ou OS)
  • le gabarit (ou flavor) qui définit les paramètres de la VM: nombre de vCPU, quantité de mémoire, taille du disque système. Vous noterez que la taille du disque système peut être supérieure ou égale à de l’image de boot.

Images disponibles

Les images qui peuvent être utilisées pour démarrer une instance de VM sont contenues dans un catalogue d’images appelé Glance. On utilise ce catalogue grâce à la commande glance.

Vous pouvez obtenir la liste des images publiques avec la commande suivante:

user@cli # glance image-list --visibility public
+--------------------------------------+-------------------------------+
| ID                                   | Name                          |
+--------------------------------------+-------------------------------+
| 35615723-1549-4d9c-b760-666e19b9ba1f | centos-6.x-x86_64-20160124    |
| e4325c96-547b-492f-8810-db4451d451a8 | centos-7.x-x86_64-20160123    |
| f3c8a9d8-624f-4676-aef0-b3980a190650 | cernvm3.5-20160308            |
| 5c310f1c-4843-4c32-85e7-ca30a5e5b816 | cirros                        |
| cd17e1af-b070-486f-a948-9ec2e91a0a5f | CoreOS-20160503               |
| 0ad945a2-88a1-40f8-9c3c-576232fee973 | debian-jessie-x86_64-20160202 |
| e7f6c150-e89f-4329-8a36-b70b914a2765 | FG_CentOs                     |
| 4d3025fd-e4cc-424a-acfa-be78e2ab1967 | sl6.5-20160613                |
| 1a39d911-49ed-4d40-8c21-952a0b469e68 | sl67-cloud-20160330           |
| 8d2e2006-6319-4136-b2f2-43b052323e72 | ubuntu14.04                   |
+--------------------------------------+-------------------------------+

Pour ce tutoriel, vous utiliserez l’image cirros (5c310f1c-4843-4c32-85e7-ca30a5e5b816).

Gabarit

Avant de démarrer votre image, vous devez choisir un gabarit.

Le LAL propose des gabarits allant de 1 à 48 vCPUs avec 2Gb (giga bytes) de RAM par vCPU et un disque système de 20Gb. Attention ! Il est possible que certains gabarits ne puissent pas être utilisés suivant le niveau d’utilisation de l’infrastructure.

Vous pouvez lister les gabarits disponibles avec  la commande suivante:

user@cli # nova flavor-list
+--------------------------------------+-------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID                                   | Name        | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+-------------+-----------+------+-----------+------+-------+-------------+-----------+
...
| 24dca8ab-31d0-4f95-92e8-72737872c772 | os.10       | 20480     | 20   | 0         |      | 10    | 1.0         | True      |
| 26dfc194-bee0-4ed7-9385-040100b2fc6e | os.28       | 57344     | 20   | 0         |      | 28    | 1.0         | True      |
| 2c6cdcc2-f224-448b-be37-ad5648654fc0 | os.20       | 40960     | 20   | 0         |      | 20    | 1.0         | True      |
| 48ef495d-7129-452f-b088-2542772661ef | os.7        | 14336     | 20   | 0         |      | 7     | 1.0         | True      |
| 4938abfa-6964-445d-b813-de6b75c24c47 | m1.small    | 2048      | 15   | 0         |      | 1     | 1.0         | True      |
| 4aaf25b0-48e2-4c0e-bb97-9bae2e39555f | os.1        | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
...
+--------------------------------------+-------------+-----------+------+-----------+------+-------+-------------+-----------+

Pour ce tutoriel, vous allez utiliser le gabarit os.1 ( 4aaf25b0-48e2-4c0e-bb97-9bae2e39555f ) qui définit une machine virtuelle avec : 1 vCPU; 2 Gb de RAM; 20Gb de disque système.

Instatiation d’une VM

Vous pouvez instancier (c’est à dire démarrer) votre machine virtuelle avec la commande « nova« . Vous ferez bien attention à fournir le nom de votre clé SSH « ma-clef-ssh », comme vu dans le paragraphe « clé publique ».

user@cli # nova boot --flavor os.1 --image cirros --key-name ma-clef-ssh masupervm
+--------------------------------------+-----------------------------------------------+
| Property                             | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          |                                               |
| OS-EXT-SRV-ATTR:host                 | -                                             |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                             |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000cbb                             |
| OS-EXT-STS:power_state               | 0                                             |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | -                                             |
| OS-SRV-USG:terminated_at             | -                                             |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| adminPass                            | DrZJCeBE5b6U                                  |
| config_drive                         |                                               |
| created                              | 2016-06-25T10:01:15Z                          |
| flavor                               | os.1 (4aaf25b0-48e2-4c0e-bb97-9bae2e39555f)   |
| hostId                               |                                               |
| id                                   | 99f42bd2-8372-4228-9c74-47e21e26f5a1          |
| image                                | cirros (5c310f1c-4843-4c32-85e7-ca30a5e5b816) |
| key_name                             | ma-clef-ssh                                   |
| metadata                             | {}                                            |
| name                                 | masupervm                                     |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| security_groups                      | default                                       |
| status                               | BUILD                                         |
| tenant_id                            | 1b693dd6ab914fc0b5398f96e7866dd2              |
| updated                              | 2016-06-25T10:01:15Z                          |
| user_id                              | f1e4d8ddde8847ba8d86df5831048f1b              |
+--------------------------------------+-----------------------------------------------+

 

Vous pouvez suivre la progression du démarrage avec la commande suivante:

user@cli # nova list
+--------------------------------------+-----------------+--------+------------+-------------+-----------------------+
| ID                                   | Name            | Status | Task State | Power State | Networks              |
+--------------------------------------+-----------------+--------+------------+-------------+-----------------------+
| 99f42bd2-8372-4228-9c74-47e21e26f5a1 | masupervm       | ACTIVE | -          | Running     | public=134.158.75.118 |
+--------------------------------------+-----------------+--------+------------+-------------+-----------------------+

 

Dans cet exemple, vous pouvez voir que la machine virtuelle a l’adresse IP: 134.158.75.118.

Connexion à votre VM

Vous pouvez vous connecter sur la machine virtuelle avec votre clef SSH pour laquelle vous avez fourni la partie publique au paragraphe « clé publique ».

Attention: Par défaut, le compte root est désactivé et vous ne pouvez donc pas vous connecter en tant que root. Si vous essayez de vous connecter en tant que root, la machine vous indiquera le compte utilisateur à utiliser pour vous connecter.

user@cli # ssh root@134.158.75.118
Warning: Permanently added '134.158.75.118' (RSA) to the list of known hosts.
sh: /usr/bin/xauth: not found
Please login as 'cirros' user, not as root

Connection to 134.158.75.118 closed.
user@cli# ssh cirros@134.158.75.118

coud-user@vm # hostname
masupervm

Erreur de connexion

Avec votre première VM, la connexion devrait se passer sans problème.

Mais avec le temps, vous serez amenés à instancier différentes VM. Si vous ne faites aucune configuration spécifique concernant le réseau, le middleware OpenStack gère de manière autonome le réseau pour vos VM. Il est donc fort probable qu’une même adresse IP soit réutilisée pour différentes VM. En vous connectant avec SSH, vous pouvez donc voir apparaitre le message suivant:

ssh cirros@134.158.75.118
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:v0hDGZG1AxJGeby3t32L7AFomMuWC78So+AbAbVuHxc.
Please contact your system administrator.
Add correct host key in $HOME/.ssh/known_hosts to get rid of this message.
Offending RSA key in $HOME/.ssh/known_hosts:259
RSA host key for 134.158.75.112 has changed and you have requested strict checking.
Host key verification failed.

En général, cette erreur indique un problème grave de sécurité. Mais comme vous travaillez sur le cloud et que vous savez qu’une même adresse peut être réutilisée pour différentes VM, vous pouvez effacer en toute sécurité la ligne incriminée (259, dans notre exemple) dans le fichier $HOME/.ssh/known_hosts, sur votre poste de travail.

 Gérer les volumes

OpenStack fourni un service de « Block Storage as a Service » ou « Volume à la demande« . Ce service permet de créer des volumes supplémentaires qui auront un cycle de vie indépendant des machines virtuelles et qui pourront être attachés aux machines virtuelles. La gestion des volumes se fait grâce à la commande cinder.

Les instances de machine virtuelles utilisent ces volumes comme des disques durs.

Créer un volume

Pour créer un volume, vous pouvez utiliser la commande suivante:

user@cli# cinder create --name volume-$USER 5
+---------------------------------------+--------------------------------------+
|                Property               |                Value                 |
+---------------------------------------+--------------------------------------+
|              attachments              |                  []                  |
|           availability_zone           |                 nova                 |
|                bootable               |                false                 |
|          consistencygroup_id          |                 None                 |
|               created_at              |      2016-06-25T10:13:27.000000      |
|              description              |                 None                 |
|               encrypted               |                False                 |
|                   id                  | 69debc26-1c20-4cd3-91c0-930589263a8b |
|                metadata               |                  {}                  |
|            migration_status           |                 None                 |
|              multiattach              |                False                 |
|                  name                 |            volume-xxx                |
|         os-vol-host-attr:host         |    os-77250.lal.in2p3.fr@rbd#RBD     |
|     os-vol-mig-status-attr:migstat    |                 None                 |
|     os-vol-mig-status-attr:name_id    |                 None                 |
|      os-vol-tenant-attr:tenant_id     |   1b693dd6ab914fc0b5398f96e7866dd2   |
|   os-volume-replication:driver_data   |                 None                 |
| os-volume-replication:extended_status |                 None                 |
|           replication_status          |               disabled               |
|                  size                 |                  5                   |
|              snapshot_id              |                 None                 |
|              source_volid             |                 None                 |
|                 status                |               creating               |
|                user_id                |   f1e4d8ddde8847ba8d86df5831048f1b   |
|              volume_type              |                 None                 |
+---------------------------------------+--------------------------------------+

Attacher un volume

Pour attacher ce volume (69debc26-1c20-4cd3-91c0-930589263a8b) à l’instance « masupervm », vous pouvez utiliser la commande suivante:

user@cli# nova volume-attach masupervm 69debc26-1c20-4cd3-91c0-930589263a8b auto
+----------+--------------------------------------+
| Property | Value                                |
+----------+--------------------------------------+
| device   | /dev/vdb                             |
| id       | 69debc26-1c20-4cd3-91c0-930589263a8b |
| serverId | 6f5e53c3-6797-46a9-a39c-4c37b2c6cb97 |
| volumeId | 69debc26-1c20-4cd3-91c0-930589263a8b |
+----------+--------------------------------------+

Le volume /dev/vdb est maintenant présent sur notre serveur

user@cli# ssh cirros@134.158.75.118

cloud-user@vm # sudo su -
cloud-user@vm # fdisk -l /dev/vdb

Disk /dev/vdb: 5368 MB, 5368709120 bytes
16 heads, 63 sectors/track, 10402 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/vdb doesn't contain a valid partition table

Ce volume peut être utilisé comme n’importe quel espace de stockage (disque dur externe, clé USB etc.)

Détacher un volume

Pour « détacher » le volume, vous pouvez utiliser la commande suivante:

user@cli# nova volume-detach masupervm 69debc26-1c20-4cd3-91c0-930589263a8b

Détruire un volumes

Après avoir détaché le volume, vous pouvez le supprimer avec la commande suivante:

user@cli# cinder delete 69debc26-1c20-4cd3-91c0-930589263a8b

Note: Il est possible d’attacher automatiquement un disque au démarrage de l’instance. Ce cas d’utilisation n’est pas traité dans le tutoriel

 Détruire la VM

Pour arrêter la machine, il faut utiliser la commande

user@cli# nova delete masupervm
Request to delete server image-xxx has been accepted.