Limitar o tempo de execução de VMs em um MIG


Neste documento, descrevemos como encerrar automaticamente máquinas virtuais (VMs) em um grupo gerenciado de instâncias (MIG) especificando um limite de tempo para as VMs. Também descreve como o limite de tempo funciona para VMs em um MIG.

É possível otimizar cargas de trabalho temporárias especificando um limite de tempo para as VMs em um MIG. Quando uma VM atinge o limite de tempo, o MIG a encerra (exclui) automaticamente. Limitar o tempo de execução de VMs em um MIG por um limite de tempo ajuda a minimizar custos e liberar cota.

Para saber como especificar um limite de tempo para uma VM independente, consulte Limitar o tempo de execução de uma VM. Se você quiser que um MIG adicione ou exclua VMs automaticamente com base nas cargas de trabalho, consulte Como fazer escalonamento automático de grupos de instâncias.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud, não é necessário configurar a autenticação.

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Limitar o tempo de execução de VMs em um MIG

É possível limitar o tempo de execução das VMs em um MIG especificando um limite de tempo no modelo de instância usado para o MIG. Quando o MIG cria VMs com base no modelo, o limite de tempo é aplicado a cada VM.

É possível especificar um destes dois tipos de limite:

  • Limite de tempo como duração da execução
  • Limite de tempo como rescisão

Para especificar um limite de tempo para as VMs em um MIG, siga estas etapas:

  1. Crie um modelo de instância com duração de execução para VMs ou com um horário de encerramento para VMs.

  2. Use o modelo de instância para criar um MIG ou atualizar um MIG.

Limitações

  • Ao criar um modelo de instância para especificar um limite de tempo para VMs em um MIG, as seguintes limitações se aplicam:

    • Não é possível definir a ação de encerramento como STOP. Os MIGs aceitam apenas DELETE.
    • Não é possível usar VMs spot.
  • Não é possível criar uma solicitação de redimensionamento em um MIG que use um modelo de instância que limita o tempo de execução da VM.

  • Não é possível limitar o tempo de execução das VMs em um MIG regional com o formato de distribuição EVEN e a redistribuição proativa de instâncias ativadas.

Criar um modelo de instância com duração de execução para VMs

Para encerrar automaticamente as VMs em um MIG depois de serem executadas por um determinado período, defina uma duração máxima (maxRunDuration) no modelo de instância.

Console

  1. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Selecione o Local da seguinte forma:

    • Se você quiser usar o modelo de instância em várias regiões, escolha Global.
    • Se você quiser reduzir a dependência entre regiões, escolha Regional.
  4. Se você escolheu regional, selecione a Região em que quer criar o modelo de instância.

  5. Na seção Políticas de disponibilidade, abra Configurações avançadas do modelo de provisionamento de VM.

  6. Marque a caixa de seleção Definir um limite de tempo para a VM.

  7. No campo Tipo de limite de tempo, selecione Por horas (padrão) para especificar o limite de tempo como uma duração. No campo a seguir, insira a duração em horas.

  8. Na lista No encerramento da VM, selecione Excluir.

  9. Nos campos a seguir, aceite os valores padrão ou os modifique conforme necessário.

  10. Clique em Criar.

gcloud

Use o comando instance-templates create Beta. Para excluir VMs automaticamente após um período específico, inclua a sinalização --max-run-duration e defina a sinalização --instance-termination-action como DELETE da seguinte maneira:

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

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • DURATION: a duração da execução das VMs solicitadas. O MIG exclui automaticamente a VM após a duração especificada.

    Formate a duração como o número de dias, horas, minutos e segundos seguidos por d, h, m e s, respectivamente. Por exemplo, especifique 30m para uma duração de 30 minutos ou especifique 1d2h3m4s para uma duração de um dia, duas horas, três minutos e quatro segundos. A duração mínima é de 30 segundos (30s) e a máxima é de 120 dias (120d).

REST

Use o método Beta instanceTemplates.insert. Para excluir VMs automaticamente após um período específico, inclua o campo maxRunDuration e defina o campo instanceTerminationAction como DELETE da seguinte maneira:

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

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar o modelo de instância.
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina predefinido ou personalizado para as VMs no grupo.
  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud.
  • IMAGE ou IMAGE_FAMILY - especifique uma das seguintes opções:

    • IMAGE: uma versão específica da imagem do SO, por exemplo, debian-10-buster-v20200309.

    • IMAGE_FAMILY: uma família de imagens. Especifica a imagem do SO mais recente e não descontinuada. Por exemplo, se você especificar debian-10, a versão mais recente na família de imagens do Debian 10 será usada.

  • DURATION: a duração da execução das VMs solicitadas. O MIG exclui automaticamente a VM após a duração especificada.

    Formate a duração como o número de dias, horas, minutos e segundos seguidos por d, h, m e s, respectivamente. Por exemplo, especifique 30m para uma duração de 30 minutos ou especifique 1d2h3m4s para uma duração de um dia, duas horas, três minutos e quatro segundos. A duração mínima é de 30 segundos (30s) e a máxima é de 120 dias (120d).

Criar um modelo de instância com um horário de encerramento para VMs

Para encerrar automaticamente as VMs em um MIG em um horário específico, defina um horário de encerramento (terminationTime) no modelo de instância. É possível definir uma data e hora em que você quer que um MIG encerre as VMs.

Console

  1. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Selecione o Local da seguinte forma:

    • Se você quiser usar o modelo de instância em várias regiões, escolha Global.
    • Se você quiser reduzir a dependência entre regiões, escolha Regional.
  4. Se você escolheu regional, selecione a Região em que quer criar o modelo de instância.

  5. Na seção Políticas de disponibilidade, abra Configurações avançadas do modelo de provisionamento de VM.

  6. No campo Tipo de limite de tempo, selecione Por data para especificar o limite como um horário e data. No campo a seguir, clique em Selecionar data e hora e escolha a data, a hora e o fuso horário para o encerramento automático.

  7. Na lista No encerramento da VM, selecione Excluir.

  8. Nos campos a seguir, aceite os valores padrão ou os modifique conforme necessário.

  9. Clique em Criar.

gcloud

Use o comando instance-templates create Beta. Para excluir VMs automaticamente em um horário específico, inclua a sinalização --termination-time e defina a sinalização --instance-termination-action como DELETE da seguinte maneira:

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

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • TIME: o tempo em que você quer que a VM seja encerrada automaticamente. O tempo especificado precisa ser pelo menos 30 segundos no futuro e no máximo 120 dias no futuro. Formate o tempo como um carimbo de data/hora RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Substitua:

    • YYYY-MM-DD: uma data formatada como um ano de quatro dígitos, um mês de dois dígitos e um dia de dois dígitos do mês, separado por hifens.
    • HH:MM:SS: um horário formatado como uma hora de dois dígitos usando o horário de 24 horas, minutos de dois dígitos e segundos de dois dígitos separados por hífens.
    • OFFSET: fuso horário formatado como um deslocamento Tempo Universal Coordenado (UTC). Por exemplo, para usar o Horário Padrão do Pacífico (PST), que é oito horas antes do UTC, especifique -08:00. Como alternativa, para não usar deslocamento (UTC+0), especifique Z.

REST

Use o método Beta instanceTemplates.insert. Para excluir VMs automaticamente em um horário específico, inclua o campo terminationTime e defina o campo instanceTerminationAction como DELETE da seguinte maneira:

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

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar o modelo de instância.
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina predefinido ou personalizado para as VMs no grupo.
  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud.
  • IMAGE ou IMAGE_FAMILY - especifique uma das seguintes opções:

    • IMAGE: uma versão específica da imagem do SO, por exemplo, debian-10-buster-v20200309.

    • IMAGE_FAMILY: uma família de imagens. Especifica a imagem do SO mais recente e não descontinuada. Por exemplo, se você especificar debian-10, a versão mais recente na família de imagens do Debian 10 será usada.

  • TIME: o tempo em que você quer que a VM seja encerrada automaticamente. O tempo especificado precisa ser pelo menos 30 segundos no futuro e no máximo 120 dias no futuro. Formate o tempo como um carimbo de data/hora RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Substitua:

    • YYYY-MM-DD: uma data formatada como um ano de quatro dígitos, um mês de dois dígitos e um dia de dois dígitos do mês, separado por hifens.
    • HH:MM:SS: um horário formatado como uma hora de dois dígitos usando o horário de 24 horas, minutos de dois dígitos e segundos de dois dígitos separados por hífens.
    • OFFSET: fuso horário formatado como um deslocamento Tempo Universal Coordenado (UTC). Por exemplo, para usar o Horário Padrão do Pacífico (PST), que é oito horas antes do UTC, especifique -08:00. Como alternativa, para não usar deslocamento (UTC+0), especifique Z.

Como o limite de tempo funciona para VMs em um MIG

Quando você especifica um limite de tempo para VMs em um MIG, o horário em que ele encerrará uma VM é definido automaticamente no campo do carimbo de data/hora de encerramento (terminationTimestamp) da VM.

Com base no tipo de limite de tempo especificado, o carimbo de data/hora de encerramento de uma VM é definido da seguinte maneira:

  • Limite de tempo como duração da execução (maxRunDuration):

    terminationTimestamp de uma VM = horário de início ou de criação mais recente da VM + maxRunDuration

    Ao especificar uma duração, o carimbo de data/hora de encerramento é definido em relação ao horário de início ou de criação mais recente da VM. Se a VM for recriada, reiniciada, retomada ou substituída, o carimbo de data/hora de encerramento será recalculado. O carimbo de data/hora de encerramento pode variar nas VMs em um MIG com base no horário em que cada VM foi criada ou iniciada pela última vez. Por exemplo, se uma VM for reparada, o carimbo de data/hora de encerramento será recalculado adicionando a duração à hora em que a VM foi recriada durante o reparo.

  • Limite de tempo de rescisão (terminationTime):

    terminationTimestamp de uma VM = terminationTime

    Quando você especifica uma hora, o carimbo de data/hora de término é definido como esse horário, desde que esteja no futuro. Se o horário de encerramento tiver passado, qualquer ação de MIG que tente criar, reiniciar ou substituir uma VM falhará com um erro. Para resolver esse erro, crie um novo modelo de instância com um horário de encerramento no futuro e aplique esse modelo ao MIG. Para usar as propriedades do modelo atual no novo modelo, crie um modelo de instância com base nele.

Durante uma atualização de VM, o carimbo de data/hora de encerramento não é alterado. Por exemplo, se você definir o nível de interrupção das atualizações para REFRESH, o carimbo de data/hora de encerramento será mantido sempre que o MIG atualizar a VM.

Quando você suspensa ou interrompe uma VM em um MIG, o carimbo de data/hora de encerramento é apagado automaticamente, independentemente do tipo de limite de tempo. Quando você retoma ou inicia uma VM, o carimbo de data/hora de encerramento é definido novamente com base no tipo de limite de tempo, conforme explicado anteriormente nesta seção.

Como o escalonamento automático funciona quando um limite de tempo é definido

O escalonamento automático permite que seu MIG adicione ou remova VMs automaticamente com base em aumentos ou reduções de carga. Quando um MIG exclui VMs que atingiram os carimbos de data/hora de encerramento, ele cria novas VMs para manter o tamanho recomendado pelo escalonador automático. As novas VMs são executadas durante o limite de tempo especificado. Se a recomendação do escalonador automático for reduzir o número de VMs, o MIG excluirá as VMs mesmo antes que elas atinjam os limites de tempo.

Se você tiver configurado as programações de escalonamento, as VMs serão executadas somente até o final de uma programação ou até uma VM atingir o carimbo de data/hora de encerramento, o que ocorrer primeiro.

A seguir