Gestion des volumes

Les volumes Openstack sont fournis par le service Cinder. Pour accéder aux commandes, il est nécéssaire d’installer python-cinderclient qui fournit l’utilitaire cinder. Les volumes Openstack sont l’équivalent de la fonctionnalité Elastic Block Storage de Amazon. Ils fournissent un stockage élastique, ajustable à la demande, fiable, performant et persistant. Au CC-IN2P3 ce stockage est assuré par un cluster Ceph.

Lister les volumes instanciés

% openstack volume list --long
+---------+-----------+--------------+------+--------------------+----------+--------------------------------------+
|   ID    |   Status  | Display Name | Size | Volume Type        | Bootable |             Attached to              |
+---------+-----------+--------------+------+--------------------+----------+--------------------------------------+
|  [...]  | available | testvol1     |  1   |     rad.regular    |          |                                      |
|  [...]  | detaching | testvol2     |  1   |     rad.regular    |          | c16d3ecb-f504-4cbc-8fa0-89facd5eb3f5 |
|  [...]  | available | vol4         |  1   |     ha.regular     |          |                                      |
|  [...]  | available | vol5         |  1   |     rad.regular    |          |                                      |
+---------+-----------+--------------+------+--------------------+----------+--------------------------------------+

Ancienne commande :

cinder list

Lister les volumes types

Les volumes types permettent de choisir le type de stockage que l’on souhaite utiliser (rapide, capacitif ...). Pour lister les volumes types disponible dans le projet :

% openstack volume type list --long
+--------------------------------------+------------+-----------+--------------+---------------------------------------+
| ID                                   | Name       | Is Public | Description  | Properties                            |
+--------------------------------------+------------+-----------+--------------+---------------------------------------+
| a171dae9-73fb-4223-9b59-d59be044aef5 | ha.regular | True      | Ceph backend | volume_backend_name='volumes-service' |
+--------------------------------------+------------+-----------+--------------+---------------------------------------+

Les noms des volumes types sont standardisés et sont constituées de la sorte : type.backend

où :

Le type est fixé à {ha|rad|...}. Il exprime le cas d’utilisation typique de la VM. Typiquement :

ha pour des instances “haute disponibilité” fournissant des services de production.
rad pour la R&D
...

Le backend est fixé à {regular|fast|slow|...}. Il indique quel type de stockage est utilisé pour ce volume type :

regular pour le stockage commum/normal
fast pour du stockage SSD par exemple
....

Du stockage SSD est disponible mais son usage est strictement contrôlé. Si vous avez des besoins requérant ce type de stockage faites nous le savoir.

Créer un nouveau volume

% openstack volume create --size 5 --type ha.regular monvolume1
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|     attachments     |                  []                  |
|  availability_zone  |                 nova                 |
|      created_at     |      2013-04-19T11:03:50.606663      |
| display_description |                 None                 |
|     display_name    |              monvolume1              |
|          id         | cb252a17-f581-4d70-8049-be358a5fc8bb |
|       metadata      |                  {}                  |
|         size        |                  5                   |
|     snapshot_id     |                 None                 |
|        status       |               creating               |
|     volume_type     |              ha.regular              |
+---------------------+--------------------------------------+

Attacher un volume libre à une instance

Pour attacher à un volume à une instance on utilise simplement la commande :

% openstack server add volume <id/nom_du_serveur> <id/nom_du_volume>

Le volume ainsi attaché sera automatiquement vu par le système sous la forme d’une partition du type /vdb ou /vdc. Exemple d’attachement :

% openstack server add volume monserveur monvolume

Une fois le volume attaché, on peut voir dans l’instance nova le block device correspondant :

% grep -v vda /proc/partitions
major minor  #blocks  name

 252       16    1048576 vdb

Ou

% lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda             252:0    0   10G  0 disk
├vda1          252:1    0  200M  0 part /boot
└vda2          252:2    0  7.8G  0 part
 ├rootvg-root 253:0    0 1000M  0 lvm  /
 ├rootvg-usr  253:1    0  3.4G  0 lvm  /usr
 ├rootvg-tmp  253:2    0  500M  0 lvm  /tmp
 └rootvg-var  253:3    0  2.5G  0 lvm  /var
vdb             252:16   0   5G  0 disk

On peut monter l’espace (par exemple) en réalisant les opérations :

% mkfs.xfs /dev/vdb
% mkdir /data
% cat >> /etc/fstab <<EOF
/dev/vdb /data xfs nosuid,nodev 1 2
EOF
% mount /data

Alternative plus sophistiquée :

% pvcreate /dev/vdb
% vgcreate cindervolume /dev/vdb
% lvcreate -L5G -n part1 cindervolume
% mkfs.xfs /dev/cindervolume/part1
# suite identique au cas précédent

Détacher un volume

Détacher un volume ne supprime pas les données. C’est l’équivalent Unix de détacher une LUN d’un hôte. Un volume peut donc être attaché/détaché autant que souhaité avec conservation des données.

% openstack server remove volume monserveur monvolume

Supprimer un volume

Warning

la suppression d’un volume entraîne la suppression définitive des données stockées sur le volume.

% openstack volume delete 38ed8ee5-bcb6-4bea-91d4-5c25d8c21fdb

Les volumes qui sont dans un status error doivent être supprimés dans la mesure du possible.

Snapshoter un volume

Le snapshot d’un volume crée une copie Copy-On-Write du volume qui permet d’établir des points de retour possibles dans le temps. Par défaut un snapshot ne peut être effectué qu’avec le volume détaché cependant une option permet d’effectuer cette opération sur un volume utilisé.

% openstack volume snapshot create --volume monvolume1 monsnapshot
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|      created_at     |      2013-04-19T11:35:52.269821      |
| display_description |                 None                 |
|     display_name    |              monsnapshot             |
|          id         | bab83cd0-9b50-4440-abdc-3518edaa8f8c |
|         size        |                  5                   |
|        status       |               creating               |
|      volume_id      | 2cbbf9d7-248c-4489-8e37-5dbb0f351199 |
+---------------------+--------------------------------------+

L’option - -force permet de faire un snapshot d’un volume attaché à une instance. De plus effectuer un snapshot sur une instance qui utilise beaucoup son disque peut s’avérer très long.

Lister les snapshots existants

% openstack volume snapshot list
+--------------------------------------+---------------+-------------+-----------+------+
| ID                                   | Name          | Description | Status    | Size |
+--------------------------------------+---------------+-------------+-----------+------+
| bab83cd0-9b50-4440-abdc-3518edaa8f8c | monsnapshot   | None        | available |   5  |
+--------------------------------------+---------------+-------------+-----------+------+

Pour vérifier l’état de son snapshot :

% openstack volume snapshot show monsnapshot
+--------------------------------------------+--------------------------------------+
| Field                                      | Value                                |
+--------------------------------------------+--------------------------------------+
| created_at                                 | 2013-04-19T11:35:52.269821           |
| description                                | None                                 |
| id                                         | bab83cd0-9b50-4440-abdc-3518edaa8f8c |
| name                                       | monsnapshot                          |
| os-extended-snapshot-attributes:progress   | 100%                                 |
| os-extended-snapshot-attributes:project_id | 0223bc1968bc4e46932c5d87012aaf14     |
| properties                                 |                                      |
| size                                       | 5                                    |
| status                                     | available                            |
| updated_at                                 | 2013-04-19T11:35:52.269821           |
| volume_id                                  | cb252a17-f581-4d70-8049-be358a5fc8bb |
+--------------------------------------------+--------------------------------------+

Supprimer un snapshot

% openstack volume snapshot delete bab83cd0-9b50-4440-abdc-3518edaa8f8c

Attacher un snapshot fait précédement sans détruire le volume courant

Il faut pour cela créer un nouveau volume à partir d’un snapshot puis attacher le volume :

% openstack volume create --size 10 --snapshot monsnapshot --type rad.regular testsnap
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|     attachments     |                  []                  |
|  availability_zone  |                 nova                 |
|      created_at     |      2013-04-19T11:40:14.917488      |
| display_description |                 None                 |
|     display_name    |               testsnap               |
|          id         | 16983673-fb34-4f7e-9eba-54cb5e59a13a |
|       metadata      |                  {}                  |
|         size        |                  10                  |
|     snapshot_id     | bab83cd0-9b50-4440-abdc-3518edaa8f8c |
|        status       |               creating               |
|     volume_type     |              rad.regular             |
+---------------------+--------------------------------------+
% openstack server add volume monserveur testsnap