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, como microVMs que usam Kata Containers de código aberto.
Para um tutorial sobre como usar Kata Containers de código aberto com o GKE Agent Sandbox, consulte Ativar Kata Containers no GKE.
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
- Para 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 o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se a política da organização permite a criação de VMs aninhadas.
- Analise as restrições para VMs aninhadas.
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_CONTAINERDouCOS_CONTAINERDcom 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:truepara 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:
Console
- No Google Cloud console do, acesse a página Criar um cluster do Kubernetes.
- Configure seu cluster.
- No menu de navegação, selecione default-pool em POOLS DE NÓS. Em seguida, selecione Nós.
- Na seção Configuração da máquina, escolha um tipo de máquina compatível (consulte a linha Virtualização aninhada ).
- Após a seção Reservas, marque a caixa de seleção Ativar virtualização aninhada.
- Para criar o cluster, clique em Criar.
gcloud
gcloud container clusters create CLUSTER_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=MACHINE_TYPE
Substitua:
CLUSTER_NAME: o nome do cluster.MACHINE_TYPE: um tipo de máquina compatível (consulte a linha de virtualização aninhada).
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:
Console
No Google Cloud console do, acesse a página de clusters do Kubernetes.
Para abrir a página de detalhes do cluster, clique no nome do cluster em que você quer criar um novo pool de nós com a virtualização aninhada ativada.
Configure o pool de nós.
Clique na guia Nós.
No cabeçalho da seção Pools de nós, clique em add_box Criar pool de nós gerenciado pelo usuário.
No menu de navegação, selecione Nós.
Na seção Configuração da máquina, escolha um tipo de máquina compatível (consulte a linha Virtualização aninhada ).
Após a seção Reservas, marque a caixa de seleção Ativar virtualização aninhada.
Para criar o pool de nós, clique em Criar.
gcloud
gcloud container node-pools create NODEPOOL_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE
Substitua:
NODEPOOL_NAME: o nome do pool de nós em que a virtualização aninhada está ativada.CLUSTER_NAME: o nome do cluster.MACHINE_TYPE: um tipo de máquina compatível (consulte a linha de virtualização aninhada).
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.