Skip to content

Intégration Cinder avec Ceph RBD

Introduction

Cette section configure Cinder pour utiliser Ceph comme backend de stockage pour les volumes persistants.

Prérequis

  • Cluster Ceph fonctionnel
  • Pool volumes créé
  • Utilisateur client.cinder créé

Points à apprendre

Distribution des fichiers Ceph

# Sur le nœud deploy, copier les fichiers Ceph vers tous les nœuds OpenStack
for host in controller-{1,2,3} compute-{1,2}; do
  ssh $host 'sudo mkdir -p /etc/ceph'
  scp /etc/ceph/ceph.conf $host:/tmp/
  scp /etc/ceph/ceph.client.cinder.keyring $host:/tmp/
  ssh $host 'sudo mv /tmp/ceph.conf /etc/ceph/'
  ssh $host 'sudo mv /tmp/ceph.client.cinder.keyring /etc/ceph/'
  ssh $host 'sudo chmod 644 /etc/ceph/*'
done

Configuration Kolla pour Ceph backend

# /etc/kolla/globals.yml - Ajouter/modifier

# Désactiver LVM, activer Ceph
enable_cinder_backend_lvm: "no"
enable_cinder_backend_ceph: "yes"

# Configuration Ceph
ceph_cinder_pool_name: "volumes"
ceph_cinder_backup_pool_name: "backups"
ceph_nova_pool_name: "vms"
ceph_glance_pool_name: "images"

# Keyring
ceph_cinder_keyring: "ceph.client.cinder.keyring"

Configuration manuelle Cinder (si pas via Kolla)

# /etc/kolla/config/cinder/cinder.conf

[DEFAULT]
enabled_backends = ceph
default_volume_type = ceph

[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_SECRET>

Générer le secret libvirt pour Nova

# Sur un controller
UUID_SECRET=$(uuidgen)
echo $UUID_SECRET

# Créer le fichier XML du secret
cat > secret.xml << EOF
<secret ephemeral='no' private='no'>
  <uuid>${UUID_SECRET}</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF

# Créer le secret sur tous les compute nodes
for host in compute-{1,2}; do
  scp secret.xml $host:/tmp/
  ssh $host 'sudo virsh secret-define /tmp/secret.xml'

  # Définir la valeur du secret
  CINDER_KEY=$(sudo ceph auth get-key client.cinder)
  ssh $host "sudo virsh secret-set-value ${UUID_SECRET} ${CINDER_KEY}"
done

Reconfigurer Kolla

# Appliquer la nouvelle configuration
kolla-ansible -i ~/multinode reconfigure --tags cinder

Créer le type de volume Ceph

source /etc/kolla/admin-openrc.sh

# Créer le type de volume
openstack volume type create ceph \
  --property volume_backend_name=ceph

# Définir comme défaut
openstack volume type set --property volume_backend_name=ceph ceph

Test de création de volume

# Créer un volume
openstack volume create --size 10 --type ceph test-volume

# Vérifier dans OpenStack
openstack volume list
openstack volume show test-volume

# Vérifier dans Ceph
sudo rbd ls volumes
sudo rbd info volumes/volume-<UUID>

# Attacher à une instance
openstack server add volume test-vm test-volume

# Détacher
openstack server remove volume test-vm test-volume

# Supprimer
openstack volume delete test-volume

Checkpoint

  • Configuration Ceph ajoutée à globals.yml
  • Fichiers Ceph distribués sur tous les nœuds
  • Secret libvirt créé sur les compute nodes
  • Type de volume "ceph" créé
  • Test de création/attachement de volume réussi