cephx
libvirt
con 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.
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.
cephadm@adm >
ceph osd pool create libvirt-pool 128 128
Compruebe que el repositorio existe.
cephadm@adm >
ceph osd lspools
Cree un usuario de Ceph. El siguiente ejemplo utiliza el nombre de usuario de Ceph client.libvirt
y hace referencia a libvirt-pool
.
cephadm@adm >
ceph auth get-or-create client.libvirt mon 'profile rbd' osd \
'profile rbd pool=libvirt-pool'
Verifique que el nombre existe.
cephadm@adm >
ceph auth list
libvirt
accederá a Ceph utilizando el ID libvirt
, no el nombre de Ceph client.libvirt
. Consulte Sección 8.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 a libvirt-pool
.
La 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:
cephadm@adm >
ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyring
root #
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2G
Verifique que la imagen existe.
cephadm@adm >
rbd -p libvirt-pool ls
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.
root #
zypper in virt-manager
Prepare o descargue una imagen de sistema operativo del sistema que desea ejecutar de forma virtualizada.
Lance el gestor de máquina virtual.
virt-manager
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 libvirt-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 running
Entre en la máquina virtual y deténgala antes de configurarla para su uso con Ceph.
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 el paquete libvirt-client para instalarse).
Abra el archivo de configuración con virsh edit
vm-domain-name.
root #
virsh edit libvirt-virtual-machine
En <devices> debe haber una entrada <disk>.
<devices> <emulator>/usr/bin/qemu-system-x86_64</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.
Use sudo virsh edit
en lugar de un editor de textos. Si edita el archivo de configuración en /etc/libvirt/qemu
con un editor de textos, libvirt
puede que no reconozca el cambio. Si hay discrepancias entre el contenido del archivo XML de /etc/libvirt/qemu
y el resultado de sudo 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.
root #
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.
cephadm@adm >
ceph auth get-key client.libvirt | sudo tee client.libvirt.key
Defina el UUID del secreto.
root #
virsh secret-set-value --secret uuid of secret \
--base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml
Tambié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).
root #
virsh edit libvirt-virtual-machine
A 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 ...
El ID del ejemplo es libvirt
, no el nombre de Ceph client.libvirt
, como se generó en el paso 2 de la Sección 23.1, “Configuración de Ceph”. 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á ejecutar sudo virsh secret-undefine
uuid antes de ejecutar sudo virsh secret-set-value
de nuevo.
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:
cephadm@adm >
ceph health
Compruebe que se está ejecutando la máquina virtual:
root #
virsh list
Compruebe que la máquina virtual se comunica con Ceph. Sustituya vm-domain-name por el nombre de su dominio de máquina virtual:
root #
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
:
tux >
ls /devtux >
cat /proc/partitions