Ativar virtualização aninhada


Neste documento, descrevemos como ativar a virtualização aninhada em uma instância de máquina virtual (VM) e como confirmar que é possível criar uma VM aninhada. Ative a virtualização aninhada em uma VM usando um dos seguintes métodos:

  • Recomendado. Ative a virtualização aninhada diretamente em uma VM nova ou atual definindo o campo enableNestedVirtualization como true ao criar a VM ou atualizando a VM. Esse é o método recomendado porque não exige que você crie uma imagem personalizada ou use a chave de licença especial.

  • Ative a virtualização aninhada usando a chave de licença especial criando um disco de inicialização, criando uma imagem personalizada com a chave de licença de virtualização aninhada especial e criando uma VM que use a imagem personalizada.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Selecione a guia para como planeja usar as amostras nesta página:

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Ativar a virtualização aninhada diretamente em uma nova VM

Ative a virtualização aninhada diretamente em uma VM usando o procedimento a seguir.

gcloud

Crie uma VM L1 com virtualização aninhada ativada usando o seguinte comando gcloud compute instances create:

gcloud compute instances create VM_NAME \
  --enable-nested-virtualization \
  --zone=ZONE \
  --min-cpu-platform="Intel Haswell"

Substitua:

  • VM_NAME: o nome da nova VM L1 com a virtualização aninhada ativada.

  • ZONE: a zona da nova VM L1 com a virtualização aninhada ativada

REST

Crie uma VM L1 com virtualização aninhada ativada usando o seguinte método instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  ...
  "name": "VM_NAME",
  ...
  "minCpuPlatform": "Intel Haswell",
  "advancedMachineFeatures": {
    "enableNestedVirtualization": true
  },
  ...
}

Substitua:

  • PROJECT_ID: o ID do projeto;

  • ZONE: a zona da nova VM L1 com a virtualização aninhada ativada

  • VM_NAME: o nome da nova VM L1 com a virtualização aninhada ativada.

Ativar a virtualização aninhada diretamente em uma VM

Ative a virtualização aninhada em uma VM atual usando o seguinte procedimento:

gcloud

  1. Exporte as propriedades da VM usando o seguinte comando gcloud compute instances export:

    gcloud compute instances export VM_NAME \
      --destination=YAML_FILE_PATH \
      --zone=ZONE
    

    Substitua:

    • VM_NAME: o nome da VM da qual as propriedades serão exportadas

    • YAML_FILE_PATH: o caminho e o nome de um arquivo .yaml em que os dados de configuração exportados serão salvos

    • ZONE: a zona que contém a VM.

  2. No arquivo de configuração da VM que foi salvo em FILE_PATH, atualize o valor de enableNestedVirtualization. Se o valor não estiver no arquivo, adicione o seguinte:

    advancedMachineFeatures:
      enableNestedVirtualization: true
    
  3. Atualize a VM com o valor de enableNestedVirtualization usando o seguinte comando gcloud compute instances update-from-file:

    gcloud compute instances update-from-file VM_NAME \
      --source=FILE_PATH \
      --most-disruptive-allowed-action=RESTART \
      --zone=ZONE
    

    Substitua:

    • VM_NAME: o nome da VM a ser atualizada.

    • FILE_PATH: o caminho para o arquivo de configuração da VM atualizado.

    • ZONE: a zona que contém a VM a ser atualizada.

REST

Atualize o valor de enableNestedVirtualization usando o seguinte método instances.update:

PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART

{
  ⋮
  "advanced_machine_features": {
    ⋮
    "enableNestedVirtualization": "true"
  },
  ⋮
}

Substitua:

  • PROJECT_ID: o ID do projeto

  • ZONE: a zona que contém a VM.

  • VM_NAME: o nome da VM da qual exportar as propriedades

Ativar a virtualização aninhada usando a chave de licença especial

Para ativar a virtualização aninhada na VM, crie uma imagem personalizada com uma chave de licença especial que ativa VMX na VM L1. A chave de licença não gera cobrança adicional.

  1. Crie um disco de inicialização a partir de uma imagem pública ou de uma imagem personalizada. O exemplo a seguir usa debian-cloud para o projeto de imagem e debian-10 para a família de imagens. Se você já tiver uma instância de VM com um disco atual, pule esta etapa.

    gcloud

    gcloud compute disks create DISK_NAME \
      --zone=ZONE \
      --image-project=debian-cloud \
      --image-family=debian-10
    

    Substitua:

    • DISK_NAME: o nome do novo disco.

    • ZONE: a zona em que o disco será criado

    REST

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    
    {
      ...
      "name": "DISK_NAME",
      "sourceImage": "projects/debian-cloud/global/images/family/debian-10",
      ...
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto;

    • ZONE: a zona em que o disco será criado

    • DISK_NAME: o nome do novo disco.

  2. Crie uma imagem personalizada com a chave de licença especial necessária para a virtualização aninhada.

    gcloud

    gcloud compute images create IMAGE_NAME \
      --source-disk DISK_NAME \
      --source-disk-zone ZONE \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    

    Substitua:

    • IMAGE_NAME: o nome da nova imagem

    • DISK_NAME: o nome do disco criado anteriormente.

    • ZONE: a zona em que a imagem será criada

    REST

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
    
    {
      ...
      "licenses": ["projects/vm-options/global/licenses/enable-vmx"],
      "name": "IMAGE_NAME",
      "sourceDisk": "zones/ZONE/disks/DISK_NAME",
      ...
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto;

    • IMAGE_NAME: o nome da nova imagem

    • ZONE: a zona em que a imagem será criada

    • DISK_NAME: o nome do disco criado anteriormente.

  3. Se quiser, exclua o disco de origem depois de criar a imagem com a licença especial.

    gcloud

    gcloud compute disks delete DISK_NAME --zone=ZONE
    

    Substitua:

    • DISK_NAME: o nome do disco que será excluído.

    • ZONE: a zona que contém o disco a ser excluído.

    REST

    DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME
    

    Substitua:

    • PROJECT_ID: o ID do projeto;

    • ZONE: a zona que contém o disco a ser excluído.

    • DISK_NAME: o nome do disco que será excluído.

  4. Crie uma VM que use a nova imagem com a licença especial. A plataforma mínima de CPU precisa ser "Intel Haswell".

    gcloud

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --min-cpu-platform "Intel Haswell" \
        --image IMAGE_NAME
    

    Substitua:

    • VM_NAME: O nome da VM.

    • ZONE: a zona em que a VM será criada

    • IMAGE_NAME: o nome da imagem criada anteriormente.

    REST

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    
    {
      ...
      "name": "VM_NAME",
      "minCpuPlatform": "Intel Haswell",
      "disks": [
        {
          "initializeParams": {
            "sourceImage": "IMAGE_NAME"
          }
        }
      ]
      ...
    }
    
    

    Substitua:

    • PROJECT_ID: o ID do projeto;

    • VM_NAME: O nome da VM.

    • ZONE: a zona em que a VM será criada

    • IMAGE_NAME: o nome da imagem criada anteriormente.

Confirmar que a virtualização aninhada está ativada na VM

  1. Conecte-se à instância de VM.

    gcloud compute ssh VM_NAME
    

    Substitua VM_NAME pelo nome da VM a ser conectada.

  2. Confirme se a virtualização aninhada está ativada. Qualquer resposta além de 0 confirma que a virtualização aninhada está ativada.

    grep -cw vmx /proc/cpuinfo
    

A seguir