Ative a virtualização aninhada


Este documento descreve como ativar a virtualização aninhada numa instância de máquina virtual (VM) e como confirmar que pode criar uma VM aninhada. Ative a virtualização aninhada numa VM através de um dos seguintes métodos:

  • Recomendado. Ative a virtualização aninhada diretamente numa VM nova ou existente definindo o campo enableNestedVirtualization como true ao criar a VM ou atualizando a VM. Este é o método recomendado porque não requer que crie uma imagem personalizada nem use a chave de licença especial.

  • Ative a virtualização aninhada usando a chave de licença especial. Para tal, crie um disco de arranque, crie uma imagem personalizada com a chave de licença especial de virtualização aninhada e, em seguida, crie uma VM que use a imagem personalizada.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Ative a virtualização aninhada diretamente numa nova VM

Ative a virtualização aninhada diretamente numa VM através do seguinte procedimento.

gcloud

Crie uma VM L1 com a virtualização aninhada ativada através do seguinte gcloud compute instances createcomando:

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

Substitua o seguinte:

  • VM_NAME: o nome da nova VM de nível 1 com a virtualização aninhada ativada

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

REST

Crie uma VM de nível 1 com a virtualização aninhada ativada através do seguinte instances.insertmétodo:

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto

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

  • VM_NAME: o nome da nova VM de nível 1 com a virtualização aninhada ativada

Ative a virtualização aninhada diretamente numa VM existente

Ative a virtualização aninhada numa VM existente através do seguinte procedimento.

gcloud

  1. Exporte as propriedades da VM através do seguinte gcloud compute instances exportcomando:

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

    Substitua o seguinte:

    • VM_NAME: o nome da VM a partir da qual exportar propriedades

    • YAML_FILE_PATH: o caminho e o nome do ficheiro de um ficheiro .yaml no qual guardar os dados de configuração exportados

    • ZONE: a zona que contém a VM

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

    advancedMachineFeatures:
      enableNestedVirtualization: true
    
  3. Atualize a VM com o valor de enableNestedVirtualization através do 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 o seguinte:

    • VM_NAME: o nome da VM a atualizar

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

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

REST

Atualize o valor de enableNestedVirtualization através do seguinte instances.update método:

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 o seguinte:

  • PROJECT_ID: o ID do projeto

  • ZONE: a zona que contém a VM

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

Ative a virtualização aninhada através da chave de licença especial

Pode ativar a virtualização aninhada na VM criando uma imagem personalizada com uma chave de licença especial que ativa o VMX na VM de nível 1. A chave de licença não incorre em custos adicionais.

  1. Crie um disco de arranque a partir de uma imagem pública ou de uma imagem personalizada. O exemplo seguinte usa debian-cloud para o projeto de imagem e debian-10 para a família de imagens. Se já tiver uma instância de VM com um disco existente, pode ignorar este passo.

    gcloud

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

    Substitua o seguinte:

    • DISK_NAME: o nome do novo disco

    • ZONE: a zona na qual criar o disco

    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 o seguinte:

    • PROJECT_ID: o ID do projeto

    • ZONE: a zona na qual criar o disco

    • 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 o seguinte:

    • IMAGE_NAME: o nome da nova imagem

    • DISK_NAME: o nome do disco criado anteriormente

    • ZONE: a zona onde criar a imagem

    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 o seguinte:

    • PROJECT_ID: o ID do projeto

    • IMAGE_NAME: o nome da nova imagem

    • ZONE: a zona onde criar a imagem

    • DISK_NAME: o nome do disco criado anteriormente

  3. Opcionalmente, elimine o disco de origem após criar a imagem com a licença especial.

    gcloud

    gcloud compute disks delete DISK_NAME --zone=ZONE
    

    Substitua o seguinte:

    • DISK_NAME: o nome do disco a eliminar

    • ZONE: a zona que contém o disco a eliminar

    REST

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto

    • ZONE: a zona que contém o disco a eliminar

    • DISK_NAME: o nome do disco a eliminar

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

    gcloud

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

    Substitua o seguinte:

    • VM_NAME: o nome da VM

    • ZONE: a zona na qual criar a VM

    • 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 o seguinte:

    • PROJECT_ID: o ID do projeto

    • VM_NAME: o nome da VM

    • ZONE: a zona na qual criar a VM

    • IMAGE_NAME: o nome da imagem criada anteriormente

Confirme se a virtualização aninhada está ativada na VM

  1. Estabeleça ligação à instância de VM.

    gcloud compute ssh VM_NAME
    

    Substitua VM_NAME pelo nome da VM à qual se quer ligar.

  2. Confirme se a virtualização aninhada está ativada. Qualquer resposta que não seja 0 confirma que a virtualização aninhada está ativada.

    grep -cw vmx /proc/cpuinfo
    

O que se segue?