1. Introduction

Le service de Cloud Computing de l'IPHC fonctionne à l'aide du logiciel OpenStack. Ce logiciel permet à la fois de piloter l'infrastructure à l'aide de différents modules (authentification, gestion des images, gestion du stockage, ordonnanceur, ...), et de proposer une API pour que les utilisateurs puissent accéder au service.

Ce document présente l'utilisation du client en ligne de commandes (CLI) openstack interagissant avec les APIs OpenStack pour utiliser efficacement le service de Cloud Computing de l'IPHC. Une alternative à l'utilisation de la ligne de commande est d'utiliser le service Web Horizon.

Cette documentation remplace la précédente documentation détaillant le fonctionnement des anciens clients en ligne de commande ( nova , cinder , ...).

2. Installation

Cette section détaille la procédure d'installation du client OpenStack CLI.

Le client openstack est disponible pour différents systèmes d'exploitation, soit à travers une installation avec PIP ou par les gestionnaires de paquets APT ou YUM pour les distributions Linux Debian, Ubuntu, RedHat ou dérivées. Dans tous les cas, il est nécessaire que le logiciel Python (version 2.7 ou ultérieure) soit installé. Une seule installation est nécessaire, soit avec le gestionnaire de paquets de votre distribution soit avec PIP. Nous recommandons d'utiliser l'installation à l'aide des gestionnaires de paquets quand c'est possible.

Les différents modes d'installation sont détaillées ci-après. Il faut éviter d'utiliser de mode d'installation, en mélangeant par exemple PIP avec les paquets de la distribution, pour éviter des conflits entre les difféentes versions qui rendent le client inutilisable.

2.1. Installation avec PIP

Pour suivre cette partie, il est nécessaire que PIP soit installé. Cette installation est détaillée sur le site de PIP. Le client openstack est installé avec les commandes suivantes :

# pip install python-openstackclient

2.2. Installation sur les systèmes Debian et Ubuntu

La version du client openstack fournie par défaut dans Ubuntu 16.04 est trop ancienne et présente des bugs. Il faut donc utiliser une version plus récente disponible dans le dépôt cloud-archive. Pour installer un client openstack récent, il faut exécuter en tant que super-utilisateur (c'est-à-dire avec la commande sudo pour Ubuntu) :

# sudo add-apt-repository cloud-archive:newton
# sudo apt-get update
# sudo apt-get install python-openstackclient

Note

pour les versions antérieures d'Ubuntu, il est nécessaire d'utiliser la méthode d'installation avec PIP.

2.3. Installation sur les systèmes RedHat et dérivés

Les procédures d'installation pour les différentes distributions basées sur RedHat ne sont pas identiques.

2.3.1. Installation sur RedHat

L'installation en utilisant yum avec le système RedHat est réalisée en quelques étapes suivantes. Le logiciel n'est disponible que pour la version 7 de RedHat. Si vous souhaitez installer les clients sur une version antérieure, il est nécessaire de suivre la méthode d'installation PIP.

# sudo yum install -y https://www.rdoproject.org/repos/openstack/openstack-newton/rdo-release-newton-4.noarch.rpm
# sudo yum update -y
# sudo yum install -y python-openstackclient

2.3.2. Installation sur CentOS

L'installation en utilisant yum avec le système CentOS est réalisée en quelques étapes suivantes. Le logiciel n'est disponible que pour la version 7 de CentOS. Si vous souhaitez installer les clients sur une version antérieure, il est nécessaire de suivre la méthode d'installation PIP.

# sudo yum install -y centos-release-openstack-newton
# sudo yum update -y
# sudo yum install -y python-openstackclient

Note

Le paquet centos-release-openstack-newton est fournit par le dépôt extras, activé par défaut dans CentOS 7.

2.4. Définition des variables d'environnement

Après avoir réalisé l'installation, vous êtes prêts à utiliser le service. La première étape est de paramétrer la configuration du client. Pour cela, créer le fichier ${HOME}/.novacreds/iphc.sh avec le contenu suivant (les valeurs username et password sont à remplacer par celles qui vous ont été transmises lors de la création de votre compte sur l'infrastructure) :

export LANG=en_US.utf-8
export LC_ALL=en_US.utf-8
export OS_USERNAME=username
export OS_PASSWORD=password
export OS_PROJECT_NAME=FG_Cloud
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_DOMAIN_NAME=default
export OS_AUTH_URL=https://sbgcloud.in2p3.fr:5000/v3
export OS_IDENTITY_API_VERSION=3

Une fois que ce fichier est créé, il doit être sourcé pour charger les différentes variables d'environnement dans votre shell actuel :

# source ${HOME}/.novacreds/iphc.sh

Il est nécessaire de réaliser cette étape à chaque fois que vous lancez un nouveau shell, à moins que vous n'ajoutiez la commande source précédente au fichier d'initialisation de votre shell (par exemple, le fichier ${HOME}/.bashrc pour le shell bash ).

Vous pouvez maintenant tester que votre client fonctionne et qu'il arrive à se connecter correctement au Cloud :

# openstack --insecure server list

Note

l'option --insecure est nécessaire pour éviter que Python affiche des erreurs de vérification de certificat :

# openstack server list
Discovering versions from the identity service failed when creating the password plugin. Attempting to determine version from URL.
SSL exception connecting to https://sbgcloud.in2p3.fr:5000/v3/auth/tokens: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

Vous pouvez aussi utiliser le certificat CNRS2 , avec les commandes suivantes :

# CNRS_CERT_URL="https://igc.services.cnrs.fr/search_CA_certificate/?CA=CNRS2-Standard&lang=fr&act=save&view_CA=CNRS2&body=view_ca.html"
# curl "${CNRS_CERT_URL}" | openssl x509 -out ${HOME}/.novacreds/CNRS2.pem -outform PEM
# echo 'export OS_CACERT=${HOME}/.novacreds/CNRS2.pem' >> ${HOME}/.novacreds/iphc.sh

Vous pourrez alors vous passer de l'option --insecure dans toute la suite de cette documentation.

Si vous obtenez le message d'erreur suivant:

curl: (60) SSL certificate problem: self signed certificate in certificate chain

Vous pouvez soit utiliser l'option -k de curl ou télécharger le certificat CNRS2-Standard depuis votre navigateur, ou alors si ce certificat est déjà importé dans le navigateur, simplement l'exporter dans un fichier.

2.5. Changement du mot de passe

Il est fortement conseillé de changer votre mot de passe avant votre première utilisation du Cloud. Pour cela, utilisez la commande suivante :

# openstack --insecure user password set
Current Password:
New Password:
Repeat New Password:
You should update the password you are using to authenticate to match your new password

Après avoir effectué cette opération, votre nouveau mot de passe est changé côté serveur, mais il n'est pas encore pris en compte coté client :

# openstack --insecure server list
ERROR: Invalid OpenStack Nova credentials.

Il faut modifier aussi la variable d'environnement correspondante:

# export OS_PASSWORD=MY_NEW_PASSWORD
# openstack --insecure server list
+--------------------------------------+-------+--------+---------------------------+------------------------------+
| ID                                   | Name  | Status | Networks                  | Image Name                   |
+--------------------------------------+-------+--------+---------------------------+------------------------------+
| 36dd1e32-2a79-4e78-a4e1-999335de3cbd | MY_VM | ACTIVE | fg-cloud-net=172.16.3.222 | FG_Cloud-Ubuntu-16.04-x86_64 |
+--------------------------------------+-------+--------+---------------------------+------------------------------+

Si cette dernière commande s'effectue avec succès, vous pouvez maintenant mettre le fichier ${HOME}/.novacreds/iphc.sh à jour avec votre nouveau mot de passe.

Une fois que vous avez mis à jour le mot de passe dans le fichier ${HOME}/.novacreds/iphc.sh , il est nécessaire de sourcer à nouveau ce fichier pour que son nouveau contenu soit pris en compte.

L'aide en ligne est disponible :

# openstack help user password set
usage: openstack user password set [-h] [--password <new-password>]
                                   [--original-password <original-password>]

Change current user password

optional arguments:
  -h, --help            show this help message and exit
  --password <new-password>
                        New user password
  --original-password <original-password>
                        Original user password

2.6. Gestion de la clé SSH

Afin de pouvoir se connecter à la machine virtuelle, il est nécessaire d'utiliser une clé SSH et de l'enregistrer auprès du serveur OpenStack :

# ssh-keygen -t rsa -f ${HOME}/.novacreds/cloudkey
[...]
# openstack --insecure keypair create --public-key=${HOME}/.novacreds/cloudkey.pub cloudkey
# openstack --insecure keypair list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| cloudkey | 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b |
+----------+-------------------------------------------------+

3. Gestion des machines virtuelles

Cette partie décrit la gestion des machines virtuelles.

3.1. Découverte de l'environnement OpenStack

Quelques commandes permettent de voir les éléments disponibles pour construire son image virtuelle. Tout d'abord, la liste des images de systèmes d'exploitation pour les machines virtuelles est obtenue avec :

# openstack --insecure image list
+--------------------------------------+-------------------------------------------------------+--------+
| ID                                   | Name                                                  | Status |
+--------------------------------------+-------------------------------------------------------+--------+
| b16fb11b-bc53-4712-8e3c-9f505e4a9ec6 | CoreOS                                                | active |
| 53b35071-7850-4858-8e0a-7c25cc9d1a63 | FG_Cloud-CentOS-7-x86_64                              | active |
| e395043c-b996-4b4f-8787-9d2a28279f29 | FG_Cloud-CentOS-6-x86_64                              | active |
| eebdf6f0-8f99-4263-a9f9-a405249daa88 | FG_Cloud-Ubuntu-16.04-x86_64                          | active |
| 5b1a35b9-c92a-4173-a6aa-69fd26d9eb3f | FG_Cloud-Ubuntu-12.04-x86_64                          | active |
| 297bdb3f-1b95-4f41-ba8c-db196c04ca58 | FG_Cloud-Ubuntu-14.04-x86_64                          | active |
| 926204b5-51d1-4d2e-81cf-a6d429b76121 | Image for CentOS 6 minimal [CentOS/6.x/KVM]_Appliance | active |
| 2c86acd1-98b0-4cc3-9a8a-1e661ddbfd9a | CirrOS                                                | active |
+--------------------------------------+-------------------------------------------------------+--------+

Ensuite, la liste des types de machines virtuelles (saveurs) disponibles est affichée avec :

# openstack --insecure flavor list
+----+----------------------+--------+------+-----------+-------+-----------+
| ID | Name                 |    RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+----------------------+--------+------+-----------+-------+-----------+
| 1  | m1.tiny              |    512 |    1 |         0 |     1 | True      |
| 10 | m1.2xlarge-xbigmem   | 131072 |  320 |         0 |    16 | True      |
| 11 | m1.2xl-xbigmem-lowhd | 131072 |   50 |         0 |    16 | True      |
| 12 | m1.2xl-hugemem-lowhd | 262144 |   50 |         0 |    16 | True      |
| 2  | m1.small             |   2048 |   20 |         0 |     1 | True      |
| 3  | m1.medium            |   4096 |   40 |         0 |     2 | True      |
| 4  | m1.large             |   8192 |   80 |         0 |     4 | True      |
| 5  | m1.xlarge            |  16384 |  160 |         0 |     8 | True      |
| 6  | m1.2xlarge           |  32768 |  320 |         0 |    16 | True      |
| 7  | m1.cms-small         |   2048 |   50 |         0 |     1 | True      |
| 8  | m1.small-bigmem      |   4096 |   20 |         0 |     1 | True      |
| 9  | m1.2xlarge-hugemem   | 262144 |  320 |         0 |    16 | True      |
+----+----------------------+--------+------+-----------+-------+-----------+

Enfin, pour connaître les réseaux utilisables par la machine virtuelle, utilisez :

# openstack --insecure network list
+--------------------------------------+--------------------------------------------+--------------------------------------+
| ID                                   | Name                                       | Subnets                              |
+--------------------------------------+--------------------------------------------+--------------------------------------+
| 314be651-fcaa-4dcc-ac0a-dfdcd7e58ba1 | ext-net                                    | aaf9dd9a-a232-49d9-ad2d-f070ab40cf85 |
| 16ddcf0e-05c7-4023-8fc6-9cb49fd93aa4 | fg-cloud-net                               | 3298961e-7787-4879-b147-ea4ecac2cdf3 |
+--------------------------------------+--------------------------------------------+--------------------------------------+

Dans le tableau précédent, nous remarquons que deux réseaux sont disponibles, fg-cloud-net et ext-net . En fait, seul le réseau fg-cloud-net est utilisable directement au boot par la machine virtuelle. L'autre réseau est utilisé par la suite pour fournir des adresses IPs publiques.

3.2. Lancement de la machine virtuelle ( VM )

Dans la section précédente, nous avons récupéré la liste de tous les éléments utilisables pour composer la machine virtuelle. Une fois que vous avez choisi les différents éléments de votre machine virtuelle, elle peut être instanciée à l'aide de la commande openstack --insecure server create . Par exemple, si nous souhaitons lancer une image Ubuntu avec 1 cpu, 2 Go de RAM et 20 Go de disque dur sur le réseau fg-cloud-net et dont le nom sera MY_VM_NAME, nous utiliserons la commande suivante :

# openstack --insecure server create --key-name cloudkey --image FG_Cloud-Ubuntu-16.04-x86_64 --flavor m1.small --nic net-id=16ddcf0e-05c7-4023-8fc6-9cb49fd93aa4 MY_VM_NAME
+--------------------------------------+---------------------------------------------------------------------+
| Field                                | Value                                                               |
+--------------------------------------+---------------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                              |
| OS-EXT-AZ:availability_zone          |                                                                     |
| OS-EXT-STS:power_state               | 0                                                                   |
| OS-EXT-STS:task_state                | scheduling                                                          |
| OS-EXT-STS:vm_state                  | building                                                            |
| OS-SRV-USG:launched_at               | None                                                                |
| OS-SRV-USG:terminated_at             | None                                                                |
| accessIPv4                           |                                                                     |
| accessIPv6                           |                                                                     |
| addresses                            |                                                                     |
| adminPass                            | E7W6954svK3p                                                        |
| config_drive                         |                                                                     |
| created                              | 2017-02-14T08:42:32Z                                                |
| flavor                               | m1.small (2)                                                        |
| hostId                               |                                                                     |
| id                                   | 36dd1e32-2a79-4e78-a4e1-999335de3cbd                                |
| image                                | FG_Cloud-Ubuntu-16.04-x86_64 (eebdf6f0-8f99-4263-a9f9-a405249daa88) |
| key_name                             | cloudkey                                                            |
| name                                 | MY_VM_NAME                                                          |
| os-extended-volumes:volumes_attached | []                                                                  |
| progress                             | 0                                                                   |
| project_id                           | 59402a7327114c2cb97f0d9e6263cdda                                    |
| properties                           |                                                                     |
| security_groups                      | [{u'name': u'default'}]                                             |
| status                               | BUILD                                                               |
| updated                              | 2017-02-14T08:42:32Z                                                |
| user_id                              | c13c93bf1b79447c8cd1464128d7685f                                    |
+--------------------------------------+---------------------------------------------------------------------+

Note

Lors du lancement de machines virtuelles, vous pouvez vous retrouver confronté à des problèmes de dépassement de quota :

# openstack --insecure server create [...] MY_VM_NAME
ERROR: Quota exceeded for cores: Requested 1, but already used 22 of 22 cores (HTTP 413) (Request-ID:
req-6aefedba-4666-4393-b6a1-24423f3bef78)

Dans cet exemple, l'erreur vous indique que tous les processeurs disponibles pour votre groupe (tenant) sont actuellement occupés. Vous pouvez soit attendre que d'autres utilisateurs en libèrent, ou alors demander à votre administrateur de cloud de vous attribuer un quota supplémentaire.

Vous pouvez consulter les limites de quota grâce à la commande suivante :

# openstack --insecure quota show
+----------------------+----------------------------------+
| Field                | Value                            |
+----------------------+----------------------------------+
| backup_gigabytes     | 1000                             |
| backups              | 10                               |
| cores                | 256                              |
| fixed-ips            | -1                               |
| floating-ips         | 50                               |
| gigabytes            | 1000                             |
| injected-file-size   | 10240                            |
| injected-files       | 5                                |
| injected-path-size   | 255                              |
| instances            | 64                               |
| key-pairs            | 100                              |
| networks             | 10                               |
| per_volume_gigabytes | -1                               |
| ports                | 50                               |
| project              | 59402a7327114c2cb97f0d9e6263cdda |
| properties           | 128                              |
| ram                  | 524288                           |
| rbac-policies        | 10                               |
| routers              | 10                               |
| secgroup-rules       | 100                              |
| secgroups            | 10                               |
| server-group-members | 10                               |
| server-groups        | 10                               |
| snapshots            | 10                               |
| subnetpools          | -1                               |
| subnets              | 10                               |
| volumes              | 50                               |
+----------------------+----------------------------------+

L'aide en ligne est disponible et décrit tous les paramètres utilisables :

# openstack help server create
usage: openstack server create [-h] [-f {json,shell,table,value,yaml}]
                               [-c COLUMN] [--max-width <integer>]
                               [--noindent] [--prefix PREFIX]
                               (--image <image> | --volume <volume>) --flavor
                               <flavor>
                               [--security-group <security-group-name>]
                               [--key-name <key-name>]
                               [--property <key=value>]
                               [--file <dest-filename=source-filename>]
                               [--user-data <user-data>]
                               [--availability-zone <zone-name>]
                               [--block-device-mapping <dev-name=mapping>]
                               [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid>]
                               [--hint <key=value>]
                               [--config-drive <config-drive-volume>|True]
                               [--min <count>] [--max <count>] [--wait]
                               <server-name>

Create a new server
[...]

Note

Lors de l'utilisation de la commande openstack , il est possible d'utiliser aussi bien les noms (par exemple MY_VM_NAME) que les identifiants (par exemple 36dd1e32-2a79-4e78-a4e1-999335de3cbd ). Il est recommandé d'utiliser les identifiants, car ils sont uniques (il est possible de lancer deux machines virtuelles avec le même nom).

Avec la commande suivante, il est possible de suivre l'état de la VM :

# openstack --insecure server show MY_VM_NAME
+--------------------------------------+---------------------------------------------------------------------+
| Field                                | Value                                                               |
+--------------------------------------+---------------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                              |
| OS-EXT-AZ:availability_zone          | nova                                                                |
| OS-EXT-STS:power_state               | Running                                                             |
| OS-EXT-STS:task_state                | None                                                                |
| OS-EXT-STS:vm_state                  | active                                                              |
| OS-SRV-USG:launched_at               | 2017-02-14T08:42:49.000000                                          |
| OS-SRV-USG:terminated_at             | None                                                                |
| accessIPv4                           |                                                                     |
| accessIPv6                           |                                                                     |
| addresses                            | fg-cloud-net=172.16.3.222                                           |
| config_drive                         |                                                                     |
| created                              | 2017-02-14T08:42:32Z                                                |
| flavor                               | m1.small (2)                                                        |
| hostId                               | 355c828f80892822e0aa80db666f8d63544009d0e24851f01ea5e968            |
| id                                   | 36dd1e32-2a79-4e78-a4e1-999335de3cbd                                |
| image                                | FG_Cloud-Ubuntu-16.04-x86_64 (eebdf6f0-8f99-4263-a9f9-a405249daa88) |
| key_name                             | cloudkey                                                            |
| name                                 | MY_VM_NAME                                                          |
| os-extended-volumes:volumes_attached | []                                                                  |
| progress                             | 0                                                                   |
| project_id                           | 59402a7327114c2cb97f0d9e6263cdda                                    |
| properties                           |                                                                     |
| security_groups                      | [{u'name': u'default'}]                                             |
| status                               | ACTIVE                                                              |
| updated                              | 2017-02-14T08:42:49Z                                                |
| user_id                              | c13c93bf1b79447c8cd1464128d7685f                                    |
+--------------------------------------+---------------------------------------------------------------------+

Le status ACTIVE nous indique que la VM est prête à être utilisée. Toutefois, elle ne possède pas encore d'interface vers le réseau externe, puisque son adresse IP est dans le réseau interne. Avant de pouvoir s'y connecter par SSH, il est nécessaire de lui attacher une adresse IP publique (visible et accessible depuis internet). Voir le chapitre Section 3.4, « Gestion du réseau ».

3.3. Personnalisation des machines virtuelles

Vous pouvez personnaliser vos machines virtuelles lors de leur démarrage initial grâce au paramètre --user-data de openstack server create . Ce paramètre doit référencer un fichier contenant des instructions pour le logiciel cloud-init qui est présent dans la machine virtuelle.

L'exemple suivant met à jour le système et installe des paquets supplémentaires (utiles pour chiffrer un volume, voir le chapitre Section 4.1, « Chiffrage des disques permanents »).

Créez un fichier cloud_init_cfg.txt contenant :

#cloud-config

# Upgrade the instance OS packages on first boot

package_upgrade: true

# Add packages for entropy gathering and encrypted volume management

packages:
 - haveged
 - cryptsetup

Note

le premier caractère '#' doit figurer tel-quel dans le fichier, il indique au logiciel cloud-init le format du contenu du fichier cloud_init_cfg.txt .

Et utilisez-le lors du démarrage de votre machine virtuelle :

# openstack --insecure server create [...] --user-data cloud_init_cfg.txt MY_VM_NAME

Note

Attention: l'exécution du logiciel cloud-init n'est pas instantanée. Si vous demandez une mise à jour complète du système d'exploitation, cela peut prendre plusieurs minutes avant d'être effectué, alors que vous pouvez déjà vous connecter à la VM grâce à ssh . Pour vérifier que tout s'est bien passé, vous pouvez vérifier le contenu des fichiers : /var/log/cloud-init.log et /var/log/cloud-init-output.log sur la machine virtuelle.

Le logiciel cloud-init est très sensible au format du fichier cloud_init_cfg.txt , les espaces, tabulations et autres éléments de formattage sont importants. En plus de vous référer à la documentation citée ci-dessous, vous pouvez vous aider du logiciel yamllint pour vérifier le format. Toutefois celui-ci est plus pointilleux que cloud-init , donc n'utilisez ses remarques que de manière informative. Construisez votre script de contextualisation petit à petit en vérifiant à chaque étape que ce que vous avez ajouté fonctionne correctement.

Référez vous à la documentation de cloud-init pour de plus amples informations sur les possibilités de configuration.

3.4. Gestion du réseau

Dans un premier temps, il faut vérifier si une adresse IP est disponible :

# openstack --insecure floating ip list
+--------------------------------------+---------------------+------------------+--------------------------------------+
| ID                                   | Floating IP Address | Fixed IP Address | Port                                 |
+--------------------------------------+---------------------+------------------+--------------------------------------+
| 06ab2066-1158-4547-b909-94eaf1e29409 | 134.158.151.70      | 172.16.3.146     | ac2d31e4-f4dd-11e6-a174-ef95e2c5306b |
| 076aaea9-4dc5-46f7-8c77-8e783b6af9a1 | 134.158.151.26      | None             | None                                 |
| 0f4c02ef-e0d7-475a-a4f1-f5923fa4d5c4 | 134.158.151.72      | 172.16.3.131     | cbeaef62-f4dd-11e6-8601-a75ed3a3d535 |
+--------------------------------------+---------------------+------------------+--------------------------------------+

Dans cette liste, deux adresses IPs sont déjà associées à une adresse IP privée et une adresse est disponible (le champs Fixed IP Address a pour valeur None). Si toutes les adresses IPs sont utilisées, il faut en créer une nouvelle :

# openstack --insecure floating ip create ext-net
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| description         |                                      |
| fixed_ip_address    | None                                 |
| floating_ip_address | 134.158.151.224                      |
| floating_network_id | 314be651-fcaa-4dcc-ac0a-dfdcd7e58ba1 |
| headers             |                                      |
| id                  | f60c77d9-bae4-422d-83c3-16d155bac396 |
| port_id             | None                                 |
| project_id          | 59402a7327114c2cb97f0d9e6263cdda     |
| router_id           | None                                 |
| status              | DOWN                                 |
+---------------------+--------------------------------------+

Lorsqu'une adresse IP est disponible, elle peut être attachée à notre VM avec la commande suivante :

# openstack --insecure server add floating ip MY_VM_NAME 134.158.151.224

Il est possible de vérifier que l'adresse IP a bien été atttachée :

# openstack --insecure server list --name MY_VM_NAME
+--------------------------------------+------------+--------+--------------------------------------------+------------------------------+
| ID                                   | Name       | Status | Networks                                   | Image Name                   |
+--------------------------------------+------------+--------+--------------------------------------------+------------------------------+
| 36dd1e32-2a79-4e78-a4e1-999335de3cbd | MY_VM_NAME | ACTIVE | fg-cloud-net=172.16.3.222, 134.158.151.224 | FG_Cloud-Ubuntu-16.04-x86_64 |
+--------------------------------------+------------+--------+--------------------------------------------+------------------------------+

Maintenant que la machine virtuelle a une adresse IP publique, vous pouvez tester la connectivité avec ping :

# ping -c 3 134.158.151.224

Et vous pouvez vous y connecter avec ssh :

# ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

Si la connexion à la machine virtuelle par SSH échoue, consultez la Section 5.1, « Problème de connexion avec SSH ».

Note

Les noms d'utilisateur par défaut sont pour les images Ubuntu et pour les images CentOS respectivement ubuntu et centos.

3.5. Gestion du stockage

Par défaut, lorsqu'une machine virtuelle est détruite, tous les changements que vous avez pu y apporter disparaissent. Pour pouvoir stocker des données réutilisables entre plusieurs sessions, il est nécessaire de créer des disques permanents. Pour afficher la liste de vos disques, utilisez :

# openstack --insecure volume list
+--------------------------------------+---------------+-----------+------+--------------------------------------------+
| ID                                   | Display Name  | Status    | Size | Attached to                                |
+--------------------------------------+---------------+-----------+------+--------------------------------------------+
| d874ed50-f4dd-11e6-b99e-8f36e05a44c6 | MONGODB       | in-use    |  100 | Attached to DATA_ANALYSIS on /dev/vdd      |
| e3469d32-f4dd-11e6-b9be-3b36b57652e5 | DATA_1        | in-use    |  200 | Attached to DATA_ANALYSIS on /dev/vdc      |
| ec8de7c4-f4dd-11e6-a96b-7f9e7042f1e8 | chemistry-vol | available |  200 |                                            |
| 0243cb42-f4de-11e6-9d72-b73ff56f8215 | VM_IPHC_START | available |   10 |                                            |
| 09c16c44-f4de-11e6-8b45-433e4aa51e4c | SIMDAT_VOLUME | available |    8 |                                            |
| 0e48a656-f4de-11e6-878b-eb0c0efe4cca | vmdata_disk_2 | available |  250 |                                            |
| 13c86eae-f4de-11e6-b316-1f8b7ed3376e | DATA_DISK     | in-use    |   50 | Attached to DATA_ANALYSIS on /dev/vdb      |
| 179a0326-f4de-11e6-920c-c7f2b28ed02b | R_Data        | in-use    |    8 | Attached to vm_iphc_r_analysis on /dev/vdb |
+--------------------------------------+---------------+-----------+------+--------------------------------------------+

Pour créer un nouvel espace de stockage persistant (nommé MY_VOLUME_NAME et d'une taille de 8 Go), exécutez :

# openstack --insecure volume create --size 8 MY_VOLUME_NAME
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2017-02-16T10:08:02.493311           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 58230433-086f-4ff2-99ac-8c3e0f5520c2 |
| multiattach         | False                                |
| name                | MY_VOLUME_NAME                       |
| properties          |                                      |
| replication_status  | disabled                             |
| size                | 8                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | None                                 |
| updated_at          | None                                 |
| user_id             | c13c93bf1b79447c8cd1464128d7685f     |
+---------------------+--------------------------------------+

Pour attacher ce nouveau volume à la machine virtuelle à l'aide de son identifiant, utilisez la commande :

# openstack --insecure server add volume --device /dev/vdb MY_VM_NAME 58230433-086f-4ff2-99ac-8c3e0f5520c2

Le stockage sera vu par l'OS sous le nom de /dev/vdb. Pour vérifier que le disque est bien associé, vérifiez que la colonne Status à pour valeur in-use et que la colonne Attached to contient bien l'identifiant de la VM :

# openstack --insecure volume list
+--------------------------------------+---------------+-----------+------+-------------------------------------------+
| ID                                   | Display Name  | Status    | Size | Attached to                               |
+--------------------------------------+---------------+-----------+------+-------------------------------------------+
...
| 58230433-086f-4ff2-99ac-8c3e0f5520c2 | MY_VOLUME_NAME | in-use   |    8 | Attached to MY_VM_NAME on /dev/vdb        |
...
+--------------------------------------+---------------+-----------+------+-------------------------------------------+

Au départ, ce disque ne contient aucune donnée et n'est pas formaté. Si ce disque est destiné à contenir des données confidentielles, nous vous recommandons de le chiffrer. Cette opération est détaillée dans la Section 4.1, « Chiffrage des disques permanents ». Dans le cas contraire, connectez-vous à votre VM pour formater ce disque et le monter :

root@MY_VM_NAME:~# mkfs -t ext4 /dev/vdb
root@MY_VM_NAME:~# mkdir /storage1
root@MY_VM_NAME:~# mount /dev/vdb /storage1
root@MY_VM_NAME:~# df -h /storage1
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb        8.0G  3.0M  7.8G   1% /storage1

La dernière commande permet de vérifier que nous avons bien l'espace disponible de la taille choisie (ici 8 Go) monté sur /storage1 .

Note

Le disque virtuel peut également être partitionné avant le formatage. Pour ce faire, référez-vous à la documentation du système d'exploitation choisi.

Vous pouvez le déplacer d'une machine virtuelle à une autre en le démontant au sein de la VM (pour garantir l'intégrité des données stockées sur ce disque) :

root@MY_VM_NAME:~# umount /storage1

Note

Si vous avez ajouté votre volume persistant dans le fichier /etc/fstab de votre machine virtuelle (c.f. plus bas), pensez à supprimer la ligne en question avant de démonter le disque virtuel sous peine de ne plus pouvoir démarrer votre VM.

Puis en détachant le disque à l'aide de la commande openstack :

# openstack --insecure server remove volume MY_VM_NAME 58230433-086f-4ff2-99ac-8c3e0f5520c2
# openstack --insecure volume list
+--------------------------------------+-----------+-----------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name    | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+-----------------+------+-------------+----------+-------------+
...
| 58230433-086f-4ff2-99ac-8c3e0f5520c2 | available | MY_VOLUME_NAME  |  8   |     None    |  false   |             |
...
+--------------------------------------+-----------+-----------------+------+-------------+----------+-------------+

Note

Lorsque la machine virtuelle est redémarrée, le disque n'est pas monté automatiquement au système de fichier. Pour monter le disque automatiquement, il faut ajouter une entrée dans le fichier /etc/fstab .

3.6. Fin d'une machine virtuelle

Une fois les tâches sur la VM terminées, elle peut être arrêtée pour être redémarrée plus tard :

# openstack --insecure  server stop 36dd1e32-2a79-4e78-a4e1-999335de3cbd
...
# openstack --insecure server start 36dd1e32-2a79-4e78-a4e1-999335de3cbd

Afin de libérer les ressources, la VM peut également être supprimée. Dans ce cas, toutes les modifications qui ont été apportées à l'image (installation de paquets, ...) seront perdues, hormis celles qui sont sur le disque persistant. Avant de supprimer la VM, il faut se connecter à la VM et démonter le disque persistant (pour éviter de corrompre les données) :

root@MY_VM_NAME:~# umount /storage1

Si vous n'avez plus besoin des données sur le disque persistant, il faut le réinitialiser avec des données aléatoires pour des raisons de confidentialité (cette opération peut être assez longue) :

root@MY_VM_NAME:~# dd if=/dev/urandom of=/dev/vdb bs=4k

Puis, une fois la suppression des données effectives, détacher et supprimer le volume avec :

# openstack --insecure server remove volume  MY_VM_NAME 58230433-086f-4ff2-99ac-8c3e0f5520c2
# openstack --insecure volume delete 58230433-086f-4ff2-99ac-8c3e0f5520c2

Enfin, vous pouvez supprimer la VM :

# openstack --insecure server delete 36dd1e32-2a79-4e78-a4e1-999335de3cbd

4. Gestion de la sécurité dans le Cloud

Cette section traite de la sécurité et des points auquels vous devez faire attention lorsque vous utilisez des systèmes Cloud.

4.1. Chiffrage des disques permanents

Cette section détaille l'utilisation de l'outil dm-crypt/LUKS pour le chiffrage des disques permanents. Cet outil est fourni en standard par les distributions Linux et peut facilement être installé avec le gestionnaire de paquets dans votre machine virtuelle.

Pour Debian / ubuntu:

# sudo apt-get -y update
# sudo apt-get -y install cryptsetup

 

Pour chiffrer un disque permanent, il faut tout d'abord l'initialiser correctement. Dans l'exemple ci-dessous, le disque dénommé /dev/vdb est dans un premier temps rempli de données aléatoires, puis il est initialisé à l'aide de la commande cryptsetup luksFormat ci-dessous. Cette première étape peut être assez longue.

root@MY_VM_NAME:~# dd if=/dev/urandom of=/dev/vdb bs=4k
root@MY_VM_NAME:~# cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 \
  --use-random luksFormat /dev/vdb

Si cette dernière commande ralentit, voire bloque avec le message suivant :

System is out of entropy while generating volume key.
Please move mouse or type some text in another window to gather some random events.
Generating key (0% done).

Alors vous pouvez rendre la commande cryptsetup [...] luksFormat plus rapide en installant préalablement le programme haveged dans votre machine virtuelle (ce qui déjà fait si vous avez suivi la procédure décrite dans le chapitre Section 3.3, « Personnalisation des machines virtuelles »).

La commande suivante permet de vérifier que le disque est maintenant du type LUKS :

root@MY_VM_NAME:~# cryptsetup luksDump /dev/vdb
LUKS header information for /dev/vdb

Version:       	1
Cipher name:   	aes
Cipher mode:   	xts-plain64
Hash spec:     	sha512
Payload offset:	4096
MK bits:       	512
MK digest:     	c4 f7 4b 02 2a 3f 12 c1 2c ba e5 c9 d2 45 9a cd 89 20 6c 73
MK salt:       	98 58 3e f3 f6 88 99 ea 2a f3 cf 71 a0 0d e5 8b
               	d5 76 64 cb d2 5c 9b d1 8a d3 1d 18 0e 04 7a eb
MK iterations: 	81250
UUID:          	c216d954-199e-4eab-a167-a3587bd41cb3

Key Slot 0: ENABLED
	Iterations:         	323227
	Salt:               	a0 45 3e 98 fa cf 60 74 c6 09 3d 54 97 89 be 65
	                      	5b 96 7c 1c 39 26 47 b4 8b 0e c1 3a c9 94 83 c2
	Key material offset:	8
	AF stripes:            	4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Le disque est maintenant prêt à être utilisé. La première fois que vous l'utilisez, il faut effectuer les étapes suivantes :

  1. Ouvrir le disque chiffré avec la commande cryptsetup luksOpen . Le nom storage1 n'est qu'indicatif, vous pouvez choisir ce que vous voulez :

    root@MY_VM_NAME:~# cryptsetup luksOpen /dev/vdb storage1
    
  2. Créer un système de fichier sur le disque :

    root@MY_VM_NAME:~# mkfs.ext4 /dev/mapper/storage1
    
  3. Créer le point de montage du disque :

    root@MY_VM_NAME:~# mkdir /storage1
    
  4. Monter le disque :

    root@MY_VM_NAME:~# mount -t ext4 /dev/mapper/storage1 /storage1
    
  5. Vérifier l'espace disponible (cela peut être légèrement différent de ce qui a été entré lors de la commande openstack volume create ) :

    root@MY_VM_NAME:~# df -h /storage1
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/storage1  2.0G  6.0M  1.9G   1% /storage1
    

Une fois que le disque est opérationnel, les étapes 2 et 3 ne sont plus nécessaires.

Vous pouvez maintenant envoyer des fichiers (par exemple DONNEES.dat) depuis votre ordinateur personnel dans votre machine virtuelle de façon sécurisée, par exemple avec scp :

user@work:~# scp -i ${HOME}/.novacreds/cloudkey DONNEES.dat Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.:/le/chemin/destination
DONNEES.dat                               100%   82     0.1KB/s   00:00

Lorsque vous avez terminé votre travail sur le disque, vous pouvez le retirer proprement avec les commandes suivantes :

root@MY_VM_NAME:~# umount /storage1
root@MY_VM_NAME:~# cryptsetup close storage1

Pour les utilisations suivantes du disque virtuel persistant, il n'y aura pas besoin d'effectuer toutes ces opérations, seules les suivantes sont nécéssaires :

root@MY_VM_NAME:~# cryptsetup luksOpen /dev/vdb storage1
root@MY_VM_NAME:~# mkdir /storage1
root@MY_VM_NAME:~# mount -t ext4 /dev/mapper/storage1 /storage1

5. Résolution des problèmes

Cette section vous permet de résoudre les problèmes les plus communs rencontrés lors de l'utilisation de OpenStack.

5.1. Problème de connexion avec SSH

Immédiatement après le démarrage de la machine virtuelle, vous pouvez vous retrouver avec des problèmes de connection :

# ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
ssh: connect to host 134.158.151.224 port 22: Connection refused

Ce problème est généralement dû au fait que le service SSH n'est pas encore démarré sur la machine virtuelle. Il faut attendre, cela pouvant prendre jusqu'à plusieurs minutes.

Un autre type d'erreur peut être rencontré :

# ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
[...]
Permission denied (publickey).

Dans ce cas, il faut vérifier que la clé SSH que vous utilisez est la même que celle stockée dans la base de données OpenStack. Pour cela, vérifiez que leurs empreintes (fingerprint) sont équivalentes. Pour obtenir l'empreinte de la clé stocké par OpenStack, exécutez :

# openstack --insecure keypair list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| cloudkey | 0d:97:13:66:49:03:44:da:69:82:3c:dd:b9:d7:25:64 |
+----------+-------------------------------------------------+

Et pour obtenir l'empreinte de la clé utilisé par la commande ssh , exécutez :

# ssh-keygen -lf ${HOME}/.novacreds/cloudkey.pub
2048 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b  you@home (RSA)

Si elles sont différentes, il faut mettre à jour votre clé publique dans OpenStack :

# openstack --insecure keypair delete cloudkey
# openstack --insecure keypair add --pub-key=${HOME}/.novacreds/cloudkey.pub \
  cloudkey
# openstack --insecure keypair list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| cloudkey | 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b |
+----------+-------------------------------------------------+

Si elles sont bien identiques, il se peut que OpenStack n'ait pas réussi à les installer correctement lors du démarrage de la nouvelle VM. La brique logicielle cloud-init est responsable de l'installation de la clé SSH dans votre machine virtuelle. Vous pouvez voir les lignes de log de cloud-init dans la console de la machine virtuelle. Pour obtenir l'url de connexion à la console, utilisez la commande suivante :

# openstack --insecure console url show --novnc MY_VM_NAME
+-------+----------------------------------------------------------------------------------------+
| Type  | Url                                                                                    |
+-------+----------------------------------------------------------------------------------------+
| novnc | http://sbgcloud.in2p3.fr:6080/vnc_auto.html?token=d609176d-c397-4841-b4dc-566300209209 |
+-------+----------------------------------------------------------------------------------------+

Puis, après vous être connecté à la console avec un navigateur Internet, recherchez les lignes qui contiennent les éléments ci-info et Authorized keys from et comparez les empreintes de votre clé. Si vous voyez des messages d'erreur, le plus simple est de contacter l'équipe d'administrateurs Cloud de l'IPHC en lui fournissant une copie de ces messages d'erreur.

Lorsque la clé est transférée avec succès sur la machine virtuelle, vous avez un message du type :

Cloud-init v. 0.7.5 running 'module:final' at Mon, 27 Jun 2015 08:15:34 +0000. Up 65.40 seconds.
ci-info: ++++++++++++++Authorized keys from /root/.ssh/authorized_keys for user root++++++++++++++
ci-info: +---------+-------------------------------------------------+---------+-----------------+
ci-info: | Keytype |                Fingerprint (md5)                | Options |     Comment     |
ci-info: +---------+-------------------------------------------------+---------+-----------------+
ci-info: | ssh-rsa | 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b |    -    |   Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.   |
ci-info: +---------+-------------------------------------------------+---------+-----------------+

Si vous souhaitez uniquement consulter la sortie console de la machine virtuelle, il sera plus confortable d'utiliser :

# opentack --insecure console log show MY_VM_NAME

6. Références complémentaires

Les sites suivants peuvent être consultés pour obtenir plus d'informations concernant l'utilisation d'OpenStack :

1. Introduction

Le service de Cloud Computing de l'IPHC fonctionne à l'aide du logiciel OpenStack. Ce logiciel permet à la fois de piloter l'infrastructure à l'aide de différents modules (authentification, gestion des images, gestion du stockage, ordonnanceur, ...), et de proposer une API pour que les utilisateurs puissent accéder au service.

Ce document présente l'utilisation des clients en ligne de commandes (CLI) interagissant avec cette API pour utiliser efficacement le service de Cloud Computing de l'IPHC.

2. Installation

Cette section détaille la procédure d'installation du client OpenStack CLI.

Les clients sont disponibles pour différents systèmes d'exploitation, soit à travers une installation avec PIP ou par les gestionnaires de paquets APT ou YUM pour les distributions Linux Debian, Ubuntu, RedHat ou dérivées. Dans tous les cas, il est nécessaire que le logiciel Python (version 2.6 ou ultérieure) soit installé. Une seule installation est nécessaire, soit avec le gestionnaire de paquets de votre distribution soit avec PIP. Nous recommandons d'utiliser l'installation à l'aide des gestionnaires de paquets quand c'est possible. Choisissez un type d'installation parmi les suivantes :

2.1. Installation avec PIP

Pour suivre cette partie, il est nécessaire que PIP soit installé. Cette installation est détaillée sur le site de PIP. Le client OpenStack est installé avec les commandes suivantes :

# pip install python-keystoneclient
# pip install python-novaclient
# pip install python-glanceclient
# pip install python-cinderclient
# pip install python-neutronclient

Note

Si l'exécution d'une des commandes :

# pip install python-XXXclient

échoue avec le message d'erreur :

error: invalid command 'egg_info'

Vous devez au préalable exécuter la commande suivante :

# pip install --upgrade setuptools

 

2.2. Installation sur les systèmes Debian et Ubuntu

L'installation pour les systèmes Debian et Ubuntu est relativement aisée. Il suffit d'exécuter en tant que super-utilisateur (c'est-à-dire avec la commande sudo pour Ubuntu) :

# sudo apt-get install python-keystoneclient
# sudo apt-get install python-novaclient
# sudo apt-get install python-glanceclient
# sudo apt-get install python-cinderclient
# sudo apt-get install python-neutronclient

Note

Pour les versions les plus anciennes d'Ubuntu, il peut être nécessaire de réaliser au préalable :

# sudo apt-get install python-software-properties
# sudo add-apt-repository cloud-archive:icehouse
# sudo apt-get update
# sudo apt-get dist-upgrade

Attention, la commande apt-get dist-upgrade met à jour tout le système, vérifiez que les paquets mis à jour n'entreront pas en conflit avec ceux que vous souhaitez utiliser.

2.3. Installation sur les systèmes RedHat, CentOS et Scientific Linux

L'installation en utilisant yum avec les systèmes RedHat et dérivés est réalisée en quelques étapes :

# sudo yum install epel-release
# sudo yum install http://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm
# PREFIX="baseurl=http://repos.fedorapeople.org/repos/openstack"
# SUFFIX="openstack-icehouse/"
# sudo sed -i "s|${PREFIX}/${SUFFIX}|${PREFIX}/EOL/${SUFFIX}|g" /etc/yum.repos.d/rdo-release.repo
# sudo yum update
# sudo yum install python-keystoneclient
# sudo yum install python-novaclient
# sudo yum install python-glanceclient
# sudo yum install python-cinderclient
# sudo yum install python-neutronclient

Note

Attention, la commande yum update met à jour tout le système, vérifiez que les paquets mis à jour n'entreront pas en conflit avec ceux que vous souhaitez utiliser.

2.4. Définition des variables d'environnement

Après avoir réalisé l'installation, vous êtes prêt à utiliser le service. La première étape est de paramétrer la configuration du client. Pour cela, créer le fichier ${HOME}/.novacreds/iphc.sh avec le contenu suivant (les valeurs username et password sont à remplacer par celles qui vous ont été transmises lors de la création de votre compte sur l'infrastructure) :

export OS_USERNAME=username
export OS_TENANT_NAME=FG_Cloud
export OS_PASSWORD=password
export OS_AUTH_URL=https://sbgcloud.in2p3.fr:5000/v2.0
export OS_REGION_NAME=IPHC

Une fois que ce fichier est créé, il doit être sourcé pour charger les différentes variables d'environnement dans votre shell actuel :

# source ${HOME}/.novacreds/iphc.sh

Il est nécessaire de réaliser cette étape à chaque fois que vous lancez un nouveau shell, à moins que vous n'ajoutiez la commande source précédente au fichier d'initialisation de votre shell (par exemple, le fichier ${HOME}/.bashrc pour le shell bash ).

Vous pouvez maintenant tester que votre client fonctionne et qu'il arrive à se connecter correctement au Cloud :

# nova --insecure list

Note

l'option --insecure est nécessaire pour éviter que Python affiche des erreurs de vérification de certificat :

# nova list
ERROR: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Vous pouvez aussi utiliser le certificat CNRS2 , avec les commandes suivantes :

# CNRS_CERT_URL="https://igc.services.cnrs.fr/search_CA_certificate/?CA=CNRS2-Standard&lang=fr&act=save&view_CA=CNRS2&body=view_ca.html"
# curl "${CNRS_CERT_URL}" | openssl x509 -out ${HOME}/.novacreds/CNRS2.pem -outform PEM
# echo 'export OS_CACERT=${HOME}/.novacreds/CNRS2.pem' >> ${HOME}/.novacreds/iphc.sh

Vous pourrez alors vous passer de l'option --insecure dans toute la suite de cette documentation.

Si vous obtenez le message d'erreur suivant:

curl: (60) SSL certificate problem: self signed certificate in certificate chain

Vous pouvez soit utiliser l'option -k de curl ou télécharger le certificat CNRS2-Standard depuis votre navigateur, ou alors si ce certificat est déjà importé dans le navigateur, simplement l'exporter dans un fichier.

2.5. Changement du mot de passe

Il est fortement conseillé de changer votre mot de passe avant votre première utilisation du Cloud. Pour cela, utilisez la commande suivante :

# keystone --insecure password-update
New Password: 
Repeat New Password: 
You should update the password you are using to authenticate to match your new password

Après avoir effectué cette opération, votre nouveau mot de passe est changé côté serveur, mais il n'est pas encore pris en compte coté client :

# nova --insecure list
ERROR: Invalid OpenStack Nova credentials.

Il faut modifier aussi la variable d'environnement correspondante:

# export OS_PASSWORD=MY_NEW_PASSWORD
# nova --insecure list
+--------------------------------------+------+--------+------------+-------------+----------+
| ID                                   | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------+--------+------------+-------------+----------+
| 8ad5bf9b-be14-42eb-b6db-716662852d80 | test | BUILD  | scheduling | NOSTATE     |          |
+--------------------------------------+------+--------+------------+-------------+----------+

Si cette dernière commande s'effectue avec succès, vous pouvez maintenant mettre le fichier ${HOME}/.novacreds/iphc.sh à jour avec votre nouveau mot de passe.

L'aide en ligne est disponible :

# keystone help password-update
usage: keystone password-update [--current-password <current-password>]
                                [--new-password  <new-password>]

Update own password.

Arguments:
  --current-password <current-password>
                        Current password, Defaults to the password as set by
                        --os-password or env[OS_PASSWORD].
  --new-password  <new-password>
                        Desired new password.

Note

Certaines versions de keystone password-update prennent en compte les variables d'environnement même si les arguments en ligne de commande sont spécifiés :

# keystone --insecure password-update --current-password=password --new-password=MY_NEW_PASSWORD
The request you have made requires authentication. (HTTP 401)

Il est donc recommandé d'utiliser la manière interactive afin d'éviter ce problème.

Une fois que vous avez mis à jour le mot de passe dans le fichier ${HOME}/.novacreds/iphc.sh , il est nécessaire de sourcer à nouveau ce fichier pour que son nouveau contenu soit pris en compte.

2.6. Gestion de la clé SSH

Afin de pouvoir se connecter à la machine virtuelle, il est nécessaire d'utiliser une clé SSH et de l'enregistrer auprès du serveur OpenStack :

# ssh-keygen -t rsa -f ${HOME}/.novacreds/cloudkey
[...]
# nova --insecure keypair-add --pub-key=${HOME}/.novacreds/cloudkey.pub cloudkey
# nova --insecure keypair-list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| cloudkey | 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b |
+----------+-------------------------------------------------+

3. Gestion des machines virtuelles

Cette partie décrit la gestion des machines virtuelles.

3.1. Découverte de l'environnement OpenStack

Quelques commandes permettent de voir les éléments disponibles pour construire son image virtuelle. Tout d'abord, la liste des images de systèmes d'exploitation pour les machines virtuelles est obtenue avec :

# nova --insecure image-list
+--------------------------------------+------------------------------------------------------------------+--------+--------+
| ID                                   | Name                                                             | Status | Server |
+--------------------------------------+------------------------------------------------------------------+--------+--------+
| 57e7c8de-951b-44a6-b1ab-0e782aea5d81 | CentOS-6.5-x86_64-base-4.0                                       | ACTIVE |        |
| 2c86acd1-98b0-4cc3-9a8a-1e661ddbfd9a | CirrOS                                                           | ACTIVE |        |
| 926204b5-51d1-4d2e-81cf-a6d429b76121 | Image for CentOS 6 minimal [CentOS/6.x/KVM]_Appliance            | ACTIVE |        |
| c94d34fb-38e4-4c90-a159-8eaad54b2f12 | Image for TinyCoreLinux [Other/TinyCoreLinux/QEMU-KVM]_Appliance | ACTIVE |        |
| c4f908e6-1b34-4f84-a23c-7e5e55d1f67b | Ubuntu-12.04-x86_64-base-4.0                                     | ACTIVE |        |
| f7252de7-6dc2-41f8-bd9a-f727c6d4c05b | Ubuntu-14.04-x86_64-base-1.0                                     | ACTIVE |        |
+--------------------------------------+------------------------------------------------------------------+--------+--------+

Ensuite, la liste des types de machines virtuelles (saveurs) disponibles est affichée avec :

# nova --insecure flavor-list
+----+-------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name        | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny     | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small    | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium   | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large    | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge   | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m1.2xlarge  | 32768     | 320  | 0         |      | 16    | 1.0         | True      |
| 7  | m1.cms-large| 2048      | 50   | 0         |      | 1     | 1.0         | True      |
+----+-------------+-----------+------+-----------+------+-------+-------------+-----------+

Enfin, pour connaître les réseaux utilisables par la machine virtuelle, utilisez :

# nova --insecure net-list
+--------------------------------------+--------------+------+
| ID                                   | Label        | CIDR |
+--------------------------------------+--------------+------+
| 16ddcf0e-05c7-4023-8fc6-9cb49fd93aa4 | fg-cloud-net | -    |
| 314be651-fcaa-4dcc-ac0a-dfdcd7e58ba1 | ext-net      | -    |
+--------------------------------------+--------------+------+

Dans le tableau précédent, nous remarquons que deux réseaux sont disponibles, fg-cloud-net et ext-net . En fait, seul le réseau fg-cloud-net est utilisable directement au boot par la machine virtuelle. L'autre réseau est utilisé par la suite pour fournir des adresses IPs publiques.

3.2. Lancement de la machine virtuelle ( VM )

Dans la section précédente, nous avons récupéré la liste de tous les éléments utilisables pour composer la machine virtuelle. Une fois que vous avez choisi les différents éléments de votre machine virtuelle, elle peut être instanciée à l'aide de la commande nova --insecure boot . Par exemple, si nous souhaitons lancer une image Ubuntu avec 1 cpu, 2 Go de RAM et 20 Go de disque dur sur le réseau fg-cloud-net et dont le nom sera MY_VM_NAME, nous utiliserons la commande suivante :

# nova --insecure boot --key-name=cloudkey --image=Ubuntu-14.04-x86_64-base-1.0 --flavor=m1.small --nic net-id=16ddcf0e-05c7-4023-8fc6-9cb49fd93aa4 MY_VM_NAME
+--------------------------------------+---------------------------------------------------------------------+
| Property                             | Value                                                               |
+--------------------------------------+---------------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                              |
| OS-EXT-AZ:availability_zone          | nova                                                                |
| 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                            | qooq9D26ZF3E                                                        |
| config_drive                         |                                                                     |
| created                              | 2015-07-03T07:15:42Z                                                |
| flavor                               | m1.small (2)                                                        |
| hostId                               |                                                                     |
| id                                   | 070da4c0-5ec4-475c-9177-e5bfaba63339                                |
| image                                | Ubuntu-14.04-x86_64-base-1.0 (f7252de7-6dc2-41f8-bd9a-f727c6d4c05b) |
| key_name                             | cloudkey                                                            |
| metadata                             | {}                                                                  |
| name                                 | MY_VM_NAME                                                          |
| os-extended-volumes:volumes_attached | []                                                                  |
| progress                             | 0                                                                   |
| security_groups                      | default                                                             |
| status                               | BUILD                                                               |
| tenant_id                            | 59402a7327114c2cb97f0d9e6263cdda                                    |
| updated                              | 2015-07-03T07:15:42Z                                                |
| user_id                              | accd2c67zb79447c8cd1464128d7685f                                    |
+--------------------------------------+---------------------------------------------------------------------+

Note

Lors du lancement de machines virtuelles, vous pouvez vous retrouver confronté à des problèmes de dépassement de quota :

# nova --insecure boot [...] MY_VM_NAME
ERROR: Quota exceeded for cores: Requested 1, but already used 22 of 22 cores (HTTP 413) (Request-ID:
req-6aefedba-4666-4393-b6a1-24423f3bef78)

Dans cet exemple, l'erreur vous indique que tous les processeurs disponibles pour votre groupe (tenant) sont actuellement occupés. Vous pouvez soit attendre que d'autres utilisateurs en libèrent, ou alors demander à votre administrateur de cloud de vous attribuer un quota supplémentaire.

Vous pouvez consulter les limites de quota grâce à la commande suivante :

# nova --insecure quota-show
+-----------------------------+-------+
| Quota                       | Limit |
+-----------------------------+-------+
| instances                   | 10    |
| cores                       | 22    |
| ram                         | 51200 |
| floating_ips                | 10    |
| fixed_ips                   | -1    |
| metadata_items              | 128   |
| injected_files              | 5     |
| injected_file_content_bytes | 10240 |
| injected_file_path_bytes    | 255   |
| key_pairs                   | 100   |
| security_groups             | 10    |
| security_group_rules        | 20    |
+-----------------------------+-------+

L'aide en ligne est disponible et décrit tous les paramètres utilisables :

# nova help boot
usage: nova boot [--flavor <flavor>] [--image <image>]
                 [--image-with <key=value>] [--boot-volume <volume_id>]
[...]
                 [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,port-id=port-uuid>]
                 [--config-drive <value>] [--poll]
                 <name>

Boot a new server.

Positional arguments:
  <name>                Name for the new server

Optional arguments:
  --flavor <flavor>     Name or ID of flavor (see 'nova flavor-list').
  --image <image>       Name or ID of image (see 'nova image-list').
[...]

Note

Lors de l'utilisation des commandes nova, il est possible d'utiliser aussi bien les noms (par exemple MY_VM_NAME) que les identifiants (par exemple 070da4c0-5ec4-475c-9177-e5bfaba63339 ). Il est recommandé d'utiliser les identifiants, car ils sont uniques (il est possible de lancer deux machines virtuelles avec le même nom).

Avec la commande suivante, il est possible de suivre l'état de la VM :

# nova --insecure show MY_VM_NAME
+--------------------------------------+---------------------------------------------------------------------+
| Property                             | Value                                                               |
+--------------------------------------+---------------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                              |
| OS-EXT-AZ:availability_zone          | nova                                                                |
| OS-EXT-STS:power_state               | 1                                                                   |
| OS-EXT-STS:task_state                | -                                                                   |
| OS-EXT-STS:vm_state                  | active                                                              |
| OS-SRV-USG:launched_at               | 2015-07-03T07:16:47.000000                                          |
| OS-SRV-USG:terminated_at             | -                                                                   |
| accessIPv4                           |                                                                     |
| accessIPv6                           |                                                                     |
| config_drive                         |                                                                     |
| created                              | 2015-07-03T07:15:42Z                                                |
| fg-cloud-net network                 | 172.16.3.49                                                         |
| flavor                               | m1.small (2)                                                        |
| hostId                               | 0b199254c9bfee387797cf756a9e243ff52e4bee7176607a8ecf0d24            |
| id                                   | 070da4c0-5ec4-475c-9177-e5bfaba63339                                |
| image                                | Ubuntu-14.04-x86_64-base-1.0 (f7252de7-6dc2-41f8-bd9a-f727c6d4c05b) |
| key_name                             | cloudkey                                                            |
| metadata                             | {}                                                                  |
| name                                 | MY_VM_NAME                                                          |
| os-extended-volumes:volumes_attached | []                                                                  |
| progress                             | 0                                                                   |
| security_groups                      | default                                                             |
| status                               | ACTIVE                                                              |
| tenant_id                            | 59402a7327114c2cb97f0d9e6263cdda                                    |
| updated                              | 2015-07-03T07:16:48Z                                                |
| user_id                              | c13c93bf1b79447c8cd1464128d7685f                                    |
+--------------------------------------+---------------------------------------------------------------------+

Le status ACTIVE nous indique que la VM est prête à être utilisée. Toutefois, elle ne possède pas encore d'interface vers le réseau externe, puisque son adresse IP est dans le réseau interne. Avant de pouvoir s'y connecter par SSH, il est donc nécessaire de lui attacher une adresse IP publique (visible et accessible depuis internet). Voir le chapitre Section 3.4, « Gestion du réseau ».

3.3. Personnalisation des machines virtuelles

Vous pouvez personnaliser vos machines virtuelles lors de leur démarrage initial grâce au paramètre --user-data de nova boot . Ce paramètre doit référencer un fichier contenant des instructions pour le logiciel cloud-init qui est présent dans la machine virtuelle.

L'exemple suivant met à jour le système et installe un paquet supplémentaire (utile pour chiffrer un volume, voir le chapitre Section 4.1, « Chiffrage des disques permanents »).

Créez un fichier cloud_init_cfg.txt contenant :

#cloud-config

# Upgrade the instance OS packages on first boot

package_upgrade: true

# Add the package required for encrypted volume management

packages:
 - cryptsetup

Note

le premier caractère '#' doit figurer tel-quel dans le fichier, il indique au logiciel cloud-init le format du contenu du fichier cloud_init_cfg.txt .

Et utilisez-le lors du démarrage de votre machine virtuelle :

# nova --insecure boot [...] --user-data cloud_init_cfg.txt MY_VM_NAME

Référez vous à la documentation de cloud-init pour de plus amples informations sur les possibilités de configuration.

3.4. Gestion du réseau

Dans un premier temps, il faut vérifier si une adresse IP est disponible :

# nova --insecure floating-ip-list
+-----------------+-----------+-------------+---------+
| Ip              | Server Id | Fixed Ip    | Pool    |
+-----------------+-----------+-------------+---------+
| 134.158.151.219 |           | 172.16.3.48 | ext-net |
+-----------------+-----------+-------------+---------+

Une adresse existe, mais elle est déjà associée à une machine virtuelle (le champs Fixed Ip n'est pas vide). Il faut donc en créer une nouvelle et l'attacher à notre VM :

# nova --insecure floating-ip-create
+-----------------+-----------+----------+---------+
| Ip              | Server Id | Fixed Ip | Pool    |
+-----------------+-----------+----------+---------+
| 134.158.151.108 |           | -        | ext-net |
+-----------------+-----------+----------+---------+
# nova --insecure floating-ip-associate MY_VM_NAME 134.158.151.108

Il est possible de vérifier que l'adresse IP a bien été atttachée :

# nova --insecure list --name MY_VM_NAME
+--------------------------------------+------------+--------+------------+-------------+-------------------------------------------+
| ID                                   | Name       | Status | Task State | Power State | Networks                                  |
+--------------------------------------+------------+--------+------------+-------------+-------------------------------------------+
| 070da4c0-5ec4-475c-9177-e5bfaba63339 | MY_VM_NAME | ACTIVE | -          | Running     | fg-cloud-net=172.16.3.49, 134.158.151.108 |
+--------------------------------------+------------+--------+------------+-------------+-------------------------------------------+

Maintenant que la machine virtuelle a une adresse IP publique, vous pouvez tester la connectivité avec ping :

# ping -c 3 134.158.151.108

Et vous pouvez vous y connecter avec ssh :

# ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

Si la connexion à la machine virtuelle par SSH échoue, consultez la Section 5.1, « Problème de connexion avec SSH ».

3.5. Gestion du stockage

Par défaut, lorsqu'une machine virtuelle est détruite, tous les changements que vous avez pu y apporter disparaissent. Pour pouvoir stocker des données réutilisables entre plusieurs sessions, il est nécessaire de créer des disques permanents. La gestion des disques permanents se fait avec le client cinder . Pour afficher la liste de vos disques, utilisez :

# cinder --insecure list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 60ef7f5f-f4a6-4732-9d26-b9b85553dd8a | available | data_pulsar  |  50  |     None    |  false   |             |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

Pour créer un nouvel espace de stockage persistant (nommé MY_VOLUME_NAME et d'une taille de 8 Go), exécutez :

# cinder --insecure create --display_name MY_VOLUME_NAME 8
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|     attachments     |                  []                  |
|  availability_zone  |                 nova                 |
|       bootable      |                false                 |
|      created_at     |      2015-07-03T10:15:55.487002      |
| display_description |                 None                 |
|     display_name    |             MY_VOLUME_NAME           |
|      encrypted      |                False                 |
|          id         | cf510967-e59b-4b37-9f78-c4f896752180 |
|       metadata      |                  {}                  |
|         size        |                  8                   |
|     snapshot_id     |                 None                 |
|     source_volid    |                 None                 |
|        status       |               creating               |
|     volume_type     |                 None                 |
+---------------------+--------------------------------------+

Pour attacher ce nouveau volume à la machine virtuelle à l'aide de son identifiant, utilisez la commande :

# nova --insecure volume-attach MY_VM_NAME cf510967-e59b-4b37-9f78-c4f896752180 /dev/vdb
+----------+--------------------------------------+
| Property | Value                                |
+----------+--------------------------------------+
| device   | /dev/vdb                             |
| id       | cf510967-e59b-4b37-9f78-c4f896752180 |
| serverId | 070da4c0-5ec4-475c-9177-e5bfaba63339 |
| volumeId | cf510967-e59b-4b37-9f78-c4f896752180 |
+----------+--------------------------------------+

Le stockage sera vu par l'OS sous le nom de /dev/vdb. Pour vérifier que le disque est bien associé, vérifiez que la colonne Status à pour valeur in-use et que la colonne Attached to contient bien l'identifiant de la VM :

# cinder --insecure list
+--------------------------------------+-----------+-----------------+------+-------------+----------+--------------------------------------+
|                  ID                  |   Status  | Display Name    | Size | Volume Type | Bootable |             Attached to              |
+--------------------------------------+-----------+-----------------+------+-------------+----------+--------------------------------------+
| 60ef7f5f-f4a6-4732-9d26-b9b85553dd8a | available | data_pulsar     |  50  |     None    |  false   |                                      |
| cf510967-e59b-4b37-9f78-c4f896752180 |   in-use  | MY_VOLUME_NAME  |  8   |     None    |  false   | 070da4c0-5ec4-475c-9177-e5bfaba63339 |
+--------------------------------------+-----------+-----------------+------+-------------+----------+--------------------------------------+

Au départ, ce disque ne contient aucune donnée et n'est pas formaté. Si ce disque est destiné à contenir des données confidentielles, nous vous recommandons de le chiffrer. Cette opération est détaillée dans la Section 4.1, « Chiffrage des disques permanents ». Dans le cas contraire, connectez-vous à votre VM pour formater ce disque et le monter :

root@MY_VM_NAME:~# mkfs -t ext4 /dev/vdb
root@MY_VM_NAME:~# mkdir /storage1
root@MY_VM_NAME:~# mount /dev/vdb /storage1
root@MY_VM_NAME:~# df -h /storage1
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb        8.0G  3.0M  7.8G   1% /storage1

La dernière commande permet de vérifier que nous avons bien l'espace disponible de la taille choisie (ici 8 Go) monté sur /storage1 .

Note

Le disque virtuel peut également être partitionné avant le formatage. Pour ce faire, référez-vous à la documentation du système d'exploitation choisi.

Vous pouvez le déplacer d'une machine virtuelle à une autre en le démontant au sein de la VM (pour garantir l'intégrité des données stockées sur ce disque) :

root@MY_VM_NAME:~# umount /storage1

Note

Si vous avez ajouté votre volume persistant dans le fichier /etc/fstab de votre machine virtuelle (c.f. plus bas), pensez à supprimer la ligne en question avant de démonter le disque virtuel sous peine de ne plus pouvoir démarrer votre VM.

Puis en détachant le disque à l'aide de la commande nova :

# nova --insecure volume-detach MY_VM_NAME cf510967-e59b-4b37-9f78-c4f896752180
# cinder --insecure list
+--------------------------------------+-----------+-----------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name    | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+-----------------+------+-------------+----------+-------------+
| 60ef7f5f-f4a6-4732-9d26-b9b85553dd8a | available | data_pulsar     |  50  |     None    |  false   |             |
| cf510967-e59b-4b37-9f78-c4f896752180 | available | MY_VOLUME_NAME  |  8   |     None    |  false   |             |
+--------------------------------------+-----------+-----------------+------+-------------+----------+-------------+

Note

Si vous redémarrez la machine virtuelle, le disque ne sera pas remonté automatiquement. Pour cela, référez-vous à la documentation de fstab pour le système d'exploitation choisi.

3.6. Fin d'une machine virtuelle

Une fois les tâches sur la VM terminées, vous pouvez l'arrêter pour la redémarrer plus tard :

# nova --insecure stop 070da4c0-5ec4-475c-9177-e5bfaba63339
...
# nova --insecure start 070da4c0-5ec4-475c-9177-e5bfaba63339

Vous pouvez également la supprimer. Dans ce cas, toutes les modifications que vous avez apportés à l'image (installation de paquets, ...) seront supprimées, hormis celles qui sont sur le disque persistant. Avant de supprimer la VM, il faut se connecter à la VM et démonter le disque persistant (pour éviter de corrompre les données) :

root@MY_VM_NAME:~# umount /storage1

Si vous n'avez plus besoin des données sur le disque persistant, il faut le réinitialiser avec des données aléatoires pour des raisons de confidentialité (cette opération peut être assez longue) :

root@MY_VM_NAME:~# dd if=/dev/urandom of=/dev/vdb bs=4k

Puis, une fois la suppression des données effectives, détacher et supprimer le volume avec :

# nova --insecure volume-detach MY_VM_NAME cf510967-e59b-4b37-9f78-c4f896752180
# cinder --insecure delete cf510967-e59b-4b37-9f78-c4f896752180

Enfin, vous pouvez supprimer la VM :

# nova --insecure delete 070da4c0-5ec4-475c-9177-e5bfaba63339

4. Gestion de la sécurité dans le Cloud

Cette section traite de la sécurité et des points auquels vous devez faire attention lorsque vous utilisez des systèmes Cloud.

4.1. Chiffrage des disques permanents

Cette section détaille l'utilisation de l'outil dm-crypt/LUKS pour le chiffrage des disques permanents. Cet outil est fourni en standard par les distributions Linux et peut facilement être installé avec le gestionnaire de paquets dans votre machine virtuelle.

Pour Debian / ubuntu:

# sudo apt-get -y update
# sudo apt-get -y install cryptsetup

 

Pour chiffrer un disque permanent, il faut tout d'abord l'initialiser correctement. Dans l'exemple ci-dessous, le disque dénommé /dev/vdb est dans un premier temps rempli de données aléatoires, puis il est initialisé à l'aide de la commande cryptsetup luksFormat ci-dessous. Cette première étape peut être assez longue.

root@MY_VM_NAME:~# dd if=/dev/urandom of=/dev/vdb bs=4k
root@MY_VM_NAME:~# cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 \
  --use-random luksFormat /dev/vdb

La commande suivante permet de vérifier que le disque est maintenant du type LUKS :

root@MY_VM_NAME:~# cryptsetup luksDump /dev/vdb
LUKS header information for /dev/vdb

Version:       	1
Cipher name:   	aes
Cipher mode:   	xts-plain64
Hash spec:     	sha512
Payload offset:	4096
MK bits:       	512
MK digest:     	c4 f7 4b 02 2a 3f 12 c1 2c ba e5 c9 d2 45 9a cd 89 20 6c 73 
MK salt:       	98 58 3e f3 f6 88 99 ea 2a f3 cf 71 a0 0d e5 8b 
               	d5 76 64 cb d2 5c 9b d1 8a d3 1d 18 0e 04 7a eb 
MK iterations: 	81250
UUID:          	c216d954-199e-4eab-a167-a3587bd41cb3

Key Slot 0: ENABLED
	Iterations:         	323227
	Salt:               	a0 45 3e 98 fa cf 60 74 c6 09 3d 54 97 89 be 65 
	                      	5b 96 7c 1c 39 26 47 b4 8b 0e c1 3a c9 94 83 c2 
	Key material offset:	8
	AF stripes:            	4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Le disque est maintenant prêt à être utilisé. La première fois que vous l'utilisez, il faut effectuer les étapes suivantes :

  1. Ouvrir le disque chiffré avec la commande cryptsetup luksOpen . Le nom storage1 n'est qu'indicatif, vous pouvez choisir ce que vous voulez :

    root@MY_VM_NAME:~# cryptsetup luksOpen /dev/vdb storage1
    
  2. Créer un système de fichier sur le disque :

    root@MY_VM_NAME:~# mkfs.ext4 /dev/mapper/storage1
    
  3. Créer le point de montage du disque :

    root@MY_VM_NAME:~# mkdir /storage1
    
  4. Monter le disque :

    root@MY_VM_NAME:~# mount -t ext4 /dev/mapper/storage1 /storage1
    
  5. Vérifier l'espace disponible (cela peut être légèrement différent de ce qui a été entré lors de la commande cinder create ) :

    root@MY_VM_NAME:~# df -h /storage1
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/storage1  2.0G  6.0M  1.9G   1% /storage1
    

Une fois que le disque est opérationnel, les étapes 2 et 3 ne sont plus nécessaires.

Vous pouvez maintenant envoyer des fichiers (par exemple DONNEES.dat) depuis votre ordinateur personnel dans votre machine virtuelle de façon sécurisée, par exemple avec scp :

user@work:~# scp -i ${HOME}/.novacreds/cloudkey DONNEES.dat Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.:/le/chemin/destination
DONNEES.dat                               100%   82     0.1KB/s   00:00    

Lorsque vous avez terminé votre travail sur le disque, vous pouvez le retirer proprement avec les commandes suivantes :

root@MY_VM_NAME:~# umount /storage1
root@MY_VM_NAME:~# cryptsetup close storage1

5. Résolution des problèmes

Cette section vous permet de résoudre les problèmes les plus communs rencontrés lors de l'utilisation de OpenStack.

5.1. Problème de connexion avec SSH

Immédiatement après le démarrage de la machine virtuelle, vous pouvez vous retrouver avec des problèmes de connection :

# ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
ssh: connect to host 134.158.151.108 port 22: Connection refused

Ce problème est généralement dû au fait que le service SSH n'est pas encore démarré sur la machine virtuelle. Il faut attendre, cela pouvant prendre jusqu'à plusieurs minutes.

Un autre type d'erreur peut être rencontré :

# ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
[...]
Permission denied (publickey).

Dans ce cas, il faut vérifier que la clé SSH que vous utilisez est la même que celle stockée dans la base de données OpenStack. Pour cela, vérifiez que leurs empreintes (fingerprint) sont équivalentes. Pour obtenir l'empreinte de la clé stocké par OpenStack, exécutez :

# nova --insecure keypair-list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| cloudkey | 0d:97:13:66:49:03:44:da:69:82:3c:dd:b9:d7:25:64 |
+----------+-------------------------------------------------+

Et pour obtenir l'empreinte de la clé utilisé par la commande ssh , exécutez :

# ssh-keygen -lf ${HOME}/.novacreds/cloudkey.pub
2048 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b  you@home (RSA)

Si elles sont différentes, il faut mettre à jour votre clé publique dans OpenStack :

# nova --insecure keypair-delete cloudkey
# nova --insecure keypair-add --pub-key=${HOME}/.novacreds/cloudkey.pub \
  cloudkey
# nova --insecure keypair-list
+----------+-------------------------------------------------+
| Name     | Fingerprint                                     |
+----------+-------------------------------------------------+
| cloudkey | 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b |
+----------+-------------------------------------------------+

Si elles sont bien identiques, il se peut que OpenStack n'ait pas réussi à les installer correctement lors du démarrage de la nouvelle VM. La brique logicielle cloud-init est responsable de l'installation de la clé SSH dans votre machine virtuelle. Vous pouvez voir les lignes de log de cloud-init dans la console de la machine virtuelle. Pour obtenir l'url de connexion à la console, utilisez la commande suivante :

# nova --insecure get-vnc-console MY_VM_NAME novnc
+-------+----------------------------------------------------------------------------------------+
| Type  | Url                                                                                    |
+-------+----------------------------------------------------------------------------------------+
| novnc | http://sbgcloud.in2p3.fr:6080/vnc_auto.html?token=d609176d-c397-4841-b4dc-566300209209 |
+-------+----------------------------------------------------------------------------------------+

Puis, après vous être connecté à la console avec un navigateur Internet, recherchez les lignes qui contiennent les éléments ci-info et Authorized keys from et comparez les empreintes de votre clé. Si vous voyez des messages d'erreur, le plus simple est de contacter l'équipe d'administrateurs Cloud de l'IPHC en lui fournissant une copie de ces messages d'erreur.

Lorsque la clé est transférée avec succès sur la machine virtuelle, vous avez un message du type :

Cloud-init v. 0.7.5 running 'module:final' at Mon, 27 Jun 2015 08:15:34 +0000. Up 65.40 seconds.
ci-info: ++++++++++++++Authorized keys from /root/.ssh/authorized_keys for user root++++++++++++++
ci-info: +---------+-------------------------------------------------+---------+-----------------+
ci-info: | Keytype |                Fingerprint (md5)                | Options |     Comment     |
ci-info: +---------+-------------------------------------------------+---------+-----------------+
ci-info: | ssh-rsa | 33:91:4b:38:52:63:1d:18:7b:e0:e3:0d:3b:63:ce:4b |    -    |   Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.   |
ci-info: +---------+-------------------------------------------------+---------+-----------------+

6. Références complémentaires

Les sites suivants peuvent être consultés pour obtenir plus d'informations concernant l'utilisation d'OpenStack :

1. Introduction

L'intergiciel (middleware) utilisé par la Grille Régionale de Calcul Strasbourg Grand-Est est gLite. Le rôle de cet intergiciel est de faciliter l'utilisation de ressources informatiques (calcul et stockage) distribuées géographiquement. L'interaction avec cet intergiciel (soumission de calcul, accès aux données, ...) nécessite l'utilisation d'un certificat électronique valide.

Ce document détaille l'obtention et la gestion de ce certificat dans le cadre de l'utilisation de la grille régionale de calcul.

2. Les certificats électroniques

Le certificat électronique est une carte d'identité numérique qui permet :

  • d'indiquer la qualité du possesseur du certificat (utilisateur, service ou machine) et la limite de validité des informations contenues ;

  • de s'authentifier et d'obtenir un certain nombre de privilèges sur un ensemble de services de la grille ;

  • d'assurer la confidentialité des échanges grâce au chiffrement des données ;

  • d'assurer la non-répudiation et l'intégrité des données grâce à la signature numérique.

Le certificat est délivré par une autorité de certification qui fait foi de tiers de confiance. Pour le personnel du CNRS et de l'Université de Strasbourg, les certificats utilisables sur la grille de calcul sont délivrés par l'Infrastructure de Gestion de Clés (IGC) du CNRS.

3. Obtention d'un certificat

Pour obtenir un certificat utilisable avec la grille régionale de calcul, deux étapes sont nécessaires. Tout d'abord, il faut en faire la demande auprès de l'autorité de certification du CNRS, puis il faut s'enregistrer avec le certificat délivré auprès de l'organisation virtuelle vo.grand-est.fr.

3.1. Demande de certificat

La demande du certificat se fait en cinq étapes :

  • Récupérer le certificat des autorités de certification (AC) pour qu'elles soient reconnues par votre navigateur en se connectant sur la page des ACs GRID2-FR sur le site de l'IGC. En effet, les navigateurs comme Firefox, Internet Explorer ou Safari n'intégrent pas par défaut les certificats de l'AC du CNRS. Il faut donc les charger manuellement et indiquer à son navigateur qu'ils sont de confiance.

  • Demander un certificat utilisateur par l'onglet "Certificats" en remplissant le formulaire en ligne. Les personnes des laboratoires CNRS (UMR, ...) doivent effectuer leur demande en choisissant leur unité d'attachement CNRS dans la liste organisation. Pour le personnel d'un laboratoire sans composante CNRS, la demande s'effectue en choisissant Université de Strasbourg dans la liste organisation. Si votre unité d'attachement n'apparaît pas dans la liste organisation, informez-en le Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. de la grille régionale. Il effectuera les démarches auprès de l'IGC pour créer votre unité dans la liste organisation.

  • Une fois la demande effectuée, vous allez recevoir une demande de confirmation par messagerie. Il es nécessaire de confirmer votre demande en répondant à ce courrier électronique.

  • Une fois votre demande confirmée, elle sera validée par l'autorité d'enregistrement. Un message électronique vous préviendra de cette validation, de la création de votre certificat et de la marche à suivre pour le récupérer.

  • Récupérer et sauvegarder votre certificat.

3.2. Enregistrement auprès de l'organisation virtuelle (VO) vo.grand-est.fr

Afin de pouvoir effectuer des calculs sur la grille régionale de calcul, il est nécessaire d'enregistrer votre certificat auprès de la VO vo.grand-est.fr en vous rendant sur la page d'enregistrement. L'enregistrement au sein de la VO permet de vous attribuer un ensemble de droits sur la grille régionale de calcul. Une fois le formulaire rempli, vous recevrez un message électronique vous demandant de confirmer votre demande. Il est important de répondre à ce message pour pouvoir rejoindre la VO régionale.

Une fois que votre demande est validée, vous pouvez utiliser votre certificat pour accéder aux ressources de la grille régionale et effectuer des calculs.

3.3. Renouvellement du certificat

Chaque année, vous allez recevoir un message électronique vous invitant à renouveler votre certificat, deux mois avant son expiration. Cette étape est réalisée en se connectant sur le site indiqué dans le message. Le certificat renouvelé n'a pas besoin d'être ré-enregistré auprès de la VO.

4. Utilisation du certificat électronique

Le certificat est utilisé :

  • avec votre navigateur Internet pour accéder aux sites sécurisés ;

  • sur la machine équipée de l'interface utilisateur gLite pour la gestion des calculs et l'accès aux données.

4.1. Utilisation du certificat avec un navigateur Internet

Par défaut, le certificat est installé dans le navigateur avec lequel vous avez effectué vous avez récupéré votre certificat. Il est possible d'exporter ce certificat et de l'importer vers un autre navigateur en suivant la documentation publiée sur le site de l'IGC du CNRS.

4.2. Utilisation du certificat sur une interface utilisateur gLite

A la base du répertoire utilisateur, créez le répertoire .globus, puis placez-y le certificat que vous avez sauvegardé depuis votre navigateur. Avec les commandes suivantes, générez la partie publique et privée du certificat :

# openssl pkcs12 -nocerts -in cert.p12 -out ~/.globus/userkey.pem
# openssl pkcs12 -clcerts -nokeys -in cert.p12 -out ~/.globus/usercert.pem
# chmod 400 ~/.globus/userkey.pem
# chmod 400 ~/.globus/usercert.pem
# ls ~/.globus
-r-------- 1 user group 1935 Feb 16 2010 usercert.pem
-r-------- 1 user group 1920 Feb 16 2010 userkey.pem

5. Références complémentaires

Les documentations suivantes peuvent être consultés pour approfondir le sujet :

1. Introduction

La Grille Régionale de Calcul Strasbourg Grand-Est propose plusieurs technologies de stockage afin d'optimiser l'accès aux données, que ce soit pour le calcul, la sauvegarde ou l'archivage.

Ce document détaille l'utilisation des systèmes de stockage de données de la grille régionale.

2. Les services disponibles

Cette section présente les différents systèmes de stockage disponibles sur la grille Régionale Strasbourg Grand-Est.

3. Gestion des données sur un serveur DPM

3.1. Généralités

Le système de stockage DPM (Disk Pool Manager) est composé d'un serveur de tête et d'un ensemble de serveurs de fichiers. Le serveur de tête centralise les requêtes d'accès aux fichiers. Les serveurs de fichiers stockent physiquement les fichiers. L'accès aux fichiers s'effectue en interrogeant le serveur de tête grâce aux commandes détaillées ci-dessous.

L'accès aux données est contrôlé par certificat. Il est donc nécessaire de posséder un proxy valide lors de l'utilisation de ce type de stockage.

L'URL suivante est utilisée pour l'ensemble de cette section. Elle sera abrégée en SRM :

SRM=srm://sbgse1.in2p3.fr:8446/dpm/in2p3.fr/home/vo.grand-est.fr

3.2. Lecture du contenu d'un répertoire

La commande lcg-ls permet de lister le contenu d'un répertoire. Le résultat de cette commande est similaire à celui de la commande ls :

# lcg-ls ${SRM}/lab
/dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/
# lcg-ls -l ${SRM}/lab
drwxrwxr-x   1     2     2       0              UNKNOWN /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user

Il est également possible d'utiliser la commande srmls pour effectuer cette tâche. Cette commande est un peu plus lente que la précédente, mais retourne des informations complémentaires :

# srmls -2 ${SRM}/lab
  0 /dpm/in2p3.fr/home/vo.grand-est.fr/lab/
      0 /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/
# srmls -2 -l ${SRM}/lab
  0 /dpm/in2p3.fr/home/vo.grand-est.fr/lab/
 space token(s) :none found
 type: null
 retentionpolicyinfo : null
 locality: null
   UserPermission: uid=/O=GRID-FR/C=FR/CN=User PermissionsRWX
   GroupPermission: gid=vo.grand-est.fr PermissionsRWX
  WorldPermission: RX
 created at:2011/05/19 09:43:12
 modified at:2011/05/19 09:43:12
  - Original SURL:  /dpm/in2p3.fr/home/vo.grand-est.fr/lab
 - Status:  null
 - Type:  DIRECTORY
      0 /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/
 space token(s) :none found
 type: null
 retentionpolicyinfo : null
 locality: null
       UserPermission: uid=/O=GRID-FR/C=FR/CN=User PermissionsRWX
       GroupPermission: gid=vo.grand-est.fr PermissionsRWX
      WorldPermission: RX
     created at:2012/03/27 13:29:48
     modified at:2012/03/27 13:29:48
      - Original SURL:  /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user
 - Status:  null
 - Type:  DIRECTORY

3.3. Création d'un répertoire

La commande srmmkdir permet de créer un répertoire :

# srmmkdir -2 ${SRM}/lab/user/data
# srmls -2 ${SRM}/lab/user/data
  0 /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/data/

3.4. Copie d'un fichier

La commande lcg-cp permet de copier des données depuis ou vers un serveur DPM :

# lcg-cp file://${PWD}/my_dataset.tar.gz ${SRM}/lab/user/data/my_dataset.tar.gz

3.5. Vérification des droits d'un fichier

La commande srm-get-permissions permet d'obtenir les permissions d'accès à un fichier ou à un dossier :

# srm-get-permissions -2 ${SRM}/lab/user/data/my_dataset.tar.gz
# file  : srm://sbgse1.in2p3.fr:8446/dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/data/my_dataset.tar.gz
# owner : /O=GRID-FR/C=FR/CN=User
owner:/O=GRID-FR/C=FR/CN=User
group:vo.grand-est.fr:RW
other:R

3.6. Modification des droits d'un fichier

La commande srm-set-permissions permet de modifier les permissions d'accès à un fichier ou à un répertoire. Par défaut, les fichiers créés dans un répertoire hérite des permissions de ce répertoire. La commande suivante permet d'empêcher la consultation (lecture et écriture) à tout le monde, sauf au propriétaire et au groupe du fichier :

# srm-set-permissions -2 -type=CHANGE -other=NONE ${SRM}/lab/user/data/my_dataset.tar.gz
# srm-get-permissions -2 ${SRM}/lab/user/data/my_dataset.tar.gz
# file  : srm://sbgse1.in2p3.fr:8446/dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/data/my_dataset.tar.gz
# owner : /O=GRID-FR/C=FR/CN=User
owner:/O=GRID-FR/C=FR/CN=User
group:vo.grand-est.fr:RW
other:NONE

3.7. Suppression d'un fichier

La commande lcg-del permet de supprimer un fichier sur le serveur DPM :

# lcg-del -l ${SRM}/lab/user/data/my_dataset.tar.gz

3.8. Suppression d'un répertoire

La commande srmrmdir permet de supprimer un répertoire vide :

# srmrmdir -2 ${SRM}/lab/user/data

4. Références complémentaires

Cette section propose des références complémentaires pour approfondir la gestion des données sur la grille régionale de calcul Strasbourg Grand-Est :

1. Introduction

L'intergiciel (middleware) utilisé par la Grille Régionale de Calcul Strasbourg Grand-Est est gLite. Le rôle de cet intergiciel est de faciliter l'utilisation de ressources informatiques (calcul et stockage) distribuées géographiquement. La soumission d'un calcul sur une grille utilisant cet intergiciel nécessite l'utilisation de logiciels spécifiques, fournit par l'interface utilisateur gLite.

Ce document détaille l'utilisation de l'interface utilisateur gLite pour la soumission, le suivi et la récupération des résultats d'un calcul.

2. Les services de grille utilisés

Cette section présente les différents services utilisés lors de la soumission d'une tâche sur la grille de calcul. La figure 1 présente une vue schématique de ces services ainsi que leurs interactions. Les acronymes sont expliqués dans le tableau 1.

L'utilisateur gère les calculs depuis l'interface utilisateur gLite (UI). Avant de soumettre le calcul au WMS, il peut copier des données sur le SE (voir section Section 5, « Gestion des données sur un SE »). Ces données seront accessibles depuis les noeuds de calcul. Une fois le calcul transféré sur le WMS, ce service décide du site devant effectuer les calculs. Pour effectuer ce choix, il se base sur la disponibilité du site et le respect des pré-requis du calcul explicitées par l'utilisateur[1]. Une fois qu'un site est sélectionné, le WMS soumet le calcul au CE de ce site. Le CE distribue les calculs sur les noeuds de calcul (WN) et collecte les résultats qui sont ensuite transférés sur le WMS. Durant ce temps, l'utilisateur peut interroger le WMS pour connaître l'état du déroulement de son calcul. Enfin, les résultats sont disponibles et peuvent être récupérés sur le WMS et/ou sur les SE.

Figure 1. Les différents services gLite utilisés lors de la soumission d'un calcul.

Gestion des calculs avec gLite

Tableau 1. Les services utilisés lors de la soumission d'un calcul

ÉlémentRôle
UI L'UI (User Interface) est l'interface utilisateur gLite. Il s'agit de l'ordinateur à partir duquel l'utilisateur va soumettre des calculs sur la grille. A travers cette interface, l'utilisateur interagit principalement avec le WMS pour la soumission des calculs et avec le SE pour le transfert des données volumineuses. Cette interface permet de :
  • gérer un calcul (soumission, suivi de l'état, annulation) ;

  • récupérer les résultats d'un calcul ;

  • copier, répliquer ou supprimer des données sur la grille.

SE Le SE (Storage Element) est l'élément d'une grille gérant le stockage. Il permet de récupérer les résultats des calculs ou bien de fournir au calcul des fichiers de données volumineux. Il est accessible via différents protocoles.
WMS Le WMS (Workload Manager) est le serveur avec lequel interagit l'utilisateur lors de la soumission, le suivi et la récupération des résultats d'un calcul. Le serveur choisit le noeud de grille correspond au pré-requis du calcul et donc à même à faire fonctionner le calcul. Il interagit principalement avec le CE pour la soumission des calculs, le transfert des sandbox et le suivi de l'état d'un calcul.
CE Le CE (Computing Element) est le serveur interagissant directement avec le gestionnaire de queues. Dans le cas de la grille régionale, le service PBS/Torque est utilisé.
WN Le WN (Worker Node) est le serveur effectuant le calcul. Il se connecte au SE pour récupérer les données nécessaires au calcul. Il peut également copier les résultats du calcul sur le SE.

 

 

3. Pré-requis à l'utilisation de la grille

Afin de pouvoir soumettre un calcul, les deux pré-requis suivants sont nécessaires :

La partie privée et la partie publique du certificat doivent être placées dans le répertoire $HOME/.globus sur le serveur à partir duquel les calculs seront soumis. Ces fichiers ne doivent être lisible que par leur propriétaire :

# ls -l $HOME/.globus
-r-------- 1 user group 1935 Feb 16 2010 usercert.pem
-r-------- 1 user group 1920 Feb 16 2010 userkey.pem

4. Gestion d'un calcul

Avant toute opération sur la grille régionale, il est nécessaire d'avoir un proxy valide. Il peut être généré avec la commande suivante :

# voms-proxy-init --voms vo.grand-est.fr

La commande voms-proxy-info -all permet de vérifier la durée de validité de son proxy :

# voms-proxy-info --all
subject : /O=GRID-FR/C=FR/O=CNRS/OU=UDS/CN=Prenom Nom/CN=proxy
issuer : /O=GRID-FR/C=FR/O=CNRS/OU=UDS/CN=Prenom Nom
identity : /O=GRID-FR/C=FR/O=CNRS/OU=UDS/CN=Prenom Nom
type : proxy
strength : 1024 bits
path : /tmp/x509up_u1234
timeleft : 11:59:36
=== VO vo.grand-est.fr extension information ===
VO : vo.grand-est.fr
subject : /O=GRID-FR/C=FR/O=CNRS/OU=UDS/CN=Prenom Nom
issuer : /O=GRID-FR/C=FR/O=CNRS/OU=LAL/CN=grid12.lal.in2p3.fr
attribute : /vo.grand-est.fr/Role=NULL/Capability=NULL
timeleft : 11:59:36
uri : grid12.lal.in2p3.fr:20018

4.1. Soumission d'un calcul

La soumission d'un calcul sur la grille régionale, ainsi que sur toute grille équipée avec l'intergiciel gLite, nécessite un fichier texte contenant des instructions au format JDL (Job Description Language). Ce type de fichier détaille les caractéristiques du calcul ainsi que ses besoins. Le fichier JDL présenté dans l'exemple 1 est fonctionnel et utilisable pour la réalisation d'un calcul simple.

Exemple 1. Contenu du fichier my.jdl

JobType = "Normal";
Executable = "/bin/sh";
Arguments = "myscript.sh";
StdOutput = "stdout.out";
StdError = "stderr.err";
InputSandbox = { "myscript.sh" };
OutputSandbox = { "stdout.out", "stderr.err" };
VirtualOrganisation = "vo.grand-est.fr";

 

Chaque attribut du fichier JDL exemple a un rôle bien précis :

  • JobType décrit le type de tâche réalisé (Normal, Collection ou Parametric).

  • Executable définit la commande à exécuter sur les noeuds de calcul.

  • Arguments spécifie les arguments à passer au programme définit par l'attribut Executable. Le contenu du script myscript.sh est ce que vous auriez tapé en interactif pour effectuer votre calcul.

  • StdOutput indique le nom du fichier vers lequel est redirigé la sortie standard

  • StdError indique le nom du fichier vers lequel est redirigé les messages d'erreur

  • InputSandbox indique les fichiers qui seront envoyés avec le fichier JDL au WMS. Ces fichiers seront utilisables par le serveur (WN) exécutant le calcul. Il est important de noter que la taille totale de l'InputSandbox est limitée. Ainsi, si la taille de l'ensemble des fichiers à envoyer devait dépasser 20 Mo, il est nécessaire d'utiliser un SE, ou de pré-installer les logiciels nécessaires au calcul.[2].

  • OutputSandbox indique les fichiers que nous souhaitons récupérer après l'exécution du calcul. Par défaut, il est conseillé de récupérer les fichiers stdout.out et stderr.err qui contiennent les sorties standard et erreur. Ces fichiers seront téléchargés depuis le WMS. De même que pour l'InputSandbox, le volume retourné ne doit pas dépasser 20 Mo. Si la taille totale des fichiers de l'OutputSanbox dépasse cette valeur, il est nécessaire de copier les fichiers de sortie (résultats, journaux du calcul) sur un SE puis de les récupérer par la suite, pour éviter leur troncation.

  • VirtualOrganization renseigne sur la VO dans laquelle va être effectué le calcul. Dans le cas de la grille régionale, il s'agit de vo.grand-est.fr.

Exemple 2. Contenu du fichier myscript.sh

#!/bin/sh

echo "===== Begin ====="
date
echo "The program is running on $HOSTNAME"
date
echo "===== End ====="

 

Une fois que les fichiers my.jdl et myscript.sh sont créés, le calcul peut être soumis sur la grille avec la commande suivante :

# glite-wms-job-submit -a my.jdl

Connecting to the service https://sbgwms1.in2p3.fr:7443/glite_wms_wmproxy_server


====================== glite-wms-job-submit Success ======================

The job has been successfully submitted to the WMProxy
Your job identifier is:

https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug

==========================================================================


Il est important de conserver l'identifiant de la tâche https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug. En effet, cet identifiant est utilisé pour suivre les différentes étapes d'une tâche, ainsi que pour récupérer l'OutputSandbox.

Note

L'utilisation de l'option -e permet de spécifier le serveur WMS sur lequel va être soumis le calcul :

# glite-wms-job-submit -e https://sbgwms3.in2p3.fr:7443/glite_wms_wmproxy_server -a my.jdl

4.2. Suivi de l'état d'un calcul

Pour connaître l'état d'un calcul, la commande suivante est utilisée avec l'identifiant du calcul :

# glite-wms-job-status https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug


======================= glite-wms-job-status Success =====================
BOOKKEEPING INFORMATION:

Status info for the Job : https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug
Current Status: Ready
==========================================================================

Une fois que le calcul est terminé, la commande précédente indique :

# glite-wms-job-status https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug


======================= glite-wms-job-status Success =====================
BOOKKEEPING INFORMATION:

Status info for the Job : https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug
Current Status: Done (Success)
==========================================================================

4.3. Récupération des résultats d'un calcul

Pour récupérer le contenu décrit par le paramètre OutputSandbox :

# glite-wms-job-output --dir JobOutput https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug

Connecting to the service https://sbgwms1.in2p3.fr:7443/glite_wms_wmproxy_server


================================================================================

JOB GET OUTPUT OUTCOME

Output sandbox files for the job:
https://sbgwms1.in2p3.fr:9000/aTErUbHR8adHN9e8Pi7tug
have been successfully retrieved and stored in the directory:
/home/user/JobOutput/user_aTErUbHR8adHN9e8Pi7tug

================================================================================


Le rapatriement des fichiers de sortie peut être vérifié avec :

# ls -rtl
/home/user/JobOutput/user_aTErUbHR8adHN9e8Pi7tug

-rw-r--r-- 1 user group 13 Oct 28 09:30 stdout.out
-rw-r--r-- 1 user group 0 Oct 28 09:30 stderr.err

5. Gestion des données sur un SE

5.1. Généralités

Les SE sont des points d'entrées vers des dispositifs de stockages accessibles depuis une UI ou un WN. Ils permettent de stocker des volumes de données importants (jusqu'à plusieurs dizaines de To). Si les tâches peu consommatrices d'espace disque peuvent ne pas en faire usage, dès que les données mobilisées en entrée ou en sortie dépassent la dizaine de Mo, ils sont indispensables.

Les données stockées sur un SE sont accessibles en utilisant des commandes spécifiques, telles que lcg-cp ou rfcp. De manière générale, il est plus efficace de faire appel au protocole RFIO (rfcp, rfdir, ...) lorsque le stockage local est adressé (par exemple, lorsque des données produites sur les WN de l'IPHC doivent être copiées sur le site de l'IPHC).

5.2. Les commandes usuelles

  • Copier des données sur un SE

    En mode distant :

    # lcg-cp my_dataset.tar.gz srm://sbgse1.in2p3.fr/dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/my_dataset.tar.gz

    Commande conseillée depuis une UI ou un WN local :

    # rfcp my_dataset.tar.gz /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/my_dataset.tar.gz
    30914560 bytes in 1 seconds through local (in) and eth0 (out) (30190 KB/sec)

    Cette seconde commande sera souvent placée dans le script d'une tâche de calcul afin d'en conserver le résultat.

    Note

    Il existe une différence importante entre les commandes lcg-cp et rfcp. En effet, les données copiées par lcg-cp sont par défaut considérées comme permanentes, alors que les données copiées par rfcp sont considérées comme temporaires, avec une durée de vie de 6 mois.

  • Récupérer des données depuis un SE

    En mode distant :

    # lcg-cp  srm://sbgse1.in2p3.fr/dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/my_dataset.tar.gz my_dataset.tar.gz

    Commande conseillée depuis une UI ou un WN local :

    # rfcp /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/my_dataset.tar.gz my_dataset.tar.gz
    30914560 bytes in 1 seconds through eth0 (in) and local (out) (30190 KB/sec)

    Cette commande permet de récupérer le résultat d'un calcul sur une UI, ou des données pour une tâche en cours, par exemple.

  • Lister le contenu d'un répertoire sur un SE

    En mode distant :

    # lcg-ls -l  srm://sbgse1.in2p3.fr/dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/
    -rw-rw-r-- 1 2 2 30914560 ONLINE /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/my_dataset.tar.gz

    Commande conseillée depuis une UI ou un WN local :

    # rfdir /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/
    -rw-rw-r-- 1 633 211 30914560 Mar 25 09:18 /dpm/in2p3.fr/home/vo.grand-est.fr/lab/user/my_dataset.tar.gz

6. Paramètres avancés pour la soumission d'un calcul

Cette section détaille la soumission des tâches longues et des tâches paramétriques.

6.1. Soumission d'une tâche longue

Lorsqu'il est nécessaire de soumettre des tâches dont la durée dépasse la durée du proxy fourni (24 heures), il est possible d'utiliser un serveur de proxy afin de renouveler automatiquement le proxy. Pour ce faire, il est nécessaire d'ajouter dans le fichier JDL de la tâche la ligne suivante :

MyProxyServer="myproxy.cern.ch";

Puis d'utiliser les commandes suivantes pour soumettre la tâche :

# voms-proxy-init --voms vo.grand-est.fr
# myproxy-init -d -n -c 100
# glite-wms-job-delegate-proxy -a
# glite-wms-job-submit -a my.jdl

La commande myproxy-init permet d'enregistrer le proxy sur un serveur myproxy (dans notre cas, myproxy.cern.ch). La commande glite-wms-job-delegate-proxy permet de déléguer le renouvellement du proxy au WMS.

De cette manière, le proxy sera automatiquement renouvelé, que la tâche de calcul soit en attente en queue ou bien que le calcul soit en cours sur l'un des noeuds.

6.2. Soumission d'un ensemble paramétrique de calculs

La soumission d'une tâche de type Parametric est la soumission d'un ensemble de calculs dont les fichiers JDL sont identiques, mais qui pourront accéder à une valeur paramétrable unique à chaque calcul. Ce type de tâche est très utile lors le soumission d'une série de calculs ne différant que par la caleur d'un paramètre (par exemple, un paramètre numérique utilisé dans le nom des fichiers d'entrée et de sortie).

Exemple 3. Contenu du fichier parametric.jdl

JobType = "Parametric";

Parameters = 20;
ParameterStart = 1;
ParameterStep = 1;

Executable = "/bin/sh";
Arguments = "myparamscript.sh";
StdOutput = "stdout.out";
StdError = "stderr.err";
InputSandbox = { "myscript.sh" };
OutputSandbox = { "stdout.out", "stderr.err" };
VirtualOrganisation = "vo.grand-est.fr";

 

Exemple 4. Contenu du fichier myparamscript.sh

#!/bin/sh

BATCH_NB=$1
echo "===== Begin ====="
date
rfcp /dpm/in2p3/home/grand-est/iphc/user/dataset_${BATCH_NB}.dat dataset.dat
${VO_VO_GRAND_EST_FR_SW_DIR}/bin/mycode --input dataset --output output_file_${BATCH_NB}.dlg
rfcp output_file_${BATCH_NB}.dlg /dpm/in2p3/home/vo.grand-est.fr/lab/user/output_file_${BATCH_NB}.dlg
date
echo "===== End ====="

 

7. Références complémentaires

Cette section propose des références complémentaires pour approfondir la gestion des calculs avec l'intergiciel gLite :

 


[1] Actuellement, les calculs soumis sur la VO vo.grand-est.fr s'exécutent toujours sur le site de l'IPHC

[2] Le déploiement de logiciel préinstallé sur la grille dépasse le cadre de ce document, contacter votre administrateur grille pour plus d'informations