En la página siguiente se explica cómo crear clústeres estándar de Google Kubernetes Engine (GKE) con nodos que admitan la virtualización anidada. Las VMs de Compute Engine usan las instrucciones Intel VT-x para que las VMs anidadas puedan ejecutarse en la VM subyacente de un nodo de GKE. Después, puedes implementar pods que usen herramientas como QEMU para crear VMs anidadas. Puedes usar VMs anidadas para ejecutar cargas de trabajo especializadas, como emuladores de Android, o cargas de trabajo que se benefician de la VM como límite de aislamiento.
Implicaciones de rendimiento reducidas
Con la virtualización anidada asistida por hardware, las cargas de trabajo que se ejecutan en las máquinas virtuales anidadas pueden experimentar una reducción del rendimiento en comparación con las configuraciones de virtualización no anidadas. El impacto en el rendimiento dependerá del perfil de carga de trabajo específico, incluidas sus características de uso de E/S y memoria.
Además, crear VMs anidadas en las VMs subyacentes de los nodos de GKE puede afectar al rendimiento de otras cargas de trabajo que se ejecuten en esos nodos.
Antes de empezar
Antes de empezar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
- Asegúrate de que la política de tu organización permita crear VMs anidadas.
- Consulta las restricciones de las máquinas virtuales anidadas.
Requisitos y limitaciones
Tenga en cuenta la siguiente información antes de habilitar la virtualización anidada con GKE y permitir que sus pods creen VMs anidadas:
- Solo puedes configurar grupos de nodos con VMs anidadas con un número limitado de series de máquinas de VMs. Consulta la fila Virtualización anidada de la comparación de series de máquinas para confirmar las series de máquinas admitidas.
- Debes usar el tipo de imagen
UBUNTU_CONTAINERD
o el tipo de imagenCOS_CONTAINERD
con nodos que ejecuten la versión 1.28.4-gke.1083000 o una posterior. - Solo puedes usar la virtualización anidada con clústeres estándar, no con clústeres Autopilot.
- No puedes usar el aprovisionamiento automático de nodos con grupos de nodos que tengan habilitada la virtualización anidada.
- No puedes usar la virtualización anidada si se aplica la restricción Inhabilitar la virtualización anidada de la VM en tu política de organización.
- Debes definir
securityContext.privileged:true
para que los pods interactúen con las VMs anidadas.
Habilitar la virtualización anidada
Puedes habilitar la virtualización anidada al crear un clúster (habilitándola en el grupo de nodos predeterminado) o al crear un grupo de nodos. No puedes habilitar ni inhabilitar la función en un grupo de nodos que ya tengas.
Las instrucciones de las secciones siguientes crean grupos de nodos con nodos que tienen la etiqueta nested-virtualization=enabled
. Una vez que GKE crea los nodos, puedes programar pods que hayan creado VMs anidadas en la VM subyacente del nodo.
Habilitar la virtualización anidada con un clúster Standard nuevo
Crea un clúster estándar con la virtualización anidada habilitada en el grupo de nodos predeterminado. GKE solo crea el grupo de nodos predeterminado con la virtualización anidada habilitada. GKE no habilita automáticamente la función en todos los grupos de nodos nuevos creados para el clúster:
gcloud container clusters create CLUSTER_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=MACHINE_TYPE
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster.MACHINE_TYPE
: un tipo de máquina compatible (consulta la fila Virtualización anidada).
También puedes comprobar que la virtualización anidada esté habilitada en un nodo del grupo de nodos.
Ahora puede programar pods que creen VMs anidadas en la VM subyacente del nodo.
Habilitar la virtualización anidada con un nuevo grupo de nodos
Crea un grupo de nodos con la virtualización anidada habilitada en un clúster Standard:
gcloud container node-pools create NODEPOOL_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE
Haz los cambios siguientes:
NODEPOOL_NAME
: el nombre del grupo de nodos en el que está habilitada la virtualización anidada.CLUSTER_NAME
: el nombre del clúster.MACHINE_TYPE
: Un tipo de máquina compatible (consulta la fila Virtualización anidada).
También puedes comprobar que la virtualización anidada esté habilitada en un nodo del grupo de nodos.
Ahora puede programar pods que creen VMs anidadas en la VM subyacente del nodo.
Programar un pod en un nodo que admita la virtualización anidada
Para programar un pod en un nodo con la virtualización anidada habilitada, añade el siguiente selector de nodos a la especificación:
nodeSelector:
nested-virtualization: enabled
Además, para que el pod se conecte con una VM anidada, debes definir el pod como privilegiado configurando securityContext.privileged:true
.