Usar VMs anidadas con clústeres estándar de GKE


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.

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 imagen COS_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:

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:

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.

Siguientes pasos