Cómo habilitar la virtualización KVM anidada

Shutterstock.com/Eugene Kouzmenok

KVM es una tecnología de virtualización que está integrada en el kernel de Linux. Un sistema con KVM habilitado puede actuar como un hipervisor de tipo 1, siempre que el procesador lo admita.

Hay varias formas de crear una máquina virtual utilizando KVM. QEMU puede usar KVM y libvirt y su interfaz de usuario de Virtual Machine Manager proporciona una interfaz conveniente a su alrededor.

KVM se puede utilizar para crear máquinas virtuales anidadas en hardware compatible. Esto le permite crear máquinas virtuales dentro de máquinas virtuales para adaptarse a casos de uso más complejos. Considere un entorno de desarrollo virtualizado que se ejecute en su host. Es posible que deba ejecutar emuladores de dispositivos virtuales dentro de ese entorno, anidado a dos niveles de profundidad del hardware de metal desnudo.

Este artículo le mostrará cómo configurar la virtualización KVM anidada y probar que funciona. Antes de continuar, compruebe que tiene disponible una instalación KVM en funcionamiento y que está familiarizado con la creación de nuevas máquinas virtuales KVM.

Índice de contenidos
  1. Comprobar si la virtualización anidada está habilitada
  2. Habilitación de la virtualización anidada
  3. Activación de la virtualización anidada para un invitado
  4. Comprobación de un nido de invitados
  5. Limitaciones
  6. Resumen

Comprobar si la virtualización anidada está habilitada

La virtualización anidada es compatible con la mayoría de las familias de procesadores modernas que ofrecen virtualización de hardware. Puede verificar si el anidamiento ya está habilitado en su hipervisor usando el cat comando para leer una de las siguientes rutas, dependiendo de si tiene un sistema Intel o AMD:

# Intel
$ cat /sys/module/kvm_intel/parameters/nested

# AMD
$ cat /sys/module/kvm_amd/parameters/nested

La salida debe ser Y o N. Viendo Y significa que está listo para comenzar: la virtualización anidada ya está activada. Puede saltar a la sección "Activación de la virtualización anidada para un invitado" a continuación. Si tú ves N en su terminal, es hora de habilitar el anidamiento en el módulo del kernel de KVM.

Habilitación de la virtualización anidada

El anidamiento está controlado por un parámetro del módulo del kernel KVM. Puede cambiar el parámetro editando /etc/modprobe.d/qemu-system-x86.conf. En algunos sistemas, este archivo podría llamarse /etc/modprobe.d/kvm.conf.

Probablemente verá una sola línea similar a una de estas:

options kvm_intel
options kvm_intel nested=0

options kvm_amd
options kvm_amd nested=0

Cualquiera de estas variantes significa que KVM está activo pero el anidamiento está deshabilitado.

Para habilitar el anidamiento, simplemente agregue o cambie el nested parámetro por lo que tiene 1 como su valor:

# Intel systems only
options kvm_intel nested=1

# AMD systems only
options kvm_amd nested=1

A continuación, debe volver a cargar el módulo del kernel KVM para aplicar su cambio. Debe detener cualquier máquina virtual en ejecución antes de hacer esto.

# Unload the module
$ sudo modprobe -r kvm_intel

# Reload the module with new settings
$ sudo modprobe kvm_intel

Sustituto kvm_amd en vez de kvm_intel si tienes un procesador AMD.

Ahora repita el comando anterior para verificar si la anidación está habilitada. deberías conseguir Y como salida.

# Intel
$ cat /sys/module/kvm_intel/parameters/nested
Y

# AMD
$ cat /sys/module/kvm_amd/parameters/nested
Y

Este método habilita permanentemente la virtualización anidada. Persistirá en los reinicios hasta que elimine nested=1 de los parámetros del módulo KVM.

Activación de la virtualización anidada para un invitado

Las máquinas virtuales invitadas solo pueden usar la virtualización anidada cuando están configuradas con un modo de CPU que lo admita. El huésped necesita una definición de CPU que coincida exactamente con el hardware físico de su host.

La mayoría de los invitados trabajarán cuando el modo de CPU esté configurado en host-model, que suele ser el predeterminado. Esto significa que el invitado recibe una definición de CPU similar a la de su anfitrión. En algunos casos, es posible que necesite usar el host-passthrough modo que pasa exactamente por todas las características de la CPU host.

Puede verificar y cambiar el tipo de CPU de un invitado recuperando su manifiesto con virsh. Primero ejecute el virsh Comando para iniciar un shell interactivo. Luego escribe list --all para recuperar todas sus máquinas virtuales:

virsh # list --all
 Id   Name          State
------------------------------
 -    ubuntu22.04   shut off
 -    win10         shut off

siguiente carrera edit <vm-name> para abrir el manifiesto de una máquina virtual con nombre:

virsh # edit ubuntu22.04

Dentro del archivo, busque la línea que comienza con <cpu mode=. Cámbialo por uno de estos:

<cpu mode="host-model" check='partial' />
<cpu mode="host-passthrough" check='none' />

Guarde y cierre el archivo, luego escriba exit en el caparazón virsh para cerrarlo. El invitado ahora debería estar listo para iniciar sus propios invitados anidados. Intente cambiar de modo si parece haber un problema.

Comprobación de un nido de invitados

La mayoría de los sistemas operativos pueden decirle si pueden crear una máquina virtual. Ejecute el siguiente comando dentro de su VM para verificar si un invitado de Linux tiene acceso a la virtualización:

cat /proc/cpuinfo | grep "svm|vmx"

La virtualización está disponible si obtiene algún resultado con svm o vmx resaltado en rojo. SVM aparecerá en las máquinas AMD; Aparece VMX para Intel.

Ahora instale una tecnología de virtualización dentro del huésped. Debería descubrir que puede iniciar una nueva máquina virtual anidada. Aquí hay una captura de pantalla que muestra una máquina virtual Ubuntu que ejecuta un invitado Alpine usando KVM anidado:

una imagen que muestra máquinas virtuales KVM anidadas

Limitaciones

Los invitados anidados vienen con algunas limitaciones. Algunas funciones de KVM dejan de estar disponibles para los invitados que han iniciado una máquina virtual anidada. No podrá migrar, guardar ni cargar estas máquinas virtuales hasta que se detenga la máquina virtual anidada.

El efecto real de intentar realizar una de estas operaciones no está definido. Algunos sistemas podrían soportarlo; otros pueden causar un kernel panic. Intente siempre cerrar sus invitados anidados antes de realizar una operación en las máquinas virtuales que se encuentran por encima de ellos en la cadena.

Resumen

La virtualización anidada proporciona más potencia y flexibilidad. Puede aislar tecnologías que necesitan su propia virtualización para funcionar, como IDE que inician emuladores de dispositivos.

Hacer que el anidamiento funcione con KVM normalmente es sencillo. Cualquier solución de problemas debe comenzar comprobando el nested El parámetro está habilitado para su módulo kernel KVM. Después de eso, verifique el modelo de CPU asignado a su invitado y verifique que esté usando un hipervisor de segundo nivel compatible dentro de la VM.

Descubre más contenido

Subir Change privacy settings