Limita el tiempo de ejecución de las VMs en un MIG


En este documento, se describe cómo finalizar de forma automática las máquinas virtuales (VMs) en un grupo de instancias administrado (MIG) mediante la especificación de un límite de tiempo para las VMs. También se describe cómo funciona el límite de tiempo de las VMs en un MIG.

Puedes optimizar las cargas de trabajo temporales si especificas un límite de tiempo para las VMs en un MIG. Cuando una VM alcanza su límite de tiempo, el MIG finaliza (borra) esa VM de forma automática. Limitar el tiempo de ejecución de las VMs en un MIG por un límite de tiempo ayuda a minimizar los costos y liberar cuota.

Si deseas obtener información para especificar un límite de tiempo para una VM independiente, consulta Limita el tiempo de ejecución de una VM. Si quieres que un MIG agregue o borre VMs de forma automática en función de tus cargas de trabajo, consulta Aplica el ajuste de escala automático en grupos de instancias.

Antes de comenzar

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

    Consola

    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 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

Limita el tiempo de ejecución de las VMs en un MIG

Puedes limitar el tiempo de ejecución de las VMs en un MIG si especificas un límite de tiempo en la plantilla de instancias que se usa para el MIG. Cuando el MIG crea VMs en función de la plantilla, se aplica el límite de tiempo a cada VM.

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

  • Límite de tiempo como duración de la ejecución
  • El límite de tiempo como tiempo de finalización

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

  1. Crea una plantilla de instancias 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 instancias para crear un MIG o actualizar un MIG existente.

Limitaciones

  • Cuando creas una plantilla de instancias a fin de especificar un límite de tiempo para las VMs en un MIG, se aplican las siguientes limitaciones:

    • No puedes establecer la acción de finalización en STOP. Los MIGs solo admiten DELETE.
    • No puedes usar VMs Spot.
  • No puedes crear una solicitud de cambio de tamaño en un MIG que usa una plantilla de instancias que limite el tiempo de ejecución de la VM.

  • No puedes limitar el tiempo de ejecución de las VMs en un MIG regional con la forma de distribución objetivo EVEN y la redistribución proactiva de instancias habilitadas.

Crea una plantilla de instancias con una duración de ejecución para las VMs

Para finalizar de forma automática las VMs de un MIG después de que se ejecutan durante un período determinado, establece una duración máxima de ejecución (maxRunDuration) en la plantilla de instancias.

Console

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

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancias.

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

    • Si deseas usar la plantilla de instancias entre regiones, elige Global.
    • Si deseas reducir la dependencia entre regiones, elige Regional.
  4. Si eliges regional, selecciona la región en la que deseas crear tu plantilla de instancias.

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

  6. Selecciona la casilla de verificación Establecer un límite de tiempo para la VM.

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

  8. En la lista Finalización de VM, selecciona Borrar.

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

  10. Haz clic en Crear.

gcloud

Usa el comando instance-templates create beta. Para borrar las VMs de forma automática después de una duración específica, incluye la marca --max-run-duration y establece la marca --instance-termination-action en DELETE de la siguiente manera:

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

Reemplaza lo siguiente:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.
  • DURATION: la duración de la que deseas que se ejecuten las VMs. El MIG borra la VM de forma automática después de la duración especificada.

    Formatea la duración en forma de la cantidad de días, horas, minutos y segundos seguidos de d, h, m y s, respectivamente. Por ejemplo, especifica 30m para una duración de 30 minutos o especifica 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).

REST

Usa el método beta instanceTemplates.insert. Para borrar las VMs de forma automática después de una duración específica, incluye el campo maxRunDuration y configura el campo instanceTerminationAction como DELETE de la siguiente manera:

POST https://compute.googleapis.com/compute/beta/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"
    }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que deseas crear la plantilla de instancias.
  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.
  • MACHINE_TYPE: es 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: especifica una de las siguientes opciones:

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

    • IMAGE_FAMILY: Es una familia de imágenes. Esto especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas debian-10, se usa la versión más reciente de la familia de imágenes de Debian 10.

  • DURATION: la duración de la que deseas que se ejecuten las VMs. El MIG borra la VM de forma automática después de la duración especificada.

    Formatea la duración en forma de la cantidad de días, horas, minutos y segundos seguidos de d, h, m y s, respectivamente. Por ejemplo, especifica 30m para una duración de 30 minutos o especifica 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).

Crea una plantilla de instancias con una hora de finalización para las VMs

Para finalizar de forma automática las VMs de un MIG en un momento específico, establece una hora de finalización (terminationTime) en la plantilla de instancias. Puedes establecer una fecha y hora en las que deseas que un MIG finalice las VMs.

Console

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

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancias.

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

    • Si deseas usar la plantilla de instancias entre regiones, elige Global.
    • Si deseas reducir la dependencia entre regiones, elige Regional.
  4. Si eliges regional, selecciona la región en la que deseas crear tu plantilla de instancias.

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

  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, hora y zona horaria para la finalización automática.

  7. En la lista Finalización de VM, selecciona Borrar.

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

  9. Haz clic en Crear.

gcloud

Usa el comando instance-templates create beta. Para borrar las VMs de forma automática en un momento específico, incluye la marca --termination-time y establece la marca --instance-termination-action en DELETE de la siguiente manera:

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

Reemplaza lo siguiente:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.
  • TIME: Es la hora en la que deseas que se finalice esta VM de forma automática. El tiempo que especifiques debe ser al menos 30 segundos en el futuro y 120 días como máximo. Dale formato a la hora como una marca de tiempo RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Reemplaza lo siguiente:

    • YYYY-MM-DD: una fecha con formato de un año de 4 dígitos, un mes de 2 dígitos y un día de 2 dígitos, separado del mes por guiones.
    • HH:MM:SS: una hora con formato de hora de 2 dígitos con el formato de 24 horas, minutos de 2 dígitos y segundos de 2 dígitos separados por dos puntos
    • OFFSET: la zona horaria con formato como una compensación del horario universal coordinado (UTC). Por ejemplo, para usar la hora estándar del Pacífico (PST), que es 8 horas antes del UTC, especifica -08:00. Como alternativa, para no usar compensación (UTC+0), especifica Z.

REST

Usa el método beta instanceTemplates.insert. Para borrar las VMs de forma automática en un momento específico, incluye el campo terminationTime y configura el campo instanceTerminationAction como DELETE de la siguiente manera:

POST https://compute.googleapis.com/compute/beta/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"
    }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que deseas crear la plantilla de instancias.
  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.
  • MACHINE_TYPE: es 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: especifica una de las siguientes opciones:

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

    • IMAGE_FAMILY: Es una familia de imágenes. Esto especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas debian-10, se usa la versión más reciente de la familia de imágenes de Debian 10.

  • TIME: Es la hora en la que deseas que se finalice esta VM de forma automática. El tiempo que especifiques debe ser al menos 30 segundos en el futuro y 120 días como máximo. Dale formato a la hora como una marca de tiempo RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Reemplaza lo siguiente:

    • YYYY-MM-DD: una fecha con formato de un año de 4 dígitos, un mes de 2 dígitos y un día de 2 dígitos, separado del mes por guiones.
    • HH:MM:SS: una hora con formato de hora de 2 dígitos con el formato de 24 horas, minutos de 2 dígitos y segundos de 2 dígitos separados por dos puntos
    • OFFSET: la zona horaria con formato como una compensación del horario universal coordinado (UTC). Por ejemplo, para usar la hora estándar del Pacífico (PST), que es 8 horas antes del UTC, especifica -08:00. Como alternativa, para no usar compensación (UTC+0), especifica Z.

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

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

Según el tipo de límite de tiempo que especifiques, la marca de tiempo de finalización de una VM se establece de la siguiente manera:

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

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

    Cuando especificas una duración, la marca de tiempo de finalización se establece en relación con la hora de creación o inicio más reciente de la VM. Si la VM se vuelve a crear, se reinicia, se reanuda o se reemplaza, 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 según la última vez que se creó o inició cada VM. Por ejemplo, si se repara una VM, la marca de tiempo de finalización de la VM se vuelve a calcular si agregas la duración a la hora en que se volvió a crear la VM durante la reparación.

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

    terminationTimestamp de una VM = terminationTime

    Cuando especificas una hora, la marca de tiempo de finalización se establece en esa hora, siempre que la hora sea en el futuro. Si ya pasó la hora de finalización, cualquier acción de MIG que intente crear, reiniciar o reemplazar una VM fallará con un error. Para resolver este error, debes crear una plantilla de instancias nueva con una hora de finalización en el futuro y aplicar esa plantilla al MIG. Si deseas usar las propiedades existentes de la plantilla en la plantilla nueva, crea una plantilla de instancias basada en la plantilla existente.

Durante una actualización de la VM, la marca de tiempo de finalización no cambia. Por ejemplo, si estableces el nivel de interrupción para las actualizaciones a REFRESH, la marca de tiempo de finalización se conserva cada vez que el MIG actualiza la VM.

Cuando suspendes o detienes una VM en un MIG, la marca de tiempo de finalización se borra de forma automática, sin importar el tipo de límite de tiempo. Cuando reanudas o inicias una VM, la marca de tiempo de finalización se vuelve a establecer según el tipo de límite de tiempo, como se explicó antes en esta sección.

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

El ajuste de escala automático permite que tu MIG agregue o quite VMs de forma automática en función de los aumentos o disminuciones en la carga. Cuando un MIG borra las VMs que alcanzaron sus marcas de tiempo de finalización, el MIG crea VMs nuevas para mantener el tamaño recomendado por el escalador automático. Las VMs nuevas se ejecutan durante el límite de tiempo especificado. Si la recomendación del escalador automático es reducir la cantidad de VMs, el MIG borra las VMs incluso antes de que alcancen sus límites de tiempo.

Si configuraste programas de escalamiento, las VMs se ejecutarán solo hasta el final de un programa o hasta que una VM alcance su marca de tiempo de finalización, lo que ocurra primero.

¿Qué sigue?