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:
- Le dashboard Horizon
- Slipstream@LAL
- Le client en ligne de commande
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
- Enregistrement
- Installation du client
- Insertion d’une clé publique
- Ma première machine virtuelle
- Gestion les volumes
- Détruire la VM
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
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
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.