Use VMs aninhadas com clusters padrão do GKE


A página seguinte explica como pode criar clusters padrão do Google Kubernetes Engine (GKE) com nós que suportam a virtualização aninhada. As VMs do Compute Engine usam instruções Intel VT-x para que as VMs aninhadas possam ser executadas na VM subjacente de um nó do GKE. Em seguida, pode implementar pods que usam ferramentas como o QEMU para criar VMs aninhadas. Pode usar VMs aninhadas para executar cargas de trabalho especializadas, como emuladores do Android, ou cargas de trabalho que beneficiam da VM como limite de isolamento.

Implicações de desempenho reduzidas

Com a virtualização aninhada assistida por hardware, as cargas de trabalho executadas nas VMs aninhadas podem ter um desempenho inferior em comparação com as configurações de virtualização não aninhadas. A quantidade de impacto no desempenho depende do perfil de carga de trabalho específico, incluindo as respetivas características de utilização de 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, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Requisitos e limitações

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

  • Só pode configurar pools de nós com VMs aninhadas com um número limitado de séries de máquinas de VMs. Consulte a linha Virtualização aninhada da comparação das séries de máquinas para confirmar as séries de máquinas suportadas.
  • Tem de usar o tipo de imagem UBUNTU_CONTAINERD ou o tipo de imagem COS_CONTAINERD com nós que executam a versão 1.28.4-gke.1083000 ou posterior.
  • Só pode usar a virtualização aninhada com clusters padrão e não com clusters do Autopilot.
  • Não pode usar o aprovisionamento automático de nós com pools de nós com virtualização aninhada ativada.
  • Não pode usar a virtualização aninhada se a restrição Desativar a virtualização aninhada de VMs for aplicada à política da sua organização.
  • Tem de definir securityContext.privileged:true para que os pods interajam com VMs aninhadas.

Ative a virtualização aninhada

Pode ativar a virtualização aninhada quando cria um cluster, ativando-a para o conjunto de nós predefinido, ou quando cria um conjunto de nós. Não pode ativar nem desativar a funcionalidade para um conjunto de nós existente.

As instruções nas secções seguintes criam pools de nós com nós com a etiqueta nested-virtualization=enabled. Depois de o GKE criar os nós, pode agendar pods que criaram VMs aninhadas na VM subjacente do nó.

Ative a virtualização aninhada com um novo cluster padrão

Crie um novo cluster padrão com a virtualização aninhada ativada para o node pool predefinido. O GKE só cria o conjunto de nós predefinido com a virtualização aninhada ativada. O GKE não ativa automaticamente a funcionalidade para todos os novos conjuntos 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 o seguinte:

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

Agora, pode agendar pods que criam VMs aninhadas na VM subjacente do nó.

Ative a virtualização aninhada com um novo conjunto de nós

Crie um novo node pool com a virtualização aninhada ativada para um cluster padrão existente:

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

Substitua o seguinte:

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

Agora, pode agendar pods que criam VMs aninhadas na VM subjacente do nó.

Agende um pod para um nó que suporte a virtualização aninhada

Para agendar um Pod num nó com a virtualização aninhada ativada, adicione o seletor de nós seguinte à especificação:

nodeSelector:
  nested-virtualization: enabled

Além disso, para que o Pod se ligue a uma VM aninhada, tem de definir o Pod como privilegiado configurando securityContext.privileged:true.

O que se segue?