Usar VMs aninhadas com clusters do GKE Standard


Na página a seguir, explicamos como criar clusters do Google Kubernetes Engine (GKE) Standard com nós compatíveis com virtualização aninhada. As VMs do Compute Engine usam as instruções do Intel VT-x para que as VMs aninhadas possam ser executadas em uma VM subjacente do nó do GKE. Em seguida, é possível implantar pods que usam ferramentas como o QEMU para criar VMs aninhadas. É possível usar VMs aninhadas para executar cargas de trabalho especializadas, como emuladores do Android, ou cargas de trabalho que se beneficiam da VM como limite de isolamento.

Implicações do desempenho reduzido

Com a virtualização aninhada assistida por hardware, as cargas de trabalho em execução nas VMs aninhadas podem ter desempenho reduzido em comparação com as configurações de virtualização não aninhadas. O impacto no desempenho depende do perfil específico da carga de trabalho, incluindo as características de uso da memória e de E/S.

Além disso, a criação de VMs aninhadas nas VMs subjacentes dos nós do GKE pode afetar o desempenho de outras cargas de trabalho em execução nesses nós.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos e limitações

Considere as informações a seguir antes de ativar a virtualização aninhada com o GKE e permitir que seus pods criem VMs aninhadas:

  • Só é possível configurar pools de nós com VMs aninhadas com um número limitado de séries de máquinas de VM. Consulte a linha Virtualização aninhada da Comparação de séries de máquinas para confirmar as séries de máquinas compatíveis.
  • É preciso usar o tipo de imagem UBUNTU_CONTAINERD ou COS_CONTAINERD com nós que executam a versão 1.28.4-gke.1083000 ou posterior.
  • Só é possível usar a virtualização aninhada com clusters do Standard, não os clusters do Autopilot.
  • Não é possível usar o provisionamento automático de nós com pools de nós que têm a virtualização aninhada ativada.
  • Não será possível usar a virtualização aninhada se a restrição Desativar virtualização aninhada da VM for aplicada à política da organização.
  • Defina securityContext.privileged:true para que os pods interajam com VMs aninhadas.

Ativar virtualização aninhada

É possível ativar a virtualização aninhada ao criar um cluster, ativando-o para o pool de nós padrão, ou ao criar um pool de nós. Não é possível ativar ou desativar o recurso para um pool de nós que já existe.

As instruções nas próximas seções criam pools de nós com o rótulo nested-virtualization=enabled. Depois que o GKE cria os nós, é possível programar pods que criaram VMs aninhadas na VM subjacente do nó.

Ativar a virtualização aninhada com um novo cluster do Standard

Crie um novo cluster do Standard com a virtualização aninhada ativada para o pool de nós padrão. O GKE só cria o pool de nós padrão com a virtualização aninhada ativada. O GKE não ativa o recurso automaticamente para todos os novos pools de nós criados para o cluster:

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

Substitua:

Opcionalmente, verifique se a virtualização aninhada está ativada para um nó no pool de nós.

Agora é possível programar pods que criam VMs aninhadas na VM subjacente do nó.

Ativar a virtualização aninhada com um novo pool de nós

Crie um novo pool de nós com virtualização aninhada ativada para um cluster do Standard que já existe:

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

Substitua:

Opcionalmente, verifique se a virtualização aninhada está ativada para um nó no pool de nós.

Agora é possível programar pods que criam VMs aninhadas na VM subjacente do nó.

Programar um pod para um nó compatível com virtualização aninhada

Para programar um pod em um nó com virtualização aninhada ativada, adicione o seguinte seletor de nós à especificação:

nodeSelector:
  nested-virtualization: enabled

Além disso, para que o pod se conecte a uma VM aninhada, defina o pod como privilegiado configurando securityContext.privileged:true.

A seguir