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 types de volumes
Les types de volumes 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 :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 et utiliser un volume
Pour créer un 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
/dev/vdb /data xfs nosuid,nodev 1 2
% mount /data
Alternative plus sophistiquée :
% pvcreate /dev/vdb
% vgcreate cindervolume /dev/vdb
% lvcreate -L5G -n part1 cindervolume
% mkfs.xfs /dev/cindervolume/part1
et 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
Attention
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.
Snapshot d’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
Pour attacher un snapshot fait précédement sans détruire le volume courant il faut 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