Aprovisiona VM en nodos de usuario único.

En esta página, se describe cómo aprovisionar VM en nodos de usuario único, que son servidores físicos que ejecutan VM solo desde un proyecto único. Antes de aprovisionar VM en nodos de usuario único, lee la descripción general de nodos de usuario único.

Antes de comenzar

Crea una plantilla de nodo de usuario único

Antes de crear un grupo de nodos y aprovisionar VMs de usuario único, debes crear una plantilla de nodo de usuario único. Una plantilla de nodo es un recurso regional que define las propiedades (como el tipo de nodo, las etiquetas de afinidad, las SSD locales, los aceleradores y el exceso de compromiso de CPU) para cada nodo de un grupo de nodos.

Para configurar y crear una plantilla de nodo con la consola de Google Cloud , Google Cloud CLI o la API de REST de Compute Engine, consulta Crea una plantilla de nodo de usuario único.

Crea un grupo de nodo de usuario único

Después de crear una plantilla de nodos, debes crear un grupo de nodos de usuario único. Un grupo de nodos es un clúster homogéneo de nodos de usuario único en una zona específica que hereda propiedades de su plantilla. Puedes configurar las políticas de mantenimiento de hosts, el ajuste de escala automático y la configuración de uso compartido entre proyectos en el grupo de nodos.

Para configurar y crear un grupo de nodos con la consola de Google Cloud , Google Cloud CLI o la API de REST de Compute Engine, consulta Crea un grupo de nodos de usuario único.

Aprovisiona una VM de usuario único

Después de crear un grupo de nodos a partir de una plantilla de nodo, puedes aprovisionar VM individuales en un grupo de nodos de usuario único.

Para aprovisionar una VM en un nodo o grupo de nodos específico con etiquetas de afinidad que coincidan con las que asignaste antes a la plantilla de nodo, sigue el procedimiento estándar para crear una instancia de VM y asigna etiquetas de afinidad a la VM.

Como alternativa, puedes usar el siguiente procedimiento para aprovisionar una VM en un nodo de usuario único desde la página de detalles del grupo de nodos. Según el grupo de nodos en el que aprovisionas VM, Compute Engine asigna las etiquetas de afinidad.

Consola

  1. En la consola de Google Cloud , ve a la página Nodos de usuario único.

    Ir a Nodos de usuario único

  2. Haz clic en Grupos de nodos.

  3. Haz clic en el Nombre del grupo de nodos para aprovisionar una instancia de VM y, de forma opcional, haz clic en el nombre del nodo de usuario único específico a fin de aprovisionar la VM en este.

  4. Haz clic en Crear instancia para aprovisionar una instancia de VM en este grupo de nodos, toma nota de los valores que se aplicaron de forma automática en el Nombre, la Región y la Zona y modifica esos valores según sea necesario.

  5. Para seleccionar una opción de Configuración de la máquina, especifica los valores de Familia de máquinas, Serie y Tipo de máquina. Elige la opción de Serie que corresponda al tipo de nodo de usuario único.

  6. Modifica el Disco de arranque, el Firewall y otras opciones de configuración según sea necesario.

  7. Haz clic en Usuario único, observa las Etiquetas de afinidad de nodo que se asignaron de forma automática y usa Explorar para ajustarlas según sea necesario.

  8. Haz clic en Administración y, en Mantenimiento en el host, elige una de las siguientes opciones:

    • Migrar instancia de VM (recomendado): La VM se migra a otro nodo del grupo de nodos durante los eventos de mantenimiento.

    • Finalizar instancia de VM: la VM se detiene durante los eventos de mantenimiento.

  9. Elige una de las siguientes opciones para el Reinicio automático:

    • Activado (recomendado): se reinician las VM de forma automática si se detienen por eventos de mantenimiento.

    • Desactivado: las VM no se reinician de forma automática después de un evento de mantenimiento.

  10. Haz clic en Crear para terminar de crear tu VM de usuario único.

gcloud

Usa el comando gcloud compute instances create para aprovisionar una VM en un grupo de nodos de usuario único:

gcloud compute instances create VM_NAME \
  [--zone=ZONE \]
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT \
  --node-group=GROUP_NAME \
  --machine-type=MACHINE_TYPE \
  [--maintenance-policy=MAINTENANCE_POLICY \]
  [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
  [--local-ssd interface=SSD_INTERFACE \]
  [--restart-on-failure]

La marca --restart-on-failure indica si las VM de usuario único se reiniciarán después de detenerse. Esta marca está habilitada de forma predeterminada. Usa --no-restart-on-failure para inhabilitarla.

Reemplaza lo siguiente:

  • VM_NAME: es el nombre de la nueva VM de usuario único.

  • ZONE: Es la zona en la que se aprovisionará la VM de usuario único.

  • IMAGE_FAMILY: Es la familia de imágenes de la imagen que se usará para crear la VM.

  • IMAGE_PROJECT: Es el proyecto de imagen de la familia de imágenes.

  • GROUP_NAME: Es el nombre del grupo de nodos en el que se aprovisionará la VM.

  • MACHINE_TYPE: Es el tipo de máquina de la VM de usuario único. Usa el comando gcloud compute machine-types list a fin de obtener una lista de los tipos de máquinas disponibles para el proyecto.

  • MAINTENANCE_POLICY: Especifica el comportamiento de reinicio de las VM de usuario único durante los eventos de mantenimiento. Establécela en uno de los siguientes valores:

    • MIGRATE: La VM migra a otro nodo en el grupo de nodos durante los eventos de mantenimiento.

    • TERMINATE: La VM se detuvo durante eventos de mantenimiento.

  • GPU_TYPE: Es el tipo de GPU. Establece esta opción en uno de los tipos de acelerador especificados cuando se creó la plantilla de nodo.

  • GPU_COUNT: La cantidad de GPU del total especificado por la plantilla de nodos que se adjuntarán a esta VM El valor predeterminado es 1.

  • SSD_INTERFACE: Es el tipo de interfaz de SSD local. Solo puedes establecer esto para instancias creadas a partir de una plantilla de nodo compatible con SSD local. Si especificas esta opción mientras creas la instancia y la plantilla de nodo no es compatible con SSD local, la creación de la instancia fallará. Configúrala como nvme si los controladores de imagen de disco de arranque están optimizados para NVMe. De lo contrario, configúrala como scsi. Especifica esta marca y un valor correspondiente una vez para cada partición de SSD local.

REST

Usa el método instances.insert para aprovisionar una VM en un grupo de nodos de usuario único:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/VM_ZONE/instances
{ "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "scheduling": { "onHostMaintenance": MAINTENANCE_POLICY, "automaticRestart": RESTART_ON_FAILURE, "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] }

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto.

  • VM_ZONE: Es la zona en la que se aprovisionará la VM de usuario único.

  • MACHINE_TYPE_ZONE: Es la zona del tipo de máquina.

  • MACHINE_TYPE: Es el tipo de máquina de la VM de usuario único. Usa el método machineTypes.list a fin de obtener una lista de los tipos de máquinas disponibles para el proyecto.

  • VM_NAME: es el nombre de la nueva VM de usuario único.

  • MAINTENANCE_POLICY: Especifica el comportamiento de reinicio de las VM de usuario único durante los eventos de mantenimiento. Establécela en uno de los siguientes valores:

    • MIGRATE: La VM migra a otro nodo en el grupo de nodos durante los eventos de mantenimiento.

    • TERMINATE: La VM se detuvo durante eventos de mantenimiento.

  • RESTART_ON_FAILURE: Indica si las VM de usuario única se reinician después de la detención. La ruta predeterminada es true.

  • GROUP_NAME: Es el nombre del grupo de nodos en el que se aprovisionará la VM.

  • NETWORK: Es la URL del recurso de red para esta VM.

  • REGION: Es la región que contiene la subred para esta VM.

  • SUBNETWORK: Es la URL del recurso de subred para esta VM.

  • GPU_TYPE: Es el tipo de GPU. Establece esta opción en uno de los tipos de acelerador especificados cuando se creó la plantilla de nodo.

  • GPU_COUNT: Es la cantidad de GPU del total especificado por la plantilla de nodos que se adjuntarán a esta VM El valor predeterminado es 1.

  • IMAGE_PROJECT: Es el proyecto de imagen de la familia de imágenes.

  • IMAGE_FAMILY: Es la familia de imágenes de la imagen que se usará para crear la VM.

  • LOCAL_SSD_ZONE: Es la zona del SSD local.

  • SSD_INTERFACE: Es el tipo de interfaz de SSD local. Configúralo como NVME si los controladores de imagen de disco de arranque están optimizados para NVMe. De lo contrario, configúralo como SCSI.

Aprovisiona un grupo de VM de usuario único

Los grupos de instancias administrados (MIG) te permiten aprovisionar un grupo de VM de usuario único idénticas. Las etiquetas de afinidad te permiten especificar el nodo de usuario único o grupo de nodos en el que se aprovisionará el grupo de VM de usuario único.

Para los MIG regionales, debes crear grupos de nodos en cada una de sus zonas y especificar afinidades de nodos para esos grupos en la plantilla de instancias del MIG regional.

gcloud

  1. Usa el comando gcloud compute instance-templates create a fin de crear una plantilla de grupo de instancias administrado para que un grupo de VM se cree en un grupo de nodos de usuario único:

    gcloud compute instance-templates create INSTANCE_TEMPLATE \
      --machine-type=MACHINE_TYPE \
      --image-project=IMAGE_PROJECT \
      --image-family=IMAGE_FAMILY \
      --node-group=GROUP_NAME \
      [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
      [--local-ssd interface=SSD_INTERFACE]
    

    Reemplaza lo siguiente:

    • INSTANCE_TEMPLATE: Es el nombre de la plantilla de instancias nueva.

    • MACHINE_TYPE: Es el tipo de máquina de la VM de usuario único. Usa el comando gcloud compute machine-types list a fin de obtener una lista de los tipos de máquinas disponibles para el proyecto.

    • IMAGE_PROJECT: Es el proyecto de imagen de la familia de imágenes.

    • IMAGE_FAMILY: Es la familia de imágenes de la imagen que se usará para crear la VM.

    • GROUP_NAME: Es el nombre del grupo de nodos en el que se aprovisionará la VM. Como alternativa, si deseas usar esta plantilla de instancias para crear un MIG regional que exista en más de una zona, usa la marca --node-affinity-file a fin de realizar las siguientes acciones: especificar una lista de valores para los grupos de nodos del MIG regional

    • GPU_TYPE: Es el tipo de GPU. Establece esta opción en uno de los tipos de acelerador especificados cuando se creó la plantilla de nodo.

    • GPU_COUNT: Es la cantidad de GPU del total especificado por la plantilla de nodos que se adjuntarán a esta VM El valor predeterminado es 1.

    • SSD_INTERFACE: Es el tipo de interfaz de SSD local. Configúralo como nvme si los controladores de imagen de disco de arranque están optimizados para NVMe. De lo contrario, configúralo como scsi. Especifica esta marca y un valor correspondiente una vez para cada partición de SSD local.

  2. Usa el comando gcloud compute instance-groups managed create para crear un grupo de instancias administrado dentro de tu grupo de nodos de usuario único:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
      --size=SIZE \
      --template=INSTANCE_TEMPLATE \
      --zone=ZONE
    

    Reemplaza lo siguiente:

    • INSTANCE_GROUP_NAME: El nombre de este grupo de instancias

    • SIZE: es la cantidad de VM que se incluirán en este grupo de instancias. Tu grupo de nodos debe tener suficientes recursos para admitir las instancias en este grupo de instancias administrado Usa el escalador automático de grupos de instancias administrados para administrar de forma automática el tamaño de los grupos de instancias administrados.

    • INSTANCE_TEMPLATE: Es el nombre de la plantilla de instancias que se usará para crear este MIG. La plantilla debe tener una o más etiquetas de afinidad de nodos que apunten a los grupos de nodos adecuados.

    • ZONE: Es la zona en la que se creará el grupo de instancias administrado. En un MIG regional, reemplaza la marca --zone por la marca --region y especifica una región. También agrega la marca --zones para especificar todas las zonas en las que existen los grupos de nodos.

REST

  1. Usa el método instanceTemplates.insert para crear una plantilla de grupo de instancias administrado dentro de tu grupo de nodos de usuario único:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/TEMPLATE_ZONE/instance-templates
    { "name": "INSTANCE_TEMPLATE", "properties": { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "scheduling": { "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] } }

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto.

    • TEMPLATE_ZONE: Es la zona en la que se creará la plantilla de instancias.

    • INSTANCE_TEMPLATE: Es el nombre de la planilla nueva

    • MACHINE_TYPE_ZONE: Es la zona del tipo de máquina.

    • MACHINE_TYPE: Es el tipo de máquina de la VM de usuario único. Usa el método machineTypes.list a fin de obtener una lista de los tipos de máquinas disponibles para el proyecto.

    • GROUP_NAME: Es el nombre del grupo de nodos en el que se aprovisionará la VM. Si deseas usar esta plantilla de instancias para crear un MIG regional que existe en más de una zona, especifica una lista de grupos de nodos que existen en las mismas zonas que las del MIG regional.

    • NETWORK: Es la URL del recurso de red para esta plantilla de instancias.

    • REGION: Es la región que contiene la subred para esta plantilla de instancias.

    • SUBNETWORK: Es la URL del recurso de subred para esta plantilla de instancias.

    • GPU_TYPE: Es el tipo de GPU. Establece esta opción en uno de los tipos de acelerador especificados cuando se creó la plantilla de nodo.

    • GPU_COUNT: La cantidad de GPU del total especificado por la plantilla de nodos que se adjuntarán a esta VM El valor predeterminado es 1.

    • IMAGE_PROJECT: Es el proyecto de imagen de la familia de imágenes.

    • IMAGE_FAMILY: Es la familia de imágenes de la imagen que se usará para crear la VM.

    • LOCAL_SSD_ZONE: Es la zona del SSD local.

    • SSD_INTERFACE: Es el tipo de interfaz de SSD local. Configúralo como NVME si los controladores de imagen de disco de arranque están optimizados para NVMe. De lo contrario, configúralo como SCSI.

  2. Usa el método instanceGroupManagers.insert para crear un MIG dentro del grupo de nodos de usuario único en función de la plantilla de instancias creada con anterioridad. O bien, si deseas crear un MIG regional, usa el método regionInstanceGroupManagers.insert y especifica la región y las zonas de todos los grupos de nodos como se especifica en el plantilla de instancias.

    Por ejemplo, para crear un MIG zonal, usa la siguiente solicitud:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    {
      "baseInstanceName": "NAME_PREFIX",
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto.

    • ZONE: Es la zona en la que se creará el grupo de instancias administrado.

    • NAME_PREFIX: Es el nombre del prefijo para cada una de las instancias en el grupo de instancias administrado.

    • INSTANCE_GROUP_NAME: es el nombre del grupo de instancias.

    • SIZE: es la cantidad de VM que se incluirán en este grupo de instancias. Tu grupo de nodos debe tener suficientes recursos para admitir las instancias en este grupo de instancias administrado Usa el escalador automático de grupos de instancias administrados para administrar de forma automática el tamaño de los grupos de instancias administrados.

    • INSTANCE_TEMPLATE: Es la URL de la plantilla de instancias que se usará para crear este grupo. La plantilla debe tener una etiqueta de afinidad de nodo que apunte al grupo de nodos adecuado.

Configura etiquetas de afinidad de nodo

Las etiquetas de afinidad de nodo te permiten agrupar grupos de nodos de forma lógica y programar VM en un conjunto específico de grupos de nodos. También puedes usar etiquetas de afinidad de nodo para programar VM en grupos de nodos en diferentes zonas y mantener los grupos de nodos en un grupo lógico. El siguiente procedimiento es un ejemplo del uso de etiquetas de afinidad para asociar VM con un grupo de nodos específico que se usa en cargas de trabajo de producción. En este ejemplo, se muestra cómo programar una sola VM, pero también puedes usar grupos de instancias administrados para programar un grupo de VM.

gcloud

  1. Usa el comando gcloud compute sole-tenancy node-templates create a fin de crear una plantilla de nodo con un conjunto de etiquetas de afinidad para una carga de trabajo de producción:

    gcloud compute sole-tenancy node-templates create prod-template \
      --node-type=n1-node-96-624 \
      --node-affinity-labels workload=frontend,environment=prod
    
  2. Usa el comando gcloud compute sole-tenancy node-templates describe para ver las etiquetas de afinidad de nodo asignadas a la plantilla de nodo.

  3. Usa el comando gcloud compute sole-tenancy node-groups create para crear un grupo de nodos que use la plantilla de producción:

    gcloud compute sole-tenancy node-groups create prod-group \
      --node-template=prod-template \
      --target-size=1
    
  4. Para las VM de producción, crea un archivo node-affinity-prod.json a fin de especificar la afinidad de las VM de producción. Por ejemplo, puedes crear un archivo que especifique que las VM se ejecutan solo en nodos con las afinidades workload=frontend y environment=prod. Crea el archivo de afinidad de nodo mediante Cloud Shell o créalo en la ubicación que elijas.

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "IN",
        "values" : ["prod"]
      }
    ]
    
  5. Usa el archivo node-affinity-prod.json con el comando gcloud compute instances create para programar una VM en el grupo de nodos con etiquetas de afinidad coincidentes.

    gcloud compute instances create prod-vm \
      --node-affinity-file node-affinity-prod.json \
      --machine-type=n1-standard-2
    
  6. Usa el comando gcloud compute instances describe y verifica el campo scheduling para ver las afinidades de nodo asignadas a la VM.

Configura etiquetas de antiafinidad de nodo

Las etiquetas de afinidad de nodo se pueden configurar como etiquetas de antiafinidad para evitar que las VM se ejecuten en nodos específicos. Por ejemplo, puedes usar etiquetas de antiafinidad para evitar que las VM que usas con fines de desarrollo se programen en los mismos nodos que tu VM de producción. En el siguiente ejemplo, se muestra cómo usar etiquetas de afinidad para evitar que las VM se ejecuten en grupos de nodos específicos. En este ejemplo, se muestra cómo programar una sola VM, pero también puedes usar grupos de instancias administrados para programar un grupo de VM.

gcloud

  1. En el caso de las VM de desarrollo, debes especificar su afinidad. Para ello, crea un node-affinity-dev.json con Cloud Shell o créalo en una ubicación que elijas. Por ejemplo, crea un archivo que configure las VM para que se ejecuten en cualquier grupo de nodos con la afinidad workload=frontend, siempre que no sea environment=prod:

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "NOT_IN",
        "values" : ["prod"]
      }
    ]
    
  2. Usa el archivo node-affinity-dev.json con el comando gcloud compute instances create para crear la VM de desarrollo:

    gcloud compute instances create dev-vm \
      --node-affinity-file=node-affinity-dev.json \
      --machine-type=n1-standard-2
    
  3. Usa el comando gcloud compute instances describe y verifica el campo scheduling para ver las antiafinidades de nodo asignadas a la VM.

¿Qué sigue?