26 libvirt
y Ceph #
La biblioteca libvirt
crea una capa de abstracción de máquina virtual entre las interfaces de hipervisor y las aplicaciones de software que las utilizan. Con libvirt
, los desarrolladores y administradores del sistema pueden centrarse en un marco de gestión común, API comunes y una interfaz de shell también común (virsh
) para muchos hipervisores distintos, incluidos QEMU/KVM, Xen, LXC y VirtualBox.
Los dispositivos de bloques de Ceph admiten QEMU/KVM. Es posible utilizar dispositivos de bloques de Ceph con software que se conecte con libvirt
. La solución de nube utiliza libvirt
para interactuar con QEMU/KVM, y QEMU/KVM interactúa con los dispositivos de bloques de Ceph a través de librbd
.
Para crear máquinas virtuales que utilicen dispositivos de bloques de Ceph, utilice los procedimientos de las siguientes secciones. En los ejemplos, hemos utilizado libvirt-pool
para el nombre del repositorio, client.libvirt
para el nombre de usuario y new-libvirt-image
para el nombre de la imagen. Puede utilizar cualquier nombre que desee, pero asegúrese de sustituirlos cuando ejecute los comandos en los procedimientos siguientes.
26.1 Configuración de Ceph con libvirt
#
Para configurar Ceph para su uso con libvirt
, realice los pasos siguientes:
Cree un repositorio. En el ejemplo siguiente se utiliza el nombre de repositorio
libvirt-pool
con 128 grupos de colocación.cephuser@adm >
ceph osd pool create libvirt-pool 128 128Compruebe que el repositorio existe.
cephuser@adm >
ceph osd lspoolsCree un usuario de Ceph. El siguiente ejemplo utiliza el nombre de usuario de Ceph
client.libvirt
y hace referencia alibvirt-pool
.cephuser@adm >
ceph auth get-or-create client.libvirt mon 'profile rbd' osd \ 'profile rbd pool=libvirt-pool'Verifique que el nombre existe.
cephuser@adm >
ceph auth listNota: nombre de usuario o IDlibvirt
accederá a Ceph utilizando el IDlibvirt
, no el nombre de Cephclient.libvirt
. Consulte la Sección 30.2.1.1, “Usuario” para obtener una explicación detallada de la diferencia entre el ID y el nombre.Utilice QEMU para crear una imagen en el repositorio RBD. El siguiente ejemplo utiliza el nombre de imagen
new-libvirt-image
y hace referencia alibvirt-pool
.Sugerencia: ubicación del archivo de anillo de clavesLa clave de usuario
libvirt
se almacena en un archivo de claves colocado en el directorio/etc/ceph
. El archivo de claves debe tener un nombre adecuado que incluya el nombre del clúster de Ceph al que pertenece. Para el nombre de clúster por defecto "ceph", el nombre del archivo de claves es/etc/ceph/ceph.client.libvirt.keyring
.Si el anillo de claves no existe, créelo con:
cephuser@adm >
ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyring#
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2GVerifique que la imagen existe.
cephuser@adm >
rbd -p libvirt-pool ls
26.2 Preparación del gestor de máquina virtual #
Puede utilizar libvirt
sin un gestor de máquina virtual, pero le resultará más fácil crear el primer dominio con virt-manager
.
Instale un gestor de máquina virtual.
#
zypper in virt-managerPrepare o descargue una imagen de sistema operativo del sistema que desea ejecutar de forma virtualizada.
Lance el gestor de máquina virtual.
virt-manager
26.3 Creación de una máquina virtual #
Para crear una máquina virtual con virt-manager
, realice los siguientes pasos:
Elija la conexión en la lista, haga clic con el botón derecho en ella y seleccione
(Nuevo).Para
proporcione la vía al almacenamiento actual. Especifique el tipo de sistema operativo, los valores de memoria y el de la máquina virtual, por ejemplolibvirt-virtual-machine
.Finalice la configuración e inicie la máquina virtual.
Verifique que el dominio recién creado existe con
sudo virsh list
. Si es necesario, especifique la cadena de conexión, como:virsh -c qemu+ssh://root@vm_host_hostname/system list
Id Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine runningEntre en la máquina virtual y deténgala antes de configurarla para su uso con Ceph.
26.4 Configuración de la máquina virtual #
En este capítulo nos centramos en la configuración de máquinas virtuales para su integración con Ceph mediante virsh
. Los comandos de virsh
suelen requerir privilegios de usuario root (sudo
) y, si no se tienen esos privilegios, no proporcionan resultados adecuados ni notifican de que esos privilegios son necesarios. Para obtener información sobre los comandos de virsh
, consulte man 1 virsh
(se requiere que el paquete libvirt-client esté instalado).
Abra el archivo de configuración con
virsh edit
vm-domain-name.#
virsh edit libvirt-virtual-machineEn <devices> debe haber una entrada <disk>.
<devices> <emulator>/usr/bin/qemu-system-SYSTEM-ARCH</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/path/to/image/recent-linux.img'/> <target dev='vda' bus='virtio'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk>
Sustituya
/path/to/image/recent-linux.img
por la vía a la imagen del sistema operativo.ImportanteUse
sudo virsh edit
en lugar de un editor de textos. Si edita el archivo de configuración en/etc/qemu
con un editor de textos,libvirt
libvirt puede que no reconozca el cambio. Si hay discrepancias entre el contenido del archivo XML de/etc/libvirt/qemu
y el resultado desudo virsh dumpxml
vm-domain-name, puede que la máquina virtual no funcione correctamente.Añada la imagen de Ceph RBD que ha creado anteriormente como una entrada <disk>.
<disk type='network' device='disk'> <source protocol='rbd' name='libvirt-pool/new-libvirt-image'> <host name='monitor-host' port='6789'/> </source> <target dev='vda' bus='virtio'/> </disk>
Sustituya monitor-host por el nombre de host y sustituya el nombre del repositorio y el nombre de la imagen según sea necesario. Puede añadir varias entradas <host> para los monitores de Ceph. El atributo
dev
es el nombre del dispositivo lógico que aparecerá en el directorio/dev
de la máquina virtual. El atributo de bus opcional indica el tipo de dispositivo de disco que se debe emular. Los valores válidos son específicos de cada controlador (por ejemplo ide, scsi, virtio, xen, usb o sata).Guarde el archivo.
Si el clúster de Ceph tiene la autenticación habilitada (lo está por defecto), debe generar un secreto. Abra el editor que quiera y cree un archivo denominado
secret.xml
con el contenido siguiente:<secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret>
Defina el secreto.
#
virsh secret-define --file secret.xml <uuid of secret is output here>Obtenga la clave
client.libvirt
y guarde la cadena de clave en un archivo.cephuser@adm >
ceph auth get-key client.libvirt | sudo tee client.libvirt.keyDefina el UUID del secreto.
#
virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xmlTambién debe definir el secreto manualmente añadiendo la siguiente entrada
<auth>
al elemento<disk>
que introdujo antes (sustituya el valor de uuid con el resultado de la línea de comandos del ejemplo anterior).#
virsh edit libvirt-virtual-machineA continuación, añada el elemento
<auth></auth>
al archivo de configuración de dominio:... </source> <auth username='libvirt'> <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/> </auth> <target ...
NotaEl ID del ejemplo es
libvirt
, no el nombre de Cephclient.libvirt
, como se generó en el paso 2 de la Sección 26.1, “Configuración de Ceph conlibvirt
”. Asegúrese de utilizar el componente ID del nombre de Ceph que ha generado. Si por algún motivo necesita volver a generar el secreto, deberá ejecutarsudo virsh secret-undefine
uuid antes de ejecutarsudo virsh secret-set-value
de nuevo.
26.5 Resumen #
Después de configurar la máquina virtual para usarla con Ceph, puede iniciarla. Para verificar que la máquina virtual y Ceph se comunican, puede llevar a cabo los procedimientos siguientes.
Compruebe que se está ejecutando Ceph:
cephuser@adm >
ceph healthCompruebe que se está ejecutando la máquina virtual:
#
virsh listCompruebe que la máquina virtual se comunica con Ceph. Sustituya vm-domain-name por el nombre de su dominio de máquina virtual:
#
virsh qemu-monitor-command --hmp vm-domain-name 'info block'Compruebe que el dispositivo de
&target dev='hdb' bus='ide'/>
aparece en/dev
o en/proc/partitions
:>
ls /dev>
cat /proc/partitions