27 Ceph comme support de l'instance QEMU/KVM #
Le cas d'utilisation le plus courant de Ceph consiste à fournir des images de périphériques de bloc aux machines virtuelles. Par exemple, un utilisateur peut créer une image « golden » avec un système d'exploitation et tout logiciel pertinent dans une configuration idéale. Il réalise ensuite un instantané de l'image. Enfin, l'utilisateur clone l'instantané (généralement plusieurs fois, voir Section 20.3, « Images instantanées » pour plus de détails). La possibilité de créer des clones de copie sur écritures (copy-on-write, COW) d'un instantané signifie que Ceph peut rapidement bloquer les images de périphérique de bloc sur des machines virtuelles, car le client n'a pas besoin de télécharger une image entière chaque fois qu'il fait tourner une nouvelle machine virtuelle.
Les périphériques de bloc Ceph peuvent s'intégrer aux machines virtuelles QEMU. Pour plus d'informations sur QEMU KVM, reportez-vous à la page https://documentation.suse.com/sles/15-SP2/html/SLES-all/part-virt-qemu.html.
27.1 Installation de qemu-block-rbd
#
Pour pouvoir utiliser les périphériques de bloc Ceph, QEMU doit disposer du pilote approprié. Vérifiez si le paquetage qemu-block-rbd
est installé ; installez-le si nécessaire :
root #
zypper install qemu-block-rbd
27.2 Utilisation de QEMU #
Vous devez indiquer le nom de la réserve et le nom de l'image sur la ligne de commande QEMU. Vous pouvez également spécifier un nom d'instantané.
qemu-img command options \ rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...
Par exemple, les options id et conf peuvent se présenter ainsi :
qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf
27.3 Création d'images avec QEMU #
Vous pouvez créer une image de périphérique de bloc à partir de QEMU. Vous devez spécifier rbd
, le nom de la réserve et le nom de l'image que vous souhaitez créer. Vous devez également indiquer la taille de l'image.
qemu-img create -f raw rbd:pool-name/image-name size
Par exemple :
qemu-img create -f raw rbd:pool1/image1 10G Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
Le format de données raw
(brut) est le seul format qu'il est raisonnable d'utiliser avec RBD. Techniquement, vous pouvez utiliser d'autres formats pris en charge par QEMU, tels que qcow2
, mais cela ajoutera un overhead supplémentaire et fera que le volume ne sera plus sécurisé pour la migration en direct de la machine virtuelle si le caching est activé.
27.4 Redimensionnement d'images avec QEMU #
Vous pouvez redimensionner une image de périphérique de bloc à partir de QEMU. Vous devez spécifier rbd
, le nom de la réserve et le nom de l'image que vous souhaitez redimensionner. Vous devez également indiquer la taille de l'image.
qemu-img resize rbd:pool-name/image-name size
Par exemple :
qemu-img resize rbd:pool1/image1 9G Image resized.
27.5 Récupération d'informations d'image avec QEMU #
Vous pouvez récupérer des informations d'image de périphérique de bloc à partir de QEMU. Vous devez spécifier rbd
, le nom de la réserve et le nom de l'image.
qemu-img info rbd:pool-name/image-name
Par exemple :
qemu-img info rbd:pool1/image1 image: rbd:pool1/image1 file format: raw virtual size: 9.0G (9663676416 bytes) disk size: unavailable cluster_size: 4194304
27.6 Exécution de QEMU avec RBD #
QEMU peut accéder à une image en tant que périphérique de bloc virtuel directement via librbd
. Cela évite un changement de contexte supplémentaire et permet de tirer parti du caching RBD.
Vous pouvez utiliser qemu-img
pour convertir des images de machines virtuelles existantes en images de périphériques de bloc Ceph. Par exemple, si vous disposez d'une image qcow2, vous pouvez exécuter :
qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12
Pour exécuter un démarrage de machine virtuelle à partir de cette image, vous pouvez exécuter :
root #
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12
Le caching RBD peut améliorer considérablement les performances. Les options de cache de QEMU contrôlent le caching librbd
:
root #
qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback
Pour plus d'informations sur le caching RBD, reportez-vous à la Section 20.5, « Paramètres de cache ».
27.7 Activation du rejet et de TRIM #
Les périphériques de bloc Ceph prennent en charge l'opération de rejet. Cela signifie qu'un invité peut envoyer des requêtes TRIM pour permettre à un périphérique de bloc Ceph de récupérer l'espace inutilisé. Cette fonction peut être activée sur l'invité en montant le système de fichiers XFS
avec l'option discard.
Afin que cette option soit disponible pour l'invité, elle doit être activée explicitement pour le périphérique de bloc. Pour ce faire, vous devez spécifier une option discard_granularity
associée à l'unité :
root #
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
L'exemple ci-dessus utilise le pilote IDE. Le pilote virtio ne prend pas en charge le rejet.
Si vous utilisez libvirt
, modifiez le fichier de configuration de votre domaine libvirt à l'aide de virsh edit
afin d'inclure la valeur xmlns:qemu
. Ajoutez ensuite un qemu:commandline block
en tant qu'enfant de ce domaine. L'exemple suivant montre comment définir deux périphériques avec qemu id =
et associer des valeurs discard_granularity
différentes à cet identifiant.
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <qemu:commandline> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-0.discard_granularity=4096'/> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-1.discard_granularity=65536'/> </qemu:commandline> </domain>
27.8 Définition des options du cache QEMU #
Les options du cache QEMU correspondent aux paramètres du cache Ceph RBD suivants.
Writeback (Écriture différée) :
rbd_cache = true
WriteThrough (Écriture immédiate) :
rbd_cache = true rbd_cache_max_dirty = 0
Aucun :
rbd_cache = false
Les paramètres du cache QEMU remplacent les paramètres par défaut de Ceph (paramètres qui ne sont pas explicitement définis dans le fichier de configuration de Ceph). Si vous définissez explicitement les paramètres de cache RBD dans votre fichier de configuration Ceph (voir Section 20.5, « Paramètres de cache »), vos paramètres Ceph remplacent les paramètres du cache QEMU. Si vous définissez les paramètres du cache sur la ligne de commande QEMU, les paramètres de ligne de commande QEMU remplacent les paramètres du fichier de configuration Ceph.