Virtualización

¿Qué es Nested virtualisation?

Definición

Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.

Por qué es importante Nested virtualisation

Se requiere para Proxmox VE, trabajos de CI basados en VM y algunas configuraciones de Docker. Muchos proveedores la desactivan, que es la razón habitual por la que esas cargas de trabajo fallan en otros sitios.

Nested virtualisation en la práctica

Cuando ejecutas virtualización anidada, arrancas un hipervisor dentro de un invitado KVM y pasas las extensiones de virtualización de la CPU del host. Comprobarás en /proc/cpuinfo dentro del invitado los flags svm o vmx. Si están ausentes, tu hipervisor interno recurre a la emulación por software, que puede reducir el rendimiento en un orden de magnitud. También puede que necesites habilitar el tipo de CPU "host" en lugar de un modelo genérico para obtener esos flags. Si lo haces mal, tu carga de trabajo de Proxmox o CI va lenta.

Lo que se suele malinterpretar sobre Nested virtualisation

La gente asume que la virtualización anidada solo importa para ejecutar sistemas operativos completos como Windows en una VM. La corrección: también rompe el networking overlay predeterminado de Docker y ciertos módulos del kernel, porque esos dependen de las características de virtualización dentro del invitado. Así que una carga de trabajo de contenedores puede fallar en un proveedor que deshabilite el anidamiento, incluso si nunca tuviste intención de ejecutar una VM.

Nested virtualisation — preguntas frecuentes

¿Puedo ejecutar Docker dentro de una VM anidada?

Sí, y esta es la razón más común por la que la gente necesita virtualización anidada. El networking bridge predeterminado de Docker usa iptables y módulos del kernel que pueden comportarse de manera diferente sin las extensiones de virtualización de CPU expuestas. Nuestros planes KVM incluyen virtualización anidada, así que tus contenedores Docker funcionan como se espera.

¿Cómo compruebo si la virtualización anidada está habilitada?

Dentro de tu VM, ejecuta grep -E '(svm|vmx)' /proc/cpuinfo. Si ves esos flags, el anidamiento está disponible. Si no, el hipervisor no los está exponiendo, lo que normalmente significa que el proveedor lo ha deshabilitado.

Más de virtualización

KVM
KVM es virtualización completa por hardware integrada en el kernel de Linux, lo que da a cada invitado su propio kernel y un aislamiento reforzado por hardware de otros inquilinos.
OpenVZ
OpenVZ es virtualización por contenedores en la que cada instancia comparte el kernel del host, por lo que los invitados no pueden cargar módulos del kernel ni ejecutar un sistema operativo diferente.
LXC
LXC es contenedorización nativa de Linux que aísla procesos con namespaces y cgroups mientras comparte el kernel del host.
Hipervisor
Un hipervisor es la capa de software que crea y ejecuta máquinas virtuales, asignando CPU física, memoria y E/S entre ellas.
vCPU
Una vCPU es un procesador virtual presentado a un invitado, respaldado por tiempo de planificación en un núcleo o hilo físico.
cloud-init
cloud-init es el mecanismo estándar para configurar una máquina virtual en el primer arranque, usando metadatos proporcionados por la plataforma.