27 Ceph como procesador final para la instancia de QEMU KVM #
El caso de uso más frecuente de Ceph implica proporcionar imágenes de dispositivo de bloques a máquinas virtuales. Por ejemplo, un usuario puede crear una imagen lista para usar con un sistema operativo y cualquier software relevante en una configuración ideal. A continuación, el usuario toma una instantánea de la imagen. Por último, el usuario clona la instantánea (normalmente muchas veces, consulte la Sección 20.3, “Instantáneas” para más información). La capacidad para crear clones de copia de escritura de una instantánea significa que Ceph puede provisionar imágenes de dispositivos de bloques a máquinas virtuales rápidamente, ya que el cliente no necesita descargar una imagen completa cada vez que invoca una máquina virtual nueva.
Los dispositivos de bloques de Ceph pueden integrarse con máquinas virtuales QEMU. Para obtener más información sobre QEMU KVM, consulte https://documentation.suse.com/sles/15-SP1/single-html/SLES-virtualization/#part-virt-qemu.
27.1 Instalación qemu-block-rbd
#
Para poder utilizar dispositivos de bloques de Ceph, QEMU debe tener instalado el controlador adecuado. Compruebe si el paquete qemu-block-rbd
está instalado e instálelo si fuera necesario:
#
zypper install qemu-block-rbd
27.2 Uso de QEMU #
La línea de comandos de QEMU espera que se especifique el nombre de repositorio y el nombre de imagen. También puede especificar un nombre de instantánea.
qemu-img command options \ rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...
Por ejemplo, si especifica las opciones id y conf, se puede obtener un resultado parecido al siguiente:
qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf
27.3 Creación de imágenes con QEMU #
Puede crear una imagen de dispositivo de bloques en QEMU. Debe especificar el rbd
, el nombre del repositorio y el nombre de la imagen que desea crear. También debe especificar el tamaño de la imagen.
qemu-img create -f raw rbd:pool-name/image-name size
Por ejemplo:
qemu-img create -f raw rbd:pool1/image1 10G Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
El formato de datos raw
es en realidad la única opción que se puede usar con RBD. Técnicamente, se podrían utilizar otros formatos compatibles con QEMU, como qcow2
, pero se requiere mucha más supervisión y haría que el volumen no fuera seguro para la migración en directo de la máquina virtual si el almacenamiento en caché está habilitado.
27.4 Cambio de tamaño de las imágenes con QEMU #
Puede cambiar el tamaño de una imagen de dispositivo de bloques en QEMU. Debe especificar el rbd
, el nombre del repositorio y el nombre de la imagen cuyo tamaño desea cambiar. También debe especificar el tamaño de la imagen.
qemu-img resize rbd:pool-name/image-name size
Por ejemplo:
qemu-img resize rbd:pool1/image1 9G Image resized.
27.5 Recuperación de información de la imagen con QEMU #
Puede recuperar información de la imagen del dispositivo de bloques en QEMU. Debe especificar el rbd
, el nombre del repositorio y el nombre de la imagen.
qemu-img info rbd:pool-name/image-name
Por ejemplo:
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 Ejecución de QEMU con RBD #
QEMU puede acceder a una imagen como dispositivo de bloques virtual directamente a través de librbd
. Esto evita una conmutación de contexto adicional y puede aprovechar las ventajas del almacenamiento en caché de RBD.
Puede utilizar qemu-img
para convertir las imágenes de la máquina virtual existentes a imágenes de dispositivos de bloques de Ceph. Por ejemplo, si dispone de una imagen qcow2, ejecute:
qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12
Para ejecutar un arranque de la máquina virtual desde esa imagen, ejecute:
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12
El almacenamiento en caché de RBD puede mejorar significativamente el rendimiento. Las opciones de caché de QEMU controlan el almacenamiento en caché de librbd
:
#
qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback
Para obtener más información sobre el almacenamiento en caché de RBD, consulte la Sección 20.5, “Ajustes de caché”.
27.7 Habilitación de descartes y TRIM #
Los dispositivos de bloques de Ceph admiten la operación de descarte. Esto significa que un invitado puede enviar peticiones TRIM para permitir que un dispositivo de bloques de Ceph reclame espacio no utilizado. Esto se puede habilitar en el invitado montando XFS
con la opción de descarte.
Para que esto esté disponible para el invitado, se debe habilitar explícitamente para el dispositivo de bloques. Para ello, debe especificar una opción discard_granularity
asociada a la unidad:
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
En el ejemplo anterior se utiliza el controlador IDE. El controlador virtio no admite el descarte.
Si utiliza libvirt
, edite el archivo de configuración del dominio de libvirt con el comando virsh edit
e incluya el valor xmlns:qemu
. A continuación, añada qemu:commandline block
como hijo de dicho dominio. El siguiente ejemplo muestra cómo definir dos dispositivos con qemu id=
con valores discard_granularity
distintos.
<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 Configuración de las opciones de caché de QEMU #
Las opciones de caché de QEMU se corresponden con los siguientes valores de caché de Ceph RBD.
Writeback (actualización de la memoria a través de datos de caché):
rbd_cache = true
WriteThrough (escritura integral caché-memoria):
rbd_cache = true rbd_cache_max_dirty = 0
None (Ninguna):
rbd_cache = false
Los valores de caché de QEMU sustituyen a los valores por defecto de Ceph (los valores que no se definan explícitamente en el archivo de configuración de Ceph). Si define explícitamente los valores de caché de RBD en el archivo de configuración de Ceph (consulte la Sección 20.5, “Ajustes de caché”), los valores de Ceph sustituirán a los valores de caché de QEMU. Si define los valores de caché en la línea de comandos de QEMU, los valores de la línea de comandos de QEMU sustituyen a los valores del archivo de configuración de Ceph.