Ir al contenidoIr a la navegación de la página: página anterior [tecla de acceso p]/página siguiente [tecla de acceso n]
documentation.suse.com / Documentación de SUSE Enterprise Storage 7 / Guía de administración y operaciones / Integración con herramientas de virtualización / libvirt y Ceph
Se aplica a SUSE Enterprise Storage 7

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:

  1. 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 128

    Compruebe que el repositorio existe.

    cephuser@adm > ceph osd lspools
  2. Cree un usuario de Ceph. El siguiente ejemplo utiliza el nombre de usuario de Ceph client.libvirt y hace referencia a libvirt-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 list
    Nota
    Nota: nombre de usuario o ID

    libvirt accederá a Ceph utilizando el ID libvirt, no el nombre de Ceph client.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.

  3. 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.

    Sugerencia
    Sugerencia: ubicación del archivo de anillo de claves

    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:

    cephuser@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.

    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.

  1. Instale un gestor de máquina virtual.

    root # zypper in virt-manager
  2. Prepare o descargue una imagen de sistema operativo del sistema que desea ejecutar de forma virtualizada.

  3. 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:

  1. Elija la conexión en la lista, haga clic con el botón derecho en ella y seleccione New (Nuevo).

  2. Para importar la imagen de disco existente proporcione la vía al almacenamiento actual. Especifique el tipo de sistema operativo, los valores de memoria y el nombre de la máquina virtual, por ejemplo libvirt-virtual-machine.

  3. Finalice la configuración e inicie la máquina virtual.

  4. 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
  5. Entre 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 el paquete libvirt-client para instalarse).

  1. Abra el archivo de configuración con virsh edit vm-domain-name.

    root # virsh edit libvirt-virtual-machine
  2. En <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.

    Importante
    Importante

    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.

  3. 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).

  4. Guarde el archivo.

  5. 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>
  6. Defina el secreto.

    root # virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. 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.key
  8. 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 ...
    Nota
    Nota

    El ID del ejemplo es libvirt, no el nombre de Ceph client.libvirt, como se generó en el paso 2 de la Sección 26.1, “Configuración de Ceph con libvirt. 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.

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.

  1. Compruebe que se está ejecutando Ceph:

    cephuser@adm > ceph health
  2. Compruebe que se está ejecutando la máquina virtual:

    root # virsh list
  3. 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'
  4. Compruebe que el dispositivo de &target dev='hdb' bus='ide'/> aparece en /dev o en /proc/partitions:

    tux > ls /dev
    tux > cat /proc/partitions