Cinder - Service Block Storage¶
Introduction¶
Cinder fournit le stockage bloc persistant pour OpenStack. Contrairement aux disques éphémères qui disparaissent avec l'instance, les volumes Cinder persistent indépendamment et peuvent être attachés/détachés des instances.
Prérequis¶
Points à apprendre¶
Architecture Cinder¶
graph TB
subgraph Controller["CONTROLLER NODE"]
cinder_api["Cinder API<br/>(8776)"]
scheduler["Scheduler"]
backup["Backup<br/>(optionnel)"]
rabbitmq["🐰 RabbitMQ"]
mariadb[(MariaDB)]
cinder_api --> rabbitmq
scheduler --> rabbitmq
cinder_api --> mariadb
end
subgraph Storage["STORAGE NODE(S)"]
cinder_volume["Cinder Volume"]
subgraph Backends["Storage Backends"]
lvm["LVM Backend"]
ceph["Ceph RBD"]
nfs["NFS Backend"]
end
cinder_volume --> lvm
cinder_volume --> ceph
cinder_volume --> nfs
end
rabbitmq --> cinder_volume
Composants Cinder¶
| Composant | Rôle |
|---|---|
| cinder-api | Point d'entrée REST API |
| cinder-scheduler | Sélection du backend pour les volumes |
| cinder-volume | Gestion des volumes (1 par backend) |
| cinder-backup | Sauvegarde vers Swift/Ceph/NFS |
Backends de stockage¶
| Backend | Description | Cas d'usage |
|---|---|---|
| LVM | Logical Volume Manager local | Lab, petit déploiement |
| Ceph RBD | Stockage distribué Ceph | Production, HA |
| NFS | Partage réseau | Simplicité, existant |
| iSCSI | Baies SAN | Enterprise |
| FC | Fibre Channel | Enterprise haute perf |
| Pure/NetApp/... | Baies propriétaires | Enterprise |
Gestion des volumes¶
Création de volumes¶
# Volume vide
openstack volume create --size 50 my-volume
# Volume bootable depuis image
openstack volume create --size 20 \
--image "Ubuntu 24.04" \
--bootable \
boot-volume
# Volume avec type spécifique
openstack volume create --size 100 \
--type ssd-fast \
fast-volume
# Volume dans une zone spécifique
openstack volume create --size 50 \
--availability-zone nova \
zoned-volume
Gestion du cycle de vie¶
# Lister volumes
openstack volume list
# Détails
openstack volume show my-volume
# Étendre un volume (doit être détaché ou supporté online)
openstack volume set --size 100 my-volume
# Renommer
openstack volume set --name new-name my-volume
# Mettre en read-only
openstack volume set --read-only my-volume
# Supprimer
openstack volume delete my-volume
Attachement aux instances¶
# Attacher un volume
openstack server add volume myvm my-volume
# Attacher sur un device spécifique
openstack server add volume myvm my-volume --device /dev/vdb
# Voir les attachements
openstack volume show my-volume -c attachments
# Détacher
openstack server remove volume myvm my-volume
Boot from Volume¶
# Créer instance bootant depuis volume
openstack server create myvm \
--flavor m1.small \
--volume boot-volume \
--network private
# Créer instance avec nouveau volume boot
openstack server create myvm \
--flavor m1.small \
--image "Ubuntu 24.04" \
--boot-from-volume 50 \
--network private
# Ne pas supprimer le volume à la suppression de l'instance
openstack server create myvm \
--flavor m1.small \
--image "Ubuntu 24.04" \
--block-device source=image,id=IMAGE_ID,dest=volume,size=50,bootindex=0,delete_on_termination=false \
--network private
Snapshots¶
# Créer un snapshot
openstack volume snapshot create --volume my-volume my-snapshot
# Avec force (volume attaché)
openstack volume snapshot create --volume my-volume --force my-snapshot
# Lister snapshots
openstack volume snapshot list
# Créer volume depuis snapshot
openstack volume create --snapshot my-snapshot \
--size 50 \
restored-volume
# Supprimer snapshot
openstack volume snapshot delete my-snapshot
Volume Types et QoS¶
# Lister les types
openstack volume type list
# Créer un type
openstack volume type create ssd-fast \
--property volume_backend_name=ceph-ssd
# Propriétés de type
openstack volume type set ssd-fast \
--property provisioning:type=thin
# QoS
openstack volume qos create high-iops \
--consumer front-end \
--property read_iops_sec=10000 \
--property write_iops_sec=10000
# Associer QoS à un type
openstack volume qos associate high-iops ssd-fast
Backup de volumes¶
# Créer un backup
openstack volume backup create --name my-backup my-volume
# Backup incrémental
openstack volume backup create --name my-backup-incr \
--incremental my-volume
# Lister backups
openstack volume backup list
# Restaurer
openstack volume backup restore my-backup restored-volume
# Supprimer backup
openstack volume backup delete my-backup
Transfer de volumes¶
Permet de transférer un volume entre projets.
# Créer une demande de transfert
openstack volume transfer request create my-volume
# Résultat
+------------+--------------------------------------+
| Field | Value |
+------------+--------------------------------------+
| auth_key | abc123... |
| id | transfer-id |
| name | None |
| volume_id | volume-id |
+------------+--------------------------------------+
# Accepter le transfert (autre projet)
openstack volume transfer request accept --auth-key abc123 transfer-id
Configuration multi-backend¶
# /etc/cinder/cinder.conf
[DEFAULT]
enabled_backends = lvm-backend,ceph-backend,nfs-backend
[lvm-backend]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
volume_backend_name = LVM
target_protocol = iscsi
[ceph-backend]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
volume_backend_name = CEPH
[nfs-backend]
volume_driver = cinder.volume.drivers.nfs.NfsDriver
nfs_shares_config = /etc/cinder/nfs_shares
volume_backend_name = NFS
Configuration Ceph RBD (détaillée)¶
# /etc/cinder/cinder.conf
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
rbd_user = cinder
rbd_secret_uuid = UUID_DU_SECRET
# Créer pool Ceph pour Cinder
ceph osd pool create volumes 128
ceph osd pool application enable volumes rbd
# Créer utilisateur Ceph
ceph auth get-or-create client.cinder \
mon 'profile rbd' \
osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images'
Encryption des volumes¶
# Créer type avec encryption
openstack volume type create encrypted-volumes
openstack volume type set --encryption-provider luks \
--encryption-cipher aes-xts-plain64 \
--encryption-key-size 256 \
--encryption-control-location front-end \
encrypted-volumes
# Créer volume encrypté
openstack volume create --size 50 \
--type encrypted-volumes \
secure-volume
Quotas de stockage¶
# Voir quotas
openstack quota show PROJECT_ID
# Modifier quotas volumes
openstack quota set --volumes 100 \
--gigabytes 10000 \
--snapshots 200 \
--backups 50 \
PROJECT_ID
# Quotas par type de volume
openstack quota set --volume-type ssd-fast \
--volumes 20 \
--gigabytes 2000 \
PROJECT_ID
Troubleshooting¶
# État des services Cinder
openstack volume service list
# Logs
tail -f /var/log/cinder/cinder-volume.log
tail -f /var/log/cinder/cinder-scheduler.log
# Debug volume en erreur
openstack volume show ERROR_VOLUME_ID
openstack volume set --state available ERROR_VOLUME_ID # Reset état
# Dans Kolla
docker logs cinder_volume
docker exec -it cinder_volume bash
# Vérifier backend Ceph
ceph -s
rbd ls volumes
rbd info volumes/volume-UUID
Exemples pratiques¶
Stack avec volumes persistants¶
#!/bin/bash
# Création d'une stack avec DB persistante
# Variables
PROJECT="webapp"
NETWORK="private"
# Volume pour la base de données
openstack volume create --size 100 \
--type ssd-fast \
${PROJECT}-db-data
# Instance DB
openstack server create ${PROJECT}-db \
--flavor m1.medium \
--image "Ubuntu 24.04" \
--network $NETWORK \
--security-group db-sg \
--key-name mykey \
--wait
# Attacher le volume
openstack server add volume ${PROJECT}-db ${PROJECT}-db-data
# Après boot, dans la VM :
# sudo mkfs.ext4 /dev/vdb
# sudo mount /dev/vdb /var/lib/mysql
# echo '/dev/vdb /var/lib/mysql ext4 defaults 0 2' | sudo tee -a /etc/fstab
Migration de volume entre backends¶
# Retyper un volume (change de backend)
openstack volume set --type new-type --retype-policy on-demand my-volume
# Migration explicite
cinder migrate my-volume target-host
# Vérifier la migration
openstack volume show my-volume -c migration_status
Ressources¶
Checkpoint¶
- Je comprends l'architecture Cinder et ses composants
- Je peux créer et gérer des volumes
- Je sais attacher/détacher des volumes aux instances
- Je comprends le boot from volume
- Je peux créer des snapshots et backups
- Je connais les différents backends de stockage
- Je sais configurer les volume types et QoS