OpenStack

From CC Doc
Jump to: navigation, search
This page is a translated version of the page OpenStack and the translation is 100% complete.

Other languages:
English • ‎français

Page enfant de Service infonuagique de Calcul Canada

Le service infonuagique de Calcul Canada utilise la suite logicielle OpenStack pour contrôler les ressources telles que les ordinateurs, l'espace de stockage et le matériel de réseautage. OpenStack permet de créer et de gérer des instances (ou VMs pour virtual machines) qui fonctionnent comme des machines distinctes, par émulation. Les utilisateurs maîtrisent complètement leur environnement de développement, à partir du choix du système d'exploitation jusqu'à l'installation et la configuration des logiciels. OpenStack sert des usages variés, dont l'hébergement de sites Web et la création de grappes virtuelles. Vous trouverez des renseignements additionnels sur le site web OpenStack.

Nous décrivons ici plusieurs tâches usuelles relatives au travail avec OpenStack. Nous supposons que vous savez comment lancer une instance et vous y connecter. La plupart des tâches s'effectuent par le tableau de bord; elles sont décrites plus loin. Certaines tâches requièrent toutefois l'utilisation d'outils de ligne de commande, par exemple pour partager une image avec un autre projet. Pour plus d'information sur le client ligne de commande, consultez OpenStack : Clients ligne de commande.

Groupes de sécurité

Un groupe de sécurité est un ensemble de règles de gestion des intrants et extrants des instances. Pour définir les règles, sélectionnez Projet->Calcul->Accès et sécurité, onglet Groupes de sécurité; la page affichée montre la liste des groupes de sécurité existants. Si aucun groupe n'est encore défini, seul le groupe de sécurité par défaut paraît dans la liste.

Pour ajouter une règle à un groupe ou pour la supprimer, cliquez sur le bouton Gérer les règles correspondant au groupe. Lorsque la description du groupe est affichée, cliquez sur le bouton + Ajouter une règle, en haut à droite. Pour supprimer une règle, cliquez sur le bouton Supprimer la règle correspondant.

Le groupe de sécurité par défaut possède des règles qui permettent à une instance d'accéder à l'Internet pour, par exemple, télécharger les mises à jour de systèmes d'exploitation ou les utilitaires d'installation de logiciels; les autres machines ne peuvent bénéficier de cet accès, à l'exception des instances qui appartiennent au même groupe de sécurité. Il est recommandé de ne pas supprimer les règles de ce groupe pour éviter les problèmes qui risquent de se produire à la création de nouvelles instances. Cependant, tel que vous l'avez fait suivant les directives de la page Lancement de votre première instance, une règle a été ajoutée pour que le port 22 (SSH) permette la communication en entrée pour vous connecter à votre instance; voir en particulier le paragraphe Pare-feu et règles autorisant le protocole SSH.

Il est possible de définir plusieurs groupes de sécurité et une instance peut appartenir à plus d'un groupe. Lorsque vous définissez vos groupes et vos règles, tenez bien compte de ce qui doit être accédé et des personnes qui auront besoin d'y accéder. Tentez de définir un minimum d'adresses IP et de ports dans vos règles ingress; si par exemple vous utiliserez toujours le même ordinateur avec la même adresse IP pour vous connecter à votre instance via SSH, il est logique de permettre l'accès SSH uniquement de cette adresse IP. Pour définir la ou les adresses IP qui peuvent accéder, utilisez la case CIDR dans la fenêtre d'ajout de la règle; cet outil web permet de convertir un ensemble d'adresses IP en règles CIDR. De plus, si vous vous connectez de l'extérieur toujours à la même instance via SSH et que cette connexion vous sert de passerelle vers d'autres instances sur le nuage, il est logique que la règle SSH soit dans un groupe de sécurité distinct et que ce groupe soit associé uniquement à l'instance servant de passerelle. Il faut toutefois vous assurer que vos clés SSH soient configurées pour vous permettre de les utiliser pour plusieurs instances (voir Clés SSH).

Les groupes de sécurité auxquels appartient une instance peuvent être définis à deux moments :

  • à la création du groupe, par Projet->Calcul->Accès et sécurité, onglet Groupes de sécurité;
  • lorsque l'instance est active, par Projet->Calcul->Instances, liste déroulante de la colonne Actions, option Editer les groupes de sécurité.

Volumes

Un volume est un espace de stockage qui persiste après l'utilisation d'une instance. Sur les nuages de Calcul Canada, le stockage est assuré par Ceph avec triple réplication comme protection contre les défaillances de matériel. Consultez la documentation OpenStack sur les volumes.

Création d'un volume

Tableau de bord OpenStack, Volumes; interface utilisateur en anglais (cliquez pour agrandir)
Créer un volume; interface en anglais (cliquez pour agrandir)

Cliquez sur le bouton + Créer un volume et remplissez les champs comme suit :

  • Nom du volume : par exemple, data
  • Description : texte libre
  • Source du volume : Aucune source, volume vide
  • Type : Pas de type de volume
  • Taille (Go) : 40 ou toute autre valeur appropriée
  • Zone de disponibilité : sélectionnez parmi les zones disponibles

Cliquez sur le bouton Créer un volume.

Accès à un volume via une instance

Il faut d'abord lier le volume à une instance active, ce qui est semblable à insérer une clé USB ou à connecter un lecteur externe à un ordinateur personnel. Pour attacher un volume :

  • Sélectionnez Projet->Volumes.
  • Dans la colonne Actions, liste déroulante du bouton Modifier le volume, sélectionnez Gérer les connexions.
  • Dans le champ Connecter à l'instance, sélectionnez l'instance appropriée.
  • Cliquez sur le bouton Connecter le volume.

Après quelques secondes, la page des volumes est rafraîchie et montre le nouveau volume lié à l'instance sélectionnée avec /dev/vdb ou autre endroit semblable.

Formater et monter un nouveau volume

Il faut formater et monter un nouveau volume avant de pouvoir l'utiliser. Pour ce faire, consultez les pages spécifiques selon que vous êtes sous Linux ou Windows.

Démarrer depuis un volume

Pour créer un service persistant, il est recommandé de démarrer l'instance depuis un volume. Une instance démarrée depuis une image plutôt que d'un volume est stockée sur le disque local de la machine qui opère cette même instance. L'instance pourrait être perdue si un problème survient sur la machine ou son disque. Le stockage du volume procure une redondance qui protège l'instance de défaillance du matériel. De façon générale, les gabarits pour démarrer depuis un volume commencent par la lettre p (voir la page Gabarits d'instances).

Démarrer une instance depuis un volume peut se faire

  • à partir d'une image en créant un nouveau volume;
  • à partir d'un volume existant;
  • à partir d'un instantané (snapshot), créant un nouveau volume.

Si vous faites ceci pour la première fois, utilisez la première option; les deux autres options ne sont possibles que si vous avez déjà créé un volume ou un snapshot de volume.

Un volume peut être créé au lancement d'une instance. Dans la fenêtre Démarrer l'instance, champ Source de démarrage de l'instance, sélectionnez l'option Démarrer depuis une image (crée un volume). Remplissez ensuite les champs Nom de l'image et Taille du périphérique. Pour que le volume persiste après l'utilisation de l'instance, ne cochez pas la case Supprimer le volume lors de la suppression de l'instance, au bas de la fenêtre. Il est préférable de ne jamais cocher cette case puisque le volume peut être supprimé manuellement plus tard.

Créer une image depuis un volume

Télécharger un volume dans une image (cliquez pour agrandir)

Créer une image depuis un volume permet de télécharger l'image pour servir de copie de sécurité ou pour créer une instance ailleurs que sur les nuages de Calcul Canada, par exemple avec VirtualBox. Pour créer l'image d'un volume, elle doit d'abord être détachée de l'instance. Dans le cas d'un volume root, elle ne peut être détachée que si l'instance est supprimée.

Par le tableau de bord

  1. Sous Projet->Volumes, sélectionnez le volume.
  2. Dans la colonne Actions, liste déroulante du bouton Modifier le volume, sélectionnez Charger dans l'image.
  3. Entrez un nom pour la nouvelle image.
  4. Sélectionnez le Format du disque. QCOW2 est recommandé pour le nuage OpenStack parce que relativement plus compact que Raw et plus efficace avec OpenStack. Si vous voulez utiliser l'image avec Virtualbox sélectionnez de préférence vmdk ou vdi.
  5. Cliquez sur le bouton Charger.

Par un client ligne de commande

Avec un client ligne de commande, vous pouvez utiliser

[name@server ~]$ openstack image create --disk-format <format> --volume <volume_name> <image_name>

  • <format> est le format du disque (les deux valeurs possibles sont qcow2 et vmdk);
  • <nom du volume> obtenu en cliquant sur le nom du volume via le tableau de bord OpenStack;
  • <nom de l'image> le nom que vous donnez à l'image.

Téléchargez ensuite l'image tel que décrit plus loin. Il est recommandé de détacher le volume de l'instance avant de créer une image pour ce volume. Si l'instance est démarrée depuis le volume, vous devrez probablement supprimer l'instance avant de pouvoir détacher le volume; assurez-vous par contre que la case Supprimer le volume lors de la suppression de l'instance n'a pas été cochée lors de la création de l'instance.

Travailler avec les images

Créer une image à partir d'une instance

Utilisez l'outil client ligne de commande pour créer la commande

[name@server ~]$  openstack server image create <server-name>

<server-name> est le nom de votre serveur; ceci n'inclut dans l'image que le disque root de l'instance (par ex. /dev/vda). Étant donné que les disques éphémères et les volumes qui ne servent pas au démarrage ne sont pas inclus dans l'image, il est nécessaire de sauvegarder ces données autrement. Il faut aussi tenir compte du fait que l'état du système de fichiers peut être faussé si l'instance est occupée à enregistrer sur disque pendant que l'image est créée; pour cette raison, il est recommandé d'arrêter l'instance (et non la supprimer) avant d'en créer une image.

Partager une image avec un autre projet

Il s'agit d'un processus en deux étapes ː

  1. Un membre du projet auquel l'image appartient doit partager l'image avec l'autre projet.
  2. Un membre de l'autre projet doit accepter la nouvelle image qui est partagée.

Le membre du projet propriétaire utilise la commande OpenStack

[name@server]$  glance member-create <IMAGE_ID> <MEMBER_ID>
+------------+-------------+---------+
| Image ID   | Member ID   | Status  |
+------------+-------------+---------+
| <IMAGE_ID> | <MEMBER_ID> | pending |
+------------+-------------+---------+

<IMAGE_ID> est l'identifiant de l'image à partager et <MEMBER_ID> est l'identifiant du projet avec lequel partager l'image.

Dans le projet qui reçoit l'image, un membre utilise une autre commande OpenStack, soit

[name@server]$  glance member-update <IMAGE_ID> <MEMBER_ID> <MEMBER_STATUS>
+------------+-------------+----------+
| Image ID   | Member ID   | Status   |
+------------+-------------+----------+
| <IMAGE_ID> | <MEMBER_ID> | accepted |
+------------+-------------+----------+

<IMAGE_ID> est l'identifiant de l'image à mettre à jour, <MEMBER_ID> est l'identifiant du second projet et <MEMBER_STATUS> est le nouvel état de l'image. Les valeurs d'état sont acceptée, rejetée et en attente. Une fois le processus complété, l'image paraît dans la liste des images du second projet.

Pour vérifier l'état de propriété de l'image, utilisez la commande

[name@server]$ glance member-list --image-id <IMAGE_ID>
+------------+-------------+----------+
| Image ID   | Member ID   | Status   |
+------------+-------------+----------+
| <IMAGE_ID> | <MEMBER_ID> | accepted |
+------------+-------------+----------+

<IMAGE_ID> est l'identifiant de l'image à vérifier.

Télécharger une image

Il faut d'abord installer le client OpenStack, puis télécharger le fichier RC OpenStack et le définir comme source (voir OpenStack : Clients ligne de commande). Le client OpenStack produit la liste des images disponibles de votre projet avec

[name@server ~]$ openstack image list

Le résultat est un tableau semblable à ceci :

+--------------------------------------+---------------------------------------+-------------+------------------+-------------+--------+
| ID                                   | Name                                  | Disk Format | Container Format | Size        | Status |
+--------------------------------------+---------------------------------------+-------------+------------------+-------------+--------+
| 982761b2-c77b-4852-8ae3-bf98b32b8894 | Hadoop-2.2.4                          | qcow2       | bare             | 10253107200 | active |
| b7bd3033-9836-406d-a8f2-2e91978026b4 | hadoopmaster                          | qcow2       | bare             | 3493527552  | active |
| 2c751755-854d-49c3-af82-d501e51e7159 | hadoopmaster-active                   | qcow2       | bare             | 13134004224 | active |
| c41012f4-ed82-4478-a81f-5efb96a31b1a | hadoopmaster-old                      | qcow2       | bare             | 3493527552  | active |
| 78e61a3f-b546-441a-b476-a7077b04ca36 | hadoopslave                           | qcow2       | bare             | 3490971648  | active |
| 516845c3-b256-4c6d-a2cb-e31e822c7e34 | hadoopslave1-active                   | qcow2       | bare             | 8345026560  | active |
| 1546bd86-5314-4fce-9576-e2f6930dad30 | hadoopslave1-old                      | qcow2       | bare             | 3490971648  | active |
| baf78e8d-8288-4854-a66b-812cdf3ccbca | TestVM                                | qcow2       | bare             | 13167616    | active |
| 2faf97d7-5b0b-44ce-8024-3bef5a634570 | test_ubuntu_initial                   | qcow2       | bare             | 1799487488  | active |
| 308b6614-396a-4360-9c33-4e86f41ea0ec | trusty                                | qcow2       | bare             | 256180736   | active |
| 9b3c3fda-2aca-43b5-a3e7-662a94f5e7fb | Ubuntu_14.04_Trusty-amd64-20150708    | qcow2       | bare             | 257884672   | active |
| f93e66cf-fec1-4460-8fc7-506e716fbf30 | ucernvm-prod.1.18-10                  | raw         | bare             | 20971520    | active |
+--------------------------------------+---------------------------------------+-------------+------------------+-------------+--------+

Pour télécharger une image en particulier, utilisez la commande

[name@server ~]$ openstack image save --file ./<file-name-for-image>.<format> 2c751755-854d-49c3-af82-d501e51e7159

où <format> correspond à la valeur dans la colonne Disk Format et <ID> correspond à la valeur dans la colonne ID.

Téléverser une image

Installez d'abord le client OpenStack, puis téléchargez et exécutez le fichier OpenStack RC (voir OpenStack ː Client ligne de commande, section Connecter le client ligne de commande à OpenStack).

Lancez la commande
[name@server ~]$ openstack image create --file <path-to-local-file-image> --disk-format <format> <new-image-name>

  • <path-to-local-file-image> est le chemin vers le fichier qui contient l'image à téléverser
  • <format> est le format du disque; si aucun format n'est spécifié, le format raw s'applique, ce qui est incorrect puisque pouvant causer des problèmes pour l'image dans OpenStack,
  • <new-image-name> est le nom de l'image sur le tableau de bord OpenStack.

Créer une instance VirtualBox depuis une image d'un nuage

VirtualBox est un logiciel qui permet de créer des instances et de les exécuter sur votre ordinateur personnel. Il fonctionne sous divers systèmes d'exploitation (Windows, Linux, Mac) et les instances créées peuvent utiliser des systèmes d'exploitation différents.

Pour utiliser une image QCOW2 téléchargée d'un nuage OpenStack (comme ci-dessus), elle doit être convertie au format vmdk; pour ce faire, vous pouvez utiliser l'outil qemu-img. Il peut être installé par exemple avec

[name@server ~]$ sudo apt-get install qemu-img

puis la conversion peut se faire avec

[name@server ~]$ qemu-img convert -f qcow2 vdisk.qcow2 -O vmdk vdisk.vmdk

Vous pouvez ensuite créer une nouvelle instance et lui attacher l'image vmdk. Pour plus de détails, voyez how to run a vmdk file in Oracle VirtualBox.

Gestion des utilisateurs sous Linux

Il existe quelques méthodes pour permettre à plusieurs personnes d'avoir accès à une instance. Notre recommandation est de créer de nouveaux comptes d'utilisateurs et de leur associer des clés SSH.

Créer un compte et ses clés

Pour créer un compte sur Ubuntu, utilisez la commande
[name@server ~]$ sudo adduser --disabled-password USERNAME

Pour pouvoir se connecter, le nouvel utilisateur devra avoir une paire de clés; selon son système d'exploitation, voyez la page Générer des clés SSH sous Windows ou la section Créer une paire de clés pour Linux et Mac. Ajoutez la clé publique à /home/USERNAME/.ssh/authorized_keys à l'instance et vérifiez que les permissions et le propriétaire sont corrects tel qu'indiqué dans les étapes 2 et 3 de la section Se connecter avec une paire de clés.

Privilèges admin

Pour accorder les privilèges admin ou root à un utilisateur, utilisez la commande

[name@server ~]$ sudo visudo -f /etc/sudoers.d/90-cloud-init-users

Ceci démarre un éditeur où vous pouvez ajouter une ligne comme

USERNAME ALL=(ALL) NOPASSWD:ALL

Pour plus d'information sur la commande visudo et sur comment éditer le fichier, consultez le tutoriel de DigitalOcean.

Ajouter des utilisateurs avec cloud-init lors de la création de l'instance

Ajout de plusieurs utilisateurs avec cloud-init (cliquez pour agrandir)

Le script cloud-init suivant ajoute les utilisateurs gretzky avec les permissions sudo et lemieux sans les permissions sudo.

 #cloud-config
users:
  - name: gretzky
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - <Gretzky's public key goes here>
  - name: lemieux
    shell: /bin/bash
    ssh_authorized_keys:
      - <Lemieux's public key goes here>

Pour de l'information sur le format YALM utilisé par cloud-init, consultez YAML Preview.

Le format YALM est sensible aux espaces; il faut prendre garde de laisser une espace entre le tiret initial et la clé publique. Cette configuration remplace l'utilisateur par défaut qui est ajouté lorsqu'il n'y a pas de script cloud-init; les utilisateurs définis dans le script seront donc les seuls utilisateurs de la nouvelle instance et c'est pourquoi il faut s'assurer qu'au moins un utilisateur possède les permissions sudo. Pour ajouter d'autres utilisateurs, insérez simplement dans le script d'autres sections - name: username.

Pour conserver l'utilisateur par défaut créé par la distribution (utilisateurs debian, centos, ubuntu, etc.), utilisez plutôt le script suivant :

 #cloud-config
users:
  - default
  - name: gretzky
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - <Gretzky's public key goes here>
  - name: lemieux
    shell: /bin/bash
    ssh_authorized_keys:
      - <Lemieux's public key goes here>

Une fois l'instance démarrée, examinez le journal des opérations pour vérifier que les clés sont correctement associées aux utilisateurs. Pour consulter le journal, sélectionnez Projet->Calcul->Instances et cliquez sur le nom de l'instance. L'onglet Journal affiche le journal de la console de l'instance, qui ressemble à ceci :

ci-info: ++++++++Authorized keys from /home/gretzky/.ssh/authorized_keys for user gretzky++++++++
ci-info: +---------+-------------------------------------------------+---------+------------------+
ci-info: | Keytype |                Fingerprint (md5)                | Options |     Comment      |
ci-info: +---------+-------------------------------------------------+---------+------------------+
ci-info: | ssh-rsa | ad:a6:35:fc:2a:17:c9:02:cd:59:38:c9:18:dd:15:19 |    -    | rsa-key-20160229 |
ci-info: +---------+-------------------------------------------------+---------+------------------+
ci-info: ++++++++++++Authorized keys from /home/lemieux/.ssh/authorized_keys for user lemieux++++++++++++
ci-info: +---------+-------------------------------------------------+---------+------------------+
ci-info: | Keytype |                Fingerprint (md5)                | Options |     Comment      |
ci-info: +---------+-------------------------------------------------+---------+------------------+
ci-info: | ssh-rsa | ad:a6:35:fc:2a:17:c9:02:cd:59:38:c9:18:dd:15:19 |    -    | rsa-key-20160229 |
ci-info: +---------+-------------------------------------------------+---------+------------------+

Les utilisateurs peuvent maintenant se connecter à l'instance à l'aide de leur clé privée (voir Clés SSH).

Categorie:CC-Cloud