Limitar el tiempo de ejecución de las VMs de un MIG


En este documento se describe cómo terminar automáticamente las máquinas virtuales (VMs) de un grupo de instancias gestionado (MIG) especificando un límite de tiempo para las VMs. También se describe cómo funciona el límite de tiempo para las VMs de un MIG.

Puedes optimizar las cargas de trabajo temporales especificando un límite de tiempo para las VMs de un MIG. Cuando una VM alcanza su límite de tiempo, el MIG la termina (elimina) automáticamente. Limitar el tiempo de ejecución de las máquinas virtuales de un MIG mediante un límite de tiempo ayuda a minimizar los costes y liberar cuota.

Para saber cómo especificar un límite de tiempo para una máquina virtual independiente, consulta Limitar el tiempo de ejecución de una máquina virtual. Si quieres que un MIG añada o elimine automáticamente VMs en función de tus cargas de trabajo, consulta Autoescalado de grupos de instancias.

Antes de empezar

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

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

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

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

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

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Limitar el tiempo de ejecución de las VMs de un MIG

Puedes limitar el tiempo de ejecución de las VMs de un MIG especificando un límite de tiempo en la plantilla de instancia que se usa en el MIG. Cuando el MIG crea máquinas virtuales basadas en la plantilla, se aplica el límite de tiempo a cada máquina virtual.

Puedes especificar uno de los dos tipos de límites de tiempo:

  • Límite de tiempo como duración de la carrera
  • Límite de tiempo como hora de finalización

Para especificar un límite de tiempo para las VMs de un MIG, sigue estos pasos:

  1. Crea una plantilla de instancia con una duración de ejecución para las VMs o con una hora de finalización para las VMs.

  2. Usa la plantilla de instancia para crear un MIG o actualizar un MIG.

Limitaciones

Crear una plantilla de instancia con una duración de ejecución para las VMs

Para terminar automáticamente las VMs de un MIG después de que se ejecuten durante un periodo determinado, define una duración máxima de ejecución (maxRunDuration) en la plantilla de instancia.

Consola

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

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancia.

  3. Selecciona la ubicación de la siguiente manera:

    • Si quieres usar la plantilla de instancia en varias regiones, elige Global.
    • Si quieres reducir la dependencia entre regiones, elige Regional.
  4. Si has elegido una región, selecciona la región en la que quieras crear tu plantilla de instancia.

  5. En la sección Políticas de disponibilidad, despliega Configuración avanzada del modelo de aprovisionamiento de VMs.

  6. Selecciona la casilla Definir un límite de tiempo para la VM.

  7. En el campo Tipo de límite de tiempo, selecciona Por horas (opción predeterminada) para especificar el límite de tiempo como una duración. En el siguiente campo, introduce la duración en horas.

  8. En la lista Al finalizar la VM, selecciona Eliminar.

  9. En los demás campos, acepta los valores predeterminados o modifícalos según sea necesario.

  10. Haz clic en Crear.

gcloud

Usa el comando instance-templates create. Para eliminar automáticamente las VMs después de un periodo específico, incluye la marca --max-run-duration y asigna el valor DELETE a la marca --instance-termination-action de la siguiente manera:

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --max-run-duration=DURATION \
      --instance-termination-action=DELETE

Haz los cambios siguientes:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia.
  • DURATION: la duración que quieres que se ejecuten las VMs. La MIG elimina automáticamente la VM una vez transcurrido el periodo especificado.

    Da formato a la duración como el número de días, horas, minutos y segundos, seguido de d, h, m y s respectivamente. Por ejemplo, especifica 30m para una duración de 30 minutos o 1d2h3m4s para una duración de 1 día, 2 horas, 3 minutos y 4 segundos. La duración mínima es de 30 segundos (30s) y la máxima es de 120 días (120d).

Terraform

Para crear una plantilla de instancia con Terraform, usa el recurso google_compute_instance_template. Para crear una plantilla de instancia que elimine automáticamente las VMs después de un periodo específico, debes incluir el argumento max_run_duration y definir el argumento instance_termination_action en DELETE.

Para obtener más información, consulta la documentación de Terraform sobre el recurso google_compute_instance_template.

REST

Usa el método instanceTemplates.insert. Para eliminar automáticamente las VMs después de un periodo específico, incluye el campo maxRunDuration y asigna el valor instanceTerminationAction al campo DELETE de la siguiente manera:

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "maxRunDuration":
      {
        "seconds": DURATION
      },
      "instanceTerminationAction": "DELETE"
    }
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que quieres crear la plantilla de instancia.
  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia.
  • MACHINE_TYPE: el tipo de máquina predefinido o personalizado de las VMs del grupo.
  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen. Por ejemplo, debian-cloud.
  • IMAGE o IMAGE_FAMILY: especifique una de las siguientes opciones:

    • IMAGE: una versión específica de la imagen del SO. Por ejemplo, debian-10-buster-v20200309.

    • IMAGE_FAMILY: una familia de imágenes. Especifica la imagen del SO más reciente y no obsoleta. Por ejemplo, si especificas family/debian-10, se usará la versión más reciente de la familia de imágenes de Debian 10.

  • DURATION: la duración que quieres que se ejecuten las VMs. La MIG elimina automáticamente la VM una vez transcurrido el periodo especificado.

    Da formato a la duración como el número de días, horas, minutos y segundos, seguido de d, h, m y s respectivamente. Por ejemplo, especifica 30m para una duración de 30 minutos o 1d2h3m4s para una duración de 1 día, 2 horas, 3 minutos y 4 segundos. La duración mínima es de 30 segundos (30s) y la máxima es de 120 días (120d).

Crear una plantilla de instancia con una hora de finalización para las VMs

Para terminar automáticamente las VMs de un MIG a una hora específica, define una hora de finalización (terminationTime) en la plantilla de instancia. Puedes definir una fecha y una hora a las que quieres que un MIG finalice las VMs.

Consola

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

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancia.

  3. Selecciona la ubicación de la siguiente manera:

    • Si quieres usar la plantilla de instancia en varias regiones, elige Global.
    • Si quieres reducir la dependencia entre regiones, elige Regional.
  4. Si has elegido una región, selecciona la región en la que quieras crear tu plantilla de instancia.

  5. En la sección Políticas de disponibilidad, despliega Configuración avanzada del modelo de aprovisionamiento de VMs.

  6. En el campo Tipo de límite de tiempo, selecciona Por fecha para especificar el límite de tiempo como una hora y una fecha. En el siguiente campo, haz clic en Seleccionar fecha y hora y selecciona la fecha, la hora y la zona horaria de la finalización automática.

  7. En la lista Al finalizar la VM, selecciona Eliminar.

  8. En los demás campos, acepta los valores predeterminados o modifícalos según sea necesario.

  9. Haz clic en Crear.

gcloud

Usa el comando instance-templates create. Para eliminar automáticamente las VMs a una hora específica, incluye la marca --termination-time y asigna el valor DELETE a la marca --instance-termination-action de la siguiente manera:

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --termination-time=TIME \
      --instance-termination-action=DELETE

Haz los cambios siguientes:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia.
  • TIME: la hora a la que quieres que esta VM se termine automáticamente. La hora que especifiques debe ser al menos 30 segundos posterior a la hora actual y, como máximo, 120 días posterior a la hora actual. Formatea la hora como una marca de tiempo RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Haz los cambios siguientes:

    • YYYY-MM-DD: una fecha con el formato de año de 4 dígitos, mes de 2 dígitos y día del mes de 2 dígitos separados por guiones.
    • HH:MM:SS: hora con el formato de hora de 24 horas (dos dígitos), minutos (dos dígitos) y segundos (dos dígitos) separados por dos puntos.
    • OFFSET: zona horaria con el formato de una diferencia con respecto al tiempo universal coordinado (UTC). Por ejemplo, para usar la hora estándar del Pacífico (PST), que es 8 horas menos que UTC, especifica -08:00. También puedes especificar Z para no usar ningún desfase (UTC+0).

REST

Usa el método instanceTemplates.insert. Para eliminar automáticamente las VMs a una hora específica, incluye el campo terminationTime y asigna el valor instanceTerminationAction al campo DELETE de la siguiente manera:

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "terminationTime": TIME,
      "instanceTerminationAction": "DELETE"
    }
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que quieres crear la plantilla de instancia.
  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia.
  • MACHINE_TYPE: el tipo de máquina predefinido o personalizado de las VMs del grupo.
  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen. Por ejemplo, debian-cloud.
  • IMAGE o IMAGE_FAMILY: especifique una de las siguientes opciones:

    • IMAGE: una versión específica de la imagen del SO. Por ejemplo, debian-10-buster-v20200309.

    • IMAGE_FAMILY: una familia de imágenes. Especifica la imagen del SO más reciente y no obsoleta. Por ejemplo, si especificas family/debian-10, se usará la versión más reciente de la familia de imágenes de Debian 10.

  • TIME: la hora a la que quieres que esta VM se termine automáticamente. La hora que especifiques debe ser al menos 30 segundos posterior a la hora actual y, como máximo, 120 días posterior a la hora actual. Formatea la hora como una marca de tiempo RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Haz los cambios siguientes:

    • YYYY-MM-DD: una fecha con el formato de año de 4 dígitos, mes de 2 dígitos y día del mes de 2 dígitos separados por guiones.
    • HH:MM:SS: hora con el formato de hora de 24 horas (dos dígitos), minutos (dos dígitos) y segundos (dos dígitos) separados por dos puntos.
    • OFFSET: zona horaria con el formato de una diferencia con respecto al tiempo universal coordinado (UTC). Por ejemplo, para usar la hora estándar del Pacífico (PST), que es 8 horas menos que UTC, especifica -08:00. También puedes especificar Z para no usar ningún desfase (UTC+0).

Cómo funciona el límite de tiempo para las VMs de un MIG

Cuando especifica un límite de tiempo para las VMs de un MIG, la hora a la que un MIG finalizará una VM se establece automáticamente en el campo de marca de tiempo de finalización (terminationTimestamp) de la VM.

En función del tipo de límite de tiempo que especifiques, la marca de tiempo de finalización de una máquina virtual se define de la siguiente manera:

  • Límite de tiempo como duración de la ejecución (maxRunDuration):

    terminationTimestamp de una VM = hora de creación o inicio más reciente de la VM + maxRunDuration

    Cuando especifica una duración, la marca de tiempo de finalización se define en relación con la hora de creación o de inicio más reciente de la VM. Si la VM se vuelve a crear, se reinicia, se reanuda o se sustituye, se vuelve a calcular la marca de tiempo de finalización. La marca de tiempo de finalización puede variar entre las VMs de un MIG en función de la hora en la que se creó o se inició cada VM por última vez. Por ejemplo, si se repara una VM, la marca de tiempo de finalización de la VM se vuelve a calcular añadiendo la duración a la hora en la que se recreó la VM durante la reparación.

  • Límite de tiempo como hora de finalización (terminationTime):

    terminationTimestamp de una VM = terminationTime

    Cuando especifiques una hora, la marca de tiempo de finalización se establecerá en esa hora, siempre que sea una hora futura. Si ha pasado la hora de finalización, se producirá un error en cualquier acción del MIG que intente crear, reiniciar o sustituir una VM. Para solucionar este error, debes crear una plantilla de instancia con una hora de finalización futura y aplicarla al MIG. Si quieres usar las propiedades de la plantilla actual en la nueva, crea una plantilla de instancia a partir de la plantilla actual.

Durante una actualización de una VM, la marca de tiempo de finalización no cambia. Por ejemplo, si asignas el valor REFRESH al nivel de interrupción de las actualizaciones, la marca de tiempo de finalización se conservará cada vez que el MIG actualice la VM.

Cuando suspendes o detienes una VM de un MIG, la marca de tiempo de finalización se borra automáticamente, independientemente del tipo de límite de tiempo. Cuando reanudas o inicias una VM, la marca de tiempo de finalización se vuelve a definir en función del tipo de límite de tiempo, tal como se ha explicado anteriormente en esta sección.

Cómo funciona el ajuste de escala automático cuando se establece un límite de tiempo

El autoescalado permite que tu MIG añada o elimine VMs automáticamente en función de los aumentos o las disminuciones de la carga. Cuando un MIG elimina las VMs que han alcanzado sus marcas de tiempo de finalización, el MIG crea VMs para mantener el tamaño recomendado por el escalador automático. Las nuevas VMs se ejecutan durante el tiempo límite especificado. Si el autoescalador recomienda reducir el número de VMs, el MIG elimina VMs incluso antes de que alcancen sus límites de tiempo.

Si has configurado programaciones de escalado, las VMs se ejecutan solo hasta que finaliza una programación o hasta que una VM alcanza su marca de tiempo de finalización, lo que suceda antes.

Siguientes pasos