Usa VMs anidadas con clústeres de GKE Standard


En la siguiente página, se explica cómo crear clústeres de Standard de Google Kubernetes Engine (GKE) con nodos que admiten la virtualización anidada. Las VMs de Compute Engine usan instrucciones de Intel VT-x para que las VMs anidadas puedan ejecutarse en la VM subyacente de un nodo de GKE. Luego, 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 beneficien de la VM como límite de aislamiento.

Implicaciones de rendimiento reducido

Con la virtualización anidada asistida por hardware, las cargas de trabajo que se ejecutan en las VMs anidadas pueden experimentar un rendimiento reducido en comparación con las configuraciones de virtualización no anidadas. La cantidad del impacto en el rendimiento dependerá del perfil de carga de trabajo específico, incluidas las 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 el rendimiento de otras cargas de trabajo que se ejecutan en esos nodos.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Requisitos y limitaciones

Ten en cuenta la siguiente información antes de habilitar la virtualización anidada con GKE y permitir que tus Pods creen VMs anidadas:

  • Solo puedes configurar grupos de nodos con VMs anidadas en una cantidad limitada de series de máquinas de VM. Consulta la fila Nested virtualization de la comparación de series de máquinas para confirmar las series de máquinas compatibles.
  • Debes usar el tipo de imagen UBUNTU_CONTAINERD o el tipo de imagen COS_CONTAINERD con nodos que ejecutan la versión 1.28.4-gke.1083000 o una posterior.
  • Solo puedes usar la virtualización anidada con clústeres de Standard, no con clústeres de Autopilot.
  • No puedes usar el aprovisionamiento automático de nodos con grupos de nodos anidados con la virtualización habilitada.
  • No puedes usar la virtualización anidada si se aplica la restricción Inhabilitar la virtualización anidada de VMs para la política de la organización.
  • Debes configurar securityContext.privileged:true para que los Pods interactúen con las VMs anidadas.

Habilitar la virtualización anidada

Puedes habilitar la virtualización anidada cuando creas un clúster, si la habilitas para el grupo de nodos predeterminado, o cuando creas un grupo de nodos. No puedes habilitar o inhabilitar la función para un grupo de nodos existente.

En las instrucciones de las siguientes secciones, se crean grupos de nodos con nodos con la etiqueta nested-virtualization=enabled. Después de que GKE crea los nodos, puedes programar Pods que crearon VMs anidadas en la VM subyacente del nodo.

Habilita la virtualización anidada con un clúster de Standard nuevo

Crea un clúster de Standard nuevo con la virtualización anidada habilitada para 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 para 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

Reemplaza lo siguiente:

De forma opcional, verifica que la virtualización anidada esté habilitada para un nodo en el grupo de nodos.

Ahora puedes programar Pods que crean VMs anidadas en la VM subyacente del nodo.

Habilita la virtualización anidada con un grupo de nodos nuevo

Crea un grupo de nodos nuevo con la virtualización anidada habilitada para un clúster de Standard existente:

gcloud container node-pools create NODEPOOL_NAME \
    --enable-nested-virtualization \
    --node-labels=nested-virtualization=enabled \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE

Reemplaza lo siguiente:

De forma opcional, verifica que la virtualización anidada esté habilitada para un nodo en el grupo de nodos.

Ahora puedes programar Pods que crean VMs anidadas en la VM subyacente del nodo.

Programa un Pod en un nodo que admita la virtualización anidada

Para programar un Pod en un nodo con la virtualización anidada habilitada, agrega 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 configurar el Pod con privilegios a través de la configuración de securityContext.privileged:true.

¿Qué sigue?