Habilitar la virtualización anidada


En este documento, se describe cómo habilitar la virtualización anidada en una instancia de máquina virtual (VM) y cómo confirmar que puedes crear una VM anidada. Habilita la virtualización anidada en una VM mediante uno de los siguientes métodos:

  • Recomendada. Para habilitar la virtualización anidada directamente en una VM nueva o existente, configura el campo enableNestedVirtualization como true mientras creas la VM o actualízala. Este es el método recomendado, ya que no requiere que crees una imagen personalizada ni uses la clave de licencia especial.

  • A fin de habilitar la virtualización anidada, usa la clave de licencia especial. Para ello, crea un disco de arranque, crea una imagen personalizada con la clave de licencia de virtualización anidada especial y, luego, crea una VM que use esta imagen personalizada.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Habilita la virtualización anidada directamente en una VM nueva

Habilita la virtualización anidada directamente en una VM mediante el siguiente procedimiento.

gcloud

Crea una VM L1 con virtualización anidada habilitada mediante el siguiente comando gcloud compute instances create:

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

Reemplaza lo siguiente:

  • VM_NAME: Es el nombre de la VM L1 nueva con la virtualización anidada habilitada.

  • ZONE: Es la zona para la nueva VM L1 con la virtualización anidada habilitada.

REST

Crea una VM L1 con la virtualización anidada habilitada mediante el siguiente 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
  },
  ...
}

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto

  • ZONE: Es la zona para la nueva VM L1 con la virtualización anidada habilitada.

  • VM_NAME: Es el nombre de la VM L1 nueva con la virtualización anidada habilitada.

Habilita la virtualización anidada en una VM existente.

Habilita la virtualización anidada en una VM existente mediante el siguiente método :

gcloud

  1. Exporta las propiedades de la VM mediante el siguiente comando gcloud compute instances export:

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

    Reemplaza lo siguiente:

    • VM_NAME: El nombre de la VM desde la que se exportarán las propiedades

    • YAML_FILE_PATH: La ruta de acceso y el nombre de un archivo .yaml en el que se guardarán los datos de configuración exportados

    • ZONE: La zona que contiene la VM

  2. En el archivo de configuración de VM que se guardó en FILE_PATH, actualiza el valor de enableNestedVirtualization. Si el valor no está en el archivo, agrega lo siguiente:

    advancedMachineFeatures:
      enableNestedVirtualization: true
    
  3. Actualiza la VM con el valor de enableNestedVirtualization mediante el siguiente 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
    

    Reemplaza lo siguiente:

    • VM_NAME: El nombre de la VM que se actualizará

    • FILE_PATH: La ruta de acceso al archivo de configuración de VM actualizada

    • ZONE: la zona que contiene la VM que se actualizará

REST

Actualiza el valor de enableNestedVirtualization mediante el siguiente 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"
  },
  ⋮
}

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto

  • ZONE: La zona que contiene la VM

  • VM_NAME: El nombre de la VM desde la que se exportarán las propiedades

Habilita la virtualización anidada con la clave de licencia especial

Puedes habilitar la virtualización anidada en VM si creas una imagen personalizada con una clave de licencia especial que habilita VMX en la VM L1. La clave de licencia no tiene cargos adicionales.

  1. Crea un disco de arranque a partir de una imagen pública o de una imagen personalizada. En el siguiente ejemplo, se usa debian-cloud para el proyecto de imagen y debian-10 para la familia de imágenes. Si ya tienes una instancia de VM con un disco existente, puedes omitir este paso.

    gcloud

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

    Reemplaza lo siguiente:

    • DISK_NAME: Es el nombre del disco nuevo.

    • ZONE: Es la zona en la que se creará la VM.

    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",
      ...
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto

    • ZONE: Es la zona en la que se creará la VM.

    • DISK_NAME: Es el nombre del disco nuevo.

  2. Crea una imagen personalizada con la clave de licencia especial que se requiere para la virtualización anidada.

    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"
    

    Reemplaza lo siguiente:

    • IMAGE_NAME: Es el nombre de la imagen nueva.

    • DISK_NAME: Es el nombre del disco que se creó antes.

    • ZONE: Es la zona en la que se creará la VM.

    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",
      ...
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto

    • IMAGE_NAME: Es el nombre de la imagen nueva.

    • ZONE: Es la zona en la que se creará la VM.

    • DISK_NAME: Es el nombre del disco que se creó antes.

  3. De forma opcional, borra el disco de origen después de crear la imagen con la licencia especial.

    gcloud

    gcloud compute disks delete DISK_NAME --zone=ZONE
    

    Reemplaza lo siguiente:

    • DISK_NAME: Es el nombre del disco que se borrará.

    • ZONE: Es la zona que contiene el disco que se borrará.

    REST

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

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto

    • ZONE: Es la zona que contiene el disco que se borrará.

    • DISK_NAME: Es el nombre del disco que se borrará.

  4. Crea una VM que use la imagen nueva con la licencia especial. La plataforma de CPU mínima debe ser "Intel Haswell".

    gcloud

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

    Reemplaza lo siguiente:

    • VM_NAME: El nombre de la VM

    • ZONE: Es la zona en la que se creará la VM.

    • IMAGE_NAME: Es el nombre de la imagen que se creó antes.

    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"
          }
        }
      ]
      ...
    }
    
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto

    • VM_NAME: El nombre de la VM

    • ZONE: Es la zona en la que se creará la VM.

    • IMAGE_NAME: Es el nombre de la imagen que se creó antes.

Confirma que la virtualización anidada esté habilitada en la VM

  1. Conectarte a la instancia de VM

    gcloud compute ssh VM_NAME
    

    Reemplaza VM_NAME por el nombre de la instancia a la que deseas conectarte.

  2. Confirma que esté habilitada la virtualización anidada. Cualquier respuesta que no sea 0 confirma que la virtualización anidada está habilitada.

    grep -cw vmx /proc/cpuinfo
    

¿Qué sigue?