Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 11. Gestión del almacenamiento de las máquinas virtuales

Puede gestionar el almacenamiento de las máquinas virtuales mediante la CLI o la consola web.

Esta documentación proporciona información sobre cómo gestionar el almacenamiento de las máquinas virtuales mediante el comando virsh.

11.1. Comprender el almacenamiento de las máquinas virtuales

Las siguientes secciones proporcionan información sobre el almacenamiento para las máquinas virtuales (VM), incluyendo información sobre los pools de almacenamiento, los volúmenes de almacenamiento y cómo se utilizan para proporcionar almacenamiento a las VM.

11.1.1. Almacenamiento de máquinas virtuales

A continuación se ofrece información sobre cómo se utilizan los pools de almacenamiento y los volúmenes de almacenamiento para crear almacenamiento para las máquinas virtuales (VM).

Un storage pool es una cantidad de almacenamiento gestionada por el host y reservada para su uso por las VMs. Storage volumes puede crearse a partir del espacio de los pools de almacenamiento. Cada volumen de almacenamiento puede ser asignado a una VM como un dispositivo de bloque, como un disco, en un bus de huésped.

Los grupos de almacenamiento y los volúmenes se gestionan mediante libvirt. Con el protocolo remoto libvirt, se pueden gestionar todos los aspectos del almacenamiento de las máquinas virtuales. Estas operaciones pueden realizarse en un host remoto. Como resultado, una aplicación de gestión que utiliza libvirt, como la consola web de RHEL, puede utilizarse para realizar todas las tareas necesarias para configurar el almacenamiento de una VM.

La API libvirt puede utilizarse para consultar la lista de volúmenes del pool de almacenamiento o para obtener información sobre la capacidad, la asignación y el almacenamiento disponible en el pool de almacenamiento. Un volumen de almacenamiento en el pool de almacenamiento puede ser consultado para obtener información como la asignación y la capacidad, que puede ser diferente para los volúmenes dispersos.

Para los grupos de almacenamiento que lo soportan, la API libvirt puede utilizarse para crear, clonar, redimensionar y eliminar volúmenes de almacenamiento. Las API también pueden utilizarse para cargar datos en volúmenes de almacenamiento, descargar datos de volúmenes de almacenamiento o borrar datos de volúmenes de almacenamiento.

Una vez que se inicia un pool de almacenamiento, se puede asignar un volumen de almacenamiento a una VM utilizando el nombre del pool de almacenamiento y el nombre del volumen de almacenamiento en lugar de la ruta del host al volumen en los archivos de configuración XML de la VM.

11.1.2. Piscinas de almacenamiento

Un pool de almacenamiento es un archivo, directorio o dispositivo de almacenamiento, gestionado por libvirt para proporcionar almacenamiento a las máquinas virtuales (VM). Los pools de almacenamiento se dividen en volúmenes de almacenamiento que almacenan las imágenes de las VMs o se adjuntan a las VMs como almacenamiento adicional. Varias máquinas virtuales pueden compartir el mismo pool de almacenamiento, lo que permite una mejor asignación de los recursos de almacenamiento.

Los pools de almacenamiento pueden ser persistentes o transitorios:

  • Un grupo de almacenamiento persistente sobrevive a un reinicio del sistema de la máquina anfitriona.
  • Un pool de almacenamiento transitorio sólo existe hasta que el host se reinicia.

El comando virsh pool-define se utiliza para crear un pool de almacenamiento persistente, y el comando virsh pool-create se utiliza para crear un pool de almacenamiento transitorio.

Tipos de almacenamiento del pool de almacenamiento

Los pools de almacenamiento pueden ser locales o en red (compartidos):

  • Local storage pools

    Los grupos de almacenamiento local están conectados directamente al servidor anfitrión. Incluyen los directorios locales, los discos conectados directamente, las particiones físicas y los grupos de volúmenes de Logical Volume Management (LVM) en dispositivos locales.

    Los grupos de almacenamiento local son útiles para el desarrollo, las pruebas y las pequeñas implantaciones que no requieren migración o un gran número de máquinas virtuales.

  • Networked (shared) storage pools

    Los grupos de almacenamiento en red incluyen dispositivos de almacenamiento compartidos a través de una red utilizando protocolos estándar.

Ejemplo de uso del pool de almacenamiento

Para ilustrar las opciones disponibles para la gestión de pools de almacenamiento, a continuación se describe un ejemplo de servidor NFS que utiliza mount -t nfs nfs.example.com:/path/to/share /path/to/data.

Un administrador de almacenamiento podría definir un Pool de Almacenamiento NFS en el host de virtualización para describir la ruta del servidor exportado y la ruta de destino del cliente. Esto permitirá a libvirt realizar el montaje de forma automática cuando se inicie libvirt o según sea necesario mientras se ejecute libvirt. Los archivos con el directorio exportado del servidor NFS aparecen como volúmenes de almacenamiento dentro del pool de almacenamiento NFS.

Cuando el volumen de almacenamiento se añade a la VM, el administrador no necesita añadir la ruta de destino al volumen. Sólo necesita añadir el pool de almacenamiento y el volumen de almacenamiento por su nombre. Por lo tanto, si la ruta del cliente de destino cambia, no afecta a la VM.

Cuando se inicia el pool de almacenamiento, libvirt monta el disco compartido en el directorio especificado, igual que si el administrador del sistema iniciara la sesión y ejecutara mount nfs.example.com:/path/to/share /vmdata. Si el pool de almacenamiento está configurado para autoiniciarse, libvirt se asegura de que el disco compartido NFS se monte en el directorio especificado cuando se inicie libvirt.

Una vez iniciado el pool de almacenamiento, los archivos del disco compartido NFS se reportan como volúmenes de almacenamiento, y las rutas de los volúmenes de almacenamiento pueden ser consultadas usando la API libvirt. Las rutas de los volúmenes de almacenamiento pueden entonces copiarse en la sección de la definición XML de una VM que describe el almacenamiento de origen para los dispositivos de bloque de la VM. En el caso de NFS, una aplicación que utilice la API libvirt puede crear y eliminar volúmenes de almacenamiento en el pool de almacenamiento (archivos en el recurso compartido NFS) hasta el límite del tamaño del pool (la capacidad de almacenamiento del recurso compartido).

Detener (destruir) un pool de almacenamiento elimina la abstracción de los datos, pero mantiene los datos intactos.

No todos los tipos de pool de almacenamiento soportan la creación y eliminación de volúmenes. Detener el pool de almacenamiento (pool-destroy) deshace la operación de inicio, en este caso, desmontar el recurso compartido NFS. Los datos del recurso compartido no se modifican con la operación de destrucción, a pesar de lo que sugiere el nombre del comando. Para más detalles, consulte man virsh.

Tipos de grupos de almacenamiento admitidos y no admitidos

La siguiente es una lista de los tipos de pool de almacenamiento soportados por RHEL:

  • Grupos de almacenamiento basados en directorios
  • Grupos de almacenamiento en disco
  • Grupos de almacenamiento basados en particiones
  • Grupos de almacenamiento GlusterFS
  • grupos de almacenamiento basados en iSCSI
  • Grupos de almacenamiento basados en LVM
  • Grupos de almacenamiento basados en NFS
  • Grupos de almacenamiento basados en SCSI con dispositivos vHBA
  • Grupos de almacenamiento basados en rutas múltiples
  • Grupos de almacenamiento basados en RBD

La siguiente es una lista de tipos de pool de almacenamiento libvirt que no son compatibles con RHEL:

  • Grupos de almacenamiento basados en Sheepdog
  • Grupos de almacenamiento basados en Vstorage
  • Grupos de almacenamiento basados en ZFS

11.1.3. Volúmenes de almacenamiento

Los pools de almacenamiento se dividen en storage volumes. Los volúmenes de almacenamiento son abstracciones de particiones físicas, volúmenes lógicos LVM, imágenes de disco basadas en archivos y otros tipos de almacenamiento manejados por libvirt. Los volúmenes de almacenamiento se presentan a las VMs como dispositivos de almacenamiento local, como discos, independientemente del hardware subyacente.

En la máquina anfitriona, se hace referencia a un volumen de almacenamiento por su nombre y un identificador para el grupo de almacenamiento del que deriva. En la línea de comandos virsh, esto toma la forma --pool storage_pool volume_name.

Por ejemplo, para mostrar información sobre un volumen llamado firstimage en el grupo guest_images.

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB