Crea un MIG que use VMs Spot

En este documento, se explica cómo crear un grupo de instancias administrado (MIG) que use VMs Spot.

Las VMs Spot son instancias de máquina virtual (VM) que puedes obtener a un precio con grandes descuentos. Sin embargo, Compute Engine puede detener o borrar las VMs Spot en cualquier momento para recuperar capacidad. Usa VMs Spot para ejecutar cargas de trabajo tolerantes a errores, como trabajos de procesamiento por lotes o aplicaciones sin estado, a un costo bajo.

Para conocer otros métodos que puedes usar para crear MIG, consulta Situaciones básicas para crear un MIG.

Antes de comenzar

  • Lee sobre las VMs Spot, en especial las limitaciones.
  • Verifica que tengas suficiente cuota para los recursos que deseas solicitar. Para obtener más información, consulta Cuotas de asignación.
  • Antes de crear VMs de instancias interrumpibles para una carga de trabajo, completa los siguientes pasos:

    1. Configura tu carga de trabajo para administrar la preferencia. Específicamente, te recomendamos que prepares una secuencia de comandos para controlar la interrupción que se ejecute como parte de tu carga de trabajo o que sea un archivo que puedas agregar en los metadatos de la VM para que se ejecute durante el apagado. Para obtener instrucciones, consulta Administra la interrupción de VMs Spot.

    2. Te recomendamos que consultes los datos de las VMs Spot para ayudarte a elegir un tipo de máquina y una ubicación. Si seleccionas un tipo de máquina y una ubicación con una mayor disponibilidad de recursos, puedes aumentar las probabilidades de evitar errores de disponibilidad de recursos y de tener un tiempo de actividad más prolongado antes de la interrupción.

  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  • Configura una región y una zona predeterminadas.
  • REST

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

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para crear MIGs que usen VMs Spot, pídele a tu administrador que te otorgue el rol de IAM Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear MIGs que usen VMs Spot. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear MIGs que usen VMs Spot:

  • Para crear una plantilla de instancias: compute.instanceTemplates.create en el proyecto
  • Para crear un MIG, haz lo siguiente: compute.instanceGroupManagers.create en el proyecto

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Crea un MIG que use VMs Spot

Para crear un MIG que use VMs Spot, debes completar los siguientes pasos:

  1. Crea una plantilla de instancias configurada para crear VMs Spot

  2. Crea un MIG regional o zonal

Crea una plantilla de instancias configurada para crear VMs Spot

Para crear una plantilla de instancias configurada para crear VMs Spot, selecciona una de las siguientes opciones:

Console

  1. En la consola de Google Cloud , ve a la página Plantillas de instancias.

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancias. Aparecerá la página Crea una plantilla de instancia.

  3. En el campo Nombre, ingresa un nombre para la plantilla de instancias.

  4. En la sección Ubicación, selecciona el tipo de plantilla de instancias que deseas crear:

    • Para una plantilla de instancias regional, selecciona Regional y, luego, la región en la que deseas crear la plantilla. Especifica una región admitida según el tipo de máquina que deseas que usen tus VMs Spot.

    • Para una plantilla de instancias global, selecciona Global.

  5. En la sección Configuración de la máquina, selecciona una serie de máquinas compatible para las VMs Spot.

  6. En la sección Modelo de aprovisionamiento, haz lo siguiente:

    1. En la lista Modelo de aprovisionamiento de VM, selecciona Spot. Se expandirá la sección Configuración avanzada del modelo de aprovisionamiento de VMs.

    2. En la lista Duración del aviso de interrupción, selecciona una opción según cómo quieras controlar la interrupción.

      • Si seleccionas 120 segundos (recomendado), asegúrate de controlar la interrupción dentro de tu carga de trabajo antes de crear una VM Spot. Por ejemplo, verifica que tu carga de trabajo incluya una secuencia de comandos para guardar tu progreso que espere a ejecutarse hasta que se detecte la preferencia.

      • Si seleccionas 0 segundos (predeterminado), asegúrate de controlar la interrupción con una secuencia de comandos de apagado. Antes de crear una VM Spot, crea un archivo que contenga una secuencia de comandos de apagado que guarde tu progreso cuando la interrupción se deba a la preferencia. Adjunta esta secuencia de comandos de apagado como se explica en un paso posterior.

    3. Para especificar si se deben detener o borrar las VMs Spot en caso de interrupción, en la lista Al finalizar las VMs, selecciona una de las siguientes opciones:

      • Para detener las VMs Spot, selecciona Detener.

      • Para borrar VMs Spot, selecciona Borrar.

  7. Para agregar una secuencia de comandos de apagado, completa los siguientes pasos. Si seleccionaste 0 segundos (predeterminado) para la Duración del aviso de interrupción, este paso es obligatorio para controlar la interrupción. De lo contrario, si seleccionaste 120 segundos, este paso es opcional.

    1. Expanda la sección Opciones avanzadas.
    2. Expande la sección Administración.
    3. En la sección Metadatos, haz clic en Agregar elemento.
    4. En el campo Clave, ingresa shutdown-script para la clave de metadatos.
    5. En el campo Valor, agrega el contenido de una secuencia de comandos de apagado que controle la preferencia.
  8. Opcional: Para cambiar el valor o la imagen de disco de arranque predeterminados, en la sección Disco de arranque, haz clic en Cambiar. Luego, sigue las instrucciones para cambiar el disco de arranque.

  9. Haz clic en Crear.

gcloud

Para crear una plantilla de instancias configurada para crear VMs Spot, usa el comando gcloud compute instance-templates create.

Con el siguiente comando, se crea una plantilla de instancias regional. Si deseas crear una plantilla de instancias global, usa el mismo comando sin la marca --instance-template-region.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --instance-template-region=REGION \
    --instance-termination-action=TERMINATION_ACTION \
    --machine-type=MACHINE_TYPE \
    --provisioning-model=SPOT \
    --preemption-notice-duration=PREEMPTION_NOTICE_DURATION \
    --metadata shutdown-script=SHUTDOWN_SCRIPT

Reemplaza lo siguiente:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias que se creará.

  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen; por ejemplo, debian-cloud. Para obtener más información sobre los proyectos de imágenes compatibles, consulta Imágenes públicas.

  • IMAGE_FAMILY: Es una familia de imágenes. Esto especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas debian-12, se usa la versión más reciente de la familia de imágenes de Debian 12. Para obtener más información sobre el uso de las familias de imágenes, consulta Prácticas recomendadas para las familias de imágenes.

  • REGION: Es la región en la que se creará la plantilla de instancias. Según el tipo de máquina que deseas que usen las VMs de Spot, especifica una región admitida.

  • TERMINATION_ACTION: Indica si Compute Engine detiene o borra las VMs Spot en caso de interrupción. Debes especificar si deseas detener (STOP) o borrar (DELETE) las VMs.

  • MACHINE_TYPE: Es un tipo de máquina compatible con las VMs de Spot. Si especificas un tipo de máquina N1, debes incluir la marca --accelerator para definir la cantidad y el tipo de GPUs que se conectarán a tus VMs.

  • PREEMPTION_NOTICE_DURATION: Indica si se debe habilitar una duración del aviso de interrupción. Para gcloud CLI, el valor debe ser 120s o 0s.

    • Si especificas 120s (recomendado), controla la preferencia dentro de tu carga de trabajo. (De manera opcional, también puedes especificar una secuencia de comandos de cierre).

    • Si especificas 0s (predeterminado), controla la interrupción dentro de una secuencia de comandos de apagado.

  • SHUTDOWN_SCRIPT: Es una secuencia de comandos de cierre.

    • Si estableces PREEMPTION_NOTICE_DURATION en 0s (valor predeterminado), debes especificar una secuencia de comandos de apagado para controlar la preferencia. Para obtener más información sobre cómo dar formato y especificar una secuencia de comandos de apagado, consulta Ejecuta secuencias de comandos de apagado.

    • De lo contrario, si no quieres especificar una secuencia de comandos de apagado, puedes quitar la marca --metadata shutdown-script.

REST

Para crear una plantilla de instancias configurada para crear VMs Spot, realiza una de las siguientes solicitudes POST:

Por ejemplo, para crear una plantilla de instancias regional, realiza una solicitud de la siguiente manera:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "scheduling": {
      "instanceTerminationAction": "TERMINATION_ACTION",
      "provisioningModel": "SPOT",
      "preemptionNoticeDuration": { "seconds": PREEMPTION_NOTICE_DURATION }
    },
    "metadata": {
      "items": [
        {
          "key": "shutdown-script",
          "value": "SHUTDOWN_SCRIPT"
        }
      ]
    }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que se creará la plantilla de instancias.

  • REGION: Es la región en la que se creará la plantilla de instancias. Según el tipo de máquina que deseas que usen las VMs de Spot, especifica una región admitida.

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.

  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen; por ejemplo, debian-cloud. Para obtener más información sobre los proyectos de imágenes compatibles, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

    • una versión específica de la imagen de SO; por ejemplo, debian-12-bookworm-v20240617.

    • Una familia de imágenes, que debe tener el formato family/IMAGE_FAMILY. Esto especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas family/debian-12, se usa la versión más reciente de la familia de imágenes de Debian 12. Para obtener más información sobre el uso de las familias de imágenes, consulta Prácticas recomendadas para las familias de imágenes.

  • MACHINE_TYPE: Es un tipo de máquina compatible con las VMs de Spot. Si especificas un tipo de máquina N1, debes incluir el campo guestAccelerators para definir la cantidad y el tipo de GPU que conectarás a las VMs.

  • TERMINATION_ACTION: Indica si Compute Engine detiene o borra las VMs Spot en caso de interrupción. Debes especificar si deseas detener (STOP) o borrar (DELETE) las VMs.

  • PREEMPTION_NOTICE_DURATION: Indica si se debe habilitar una duración del aviso de interrupción. En el caso de REST, el valor debe ser 120 o 0.

    • Si especificas 120 (recomendado), controla la preferencia dentro de tu carga de trabajo. (De manera opcional, también puedes especificar una secuencia de comandos de cierre).

    • Si especificas 0 (predeterminado), controla la interrupción dentro de una secuencia de comandos de apagado.

  • SHUTDOWN_SCRIPT: Es una secuencia de comandos de cierre.

    • Si estableces PREEMPTION_NOTICE_DURATION en 0s (valor predeterminado), debes especificar una secuencia de comandos de apagado para controlar la preferencia. Para obtener más información sobre cómo dar formato y especificar una secuencia de comandos de apagado, consulta Ejecuta secuencias de comandos de apagado.

    • De lo contrario, si no quieres especificar una secuencia de comandos de apagado, puedes quitar el campo metadata y sus subcampos.

  • TERMINATION_ACTION: Opcional: Especifica qué acción de finalización se debe realizar cuando Compute Engine interrumpe la VM, ya sea STOP (comportamiento predeterminado) o DELETE.

Después de crear la plantilla de instancias, puedes ver sus detalles para revisar sus propiedades.

Crea un MIG regional o zonal

Para crear un MIG regional o zonal, selecciona una de las siguientes opciones:

Console

  1. En la consola de Google Cloud , ve a la página Grupos de instancias.

    Ir a Grupos de instancias

  2. Haz clic en Crear grupo de instancias. Se abre la página Crear grupo de instancias.

  3. En el campo Nombre, ingresa un nombre para el MIG.

  4. En la lista Plantilla de instancias, selecciona la plantilla de instancias que creaste en la sección anterior.

  5. En el campo Cantidad de instancias, ingresa la cantidad de VMs de Spot que se crearán en el MIG. Si tu carga de trabajo requiere VMs con nombres específicos, ingresa 0 para omitir la creación de VMs en esta etapa. Después de crear el MIG, agrégale VMs con nombres específicos.

  6. En la sección Ubicación, especifica si deseas crear un MIG zonal o regional de la siguiente manera:

    1. Para crear un MIG zonal, selecciona Zona única. O bien, para crear un MIG regional, selecciona Varias zonas.

    2. Selecciona la región y las zonas para el MIG.

  7. Haz clic en Crear.

gcloud

Para crear un MIG, usa el comando gcloud compute instance-groups managed create.

Según el tipo de MIG que desees crear, incluye las siguientes marcas en el comando:

  • Para crear un MIG zonal, incluye la marca --zone:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --size=SIZE \
        --template=INSTANCE_TEMPLATE_URL \
        --zone=ZONE
    
  • Para crear un MIG regional, incluye la marca --region:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --size=SIZE \
        --template=INSTANCE_TEMPLATE_URL \
        --region=REGION
    

Reemplaza lo siguiente:

  • INSTANCE_GROUP_NAME: Es el nombre del MIG.

  • INSTANCE_TEMPLATE_URL: Es la URL de la plantilla de instancias que creaste en la sección anterior. La URL puede contener el ID o el nombre de la plantilla de instancias. Especifica uno de los siguientes valores:

    • Para una plantilla de instancias regional: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID

    • Para una plantilla de instancias global: INSTANCE_TEMPLATE_ID

  • SIZE: Es la cantidad de VMs Spot que se crearán en el MIG. Si tu carga de trabajo requiere nombres de VM específicos, especifica 0 para omitir la creación de VMs en esta etapa. Después de crear el MIG, agrégale VMs con nombres específicos.

  • ZONE: La zona en la que se creará el MIG zonal. Si usas una plantilla de instancias regional para crear el MIG, debes especificar una zona dentro de la misma región que la plantilla.

  • REGION: Es la región en la que se creará el MIG regional. Si usas una plantilla de instancias regional para crear el MIG, debes especificar la misma región que la de la plantilla.

REST

Para crear un MIG, realiza una solicitud POST a uno de los siguientes métodos:

  • Para crear un MIG zonal, realiza una solicitud POST al método instanceGroupManagers.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    
    {
      "name": "INSTANCE_GROUP_NAME",
      "versions": [
        {
          "instanceTemplate": "INSTANCE_TEMPLATE_URL"
        }
      ],
      "targetSize": SIZE
    }
    
  • Para crear un MIG regional, realiza una solicitud POST al método regionInstanceGroupManagers.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
    
    {
      "name": "INSTANCE_GROUP_NAME",
      "instanceTemplate": "INSTANCE_TEMPLATE_URL",
      "targetSize": SIZE
    }
    

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto en el que se creará el MIG regional o zonal.

  • ZONE: La zona en la que se creará el MIG zonal. Si usas una plantilla de instancias regional para crear el MIG, debes especificar una zona dentro de la misma región que la plantilla.

  • REGION: Es la región en la que se creará el MIG regional. Si usas una plantilla de instancias regional para crear el MIG, debes especificar la misma región que la de la plantilla.

  • INSTANCE_GROUP_NAME: Es el nombre del MIG.

  • INSTANCE_TEMPLATE_URL: Es la URL de la plantilla de instancias que creaste en la sección anterior. La URL puede contener el ID o el nombre de la plantilla de instancias. Especifica uno de los siguientes valores:

    • Para una plantilla de instancias regional: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID

    • Para una plantilla de instancias global: INSTANCE_TEMPLATE_ID

  • SIZE: Es la cantidad de VMs Spot que se crearán en el MIG. Si tu carga de trabajo requiere nombres de VM específicos, especifica 0 para omitir la creación de VMs en esta etapa. Después de crear el MIG, agrégale VMs con nombres específicos.

Después de crear el MIG, puedes ver sus detalles para revisar sus propiedades.

¿Qué sigue?