Acelerar o escalonamento horizontal com VMs suspensas e interrompidas


Neste documento, explicamos como o pool em espera de instâncias de máquina virtual (VM) suspensas e interrompidas funciona e como é possível usar o pool em espera para acelerar o escalonamento horizontal de um grupo gerenciado de instâncias (MIG).

Antes de começar

  • Consulte a página introdutória sobre VMs suspensas e interrompidas em um MIG.
  • 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 selecionando uma das seguintes opções:

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Para usar os exemplos do Terraform nesta página em um ambiente de desenvolvimento local, instale e inicialize a gcloud CLI e, em seguida, configure o Application Default Credentials com suas credenciais de usuário.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Confira mais informações em Set up authentication for a local development environment.

      REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Usar a API MIG para escalonamento automático

Recomendamos o uso do escalonador automático do Compute Engine para escalonamento automático do MIG. No entanto, se por algum motivo você preferir usar um escalonador automático diferente, use os endpoints da API MIG para lidar com VMs suspensas e interrompidas.

Com a API MIG, é possível conectar o escalonador automático, por exemplo, o escalonador automático do GKE, e usar o pool de VMs em espera para um escalonamento horizontal mais rápido.

Escolher entre pools suspensos e interrompidos

A escolha entre pools suspensos e interrompidos depende do seu caso de uso específico. Para melhores desempenhos, teste diferentes tipos de pools em espera nos cenários de escalonamento horizontal para determinar qual atende melhor às suas necessidades. Cargas de trabalho diferentes podem mostrar um tempo menor para exibição com opções diferentes. Em alguns casos, a operação de copiar o estado da memória do armazenamento para a VM pode levar mais tempo do que reiniciar a VM ou criar uma nova VM do zero.

Para encontrar a melhor abordagem, comece com estas diretrizes:

  • Use VMs suspensas se elas exigirem uma inicialização demorada de memória, porque as VMs suspensas preservam o estado da memória. Verifique se a inscrição pode ser suspensa e retomada. Manter o estado da memória exige mais armazenamento e pode gerar custos extras.
  • Use VMs interrompidas se a inicialização da VM se concentrar principalmente na inicialização de dados armazenados nos discos permanentes.

Editar a política de espera em um MIG

Nesta seção, descrevemos como definir o atraso inicial e o modo de pool em espera para escalonar horizontalmente o pool.

Console

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

    Acesse grupo de instâncias

  2. Na coluna Nome da lista, clique no nome do grupo de instâncias em que você quer editar a política de espera.

  3. Clique em Editar para modificar o grupo gerenciado de instâncias.

  4. Clique em Mostrar configuração avançada.

  5. Na seção Pool em espera, em Modo, selecione Escalonar horizontalmente.

  6. No campo Atraso inicial, insira o número de segundos que o MIG precisa aguardar antes de suspender ou interromper uma VM. O atraso inicial dá ao script de inicialização o tempo para preparar a VM para escalonamento horizontal rápido.

  7. Clique em Salvar.

gcloud

Use o comando instance-groups managed update e especifique o modo de operação e o atraso inicial.

gcloud compute instance-groups managed update MIG_NAME \
  --standby-policy-mode=scale-out-pool \
  --standby-policy-initial-delay=DELAY \
  [--region=REGION | --zone=ZONE]

Substitua:

  • MIG_NAME: o nome do MIG;
  • DELAY: o número de segundos que o MIG precisa aguardar antes de suspender ou interromper uma VM. O atraso inicial dá ao script de inicialização o tempo para preparar a VM para escalonamento horizontal rápido.
  • REGION: para um MIG regional, a região em que o MIG está localizado.
  • ZONE: para um MIG zonal, a zona em que o MIG está localizado.

Terraform

O exemplo a seguir cria um MIG zonal com uma política de reserva. Use o bloco standby_policy para definir um atraso inicial e definir o modo como SCALE_OUT_POOL.

O exemplo usa o recurso google_compute_instance_group_manager. Para um MIG regional, use o método google_compute_region_instance_group_manager.

resource "google_compute_instance_group_manager" "default" {
  name               = "standby-mig"
  base_instance_name = "test"
  target_size        = 3
  zone               = "us-central1-f"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  standby_policy {
    initial_delay_sec = 50
    mode              = "SCALE_OUT_POOL"
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

REST

Use o método instanceGroupManager.patch e especifique o modo de operação e o atraso inicial no corpo da solicitação. Para MIGs regionais, use o método regionInstanceGroupManager.patch.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
// ...
"standbyPolicy": {
  "mode": "SCALE_OUT_POOL",
  "initialDelaySec": DELAY
}
// ...
}

Substitua:

  • PROJECT_ID: ID do projeto.
  • ZONE: para um MIG zonal, a zona em que o MIG está localizado.
    • zones/ZONE por regions/REGION e especifique a região do MIG se ele for regional;
  • MIG_NAME: o nome do MIG;
  • DELAY: o número de segundos que o MIG precisa aguardar antes de suspender ou interromper uma VM. O atraso inicial dá ao script de inicialização o tempo para preparar a VM para escalonamento horizontal rápido.

Redimensionar o pool em espera em um MIG

Esta seção descreve como redimensionar os pools de espera de VMs suspensas e interrompidas em um MIG.

Console

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

    Acesse grupo de instâncias

  2. Na coluna Nome da lista, clique no nome do grupo de instâncias em que você quer editar os tamanhos do pool em espera.

  3. Clique em Editar para modificar o grupo gerenciado de instâncias.

  4. Clique em Mostrar configuração avançada.

  5. Na seção Pool em espera, insira os novos tamanhos nos campos VMs suspensas e VMs interrompidas.

  6. Clique em Salvar.

gcloud

Use o comando instance-groups managed update com as sinalizações --suspended-size e --stopped-size.

gcloud compute instance-groups managed update MIG_NAME \
--suspended-size=SUSPENDED_SIZE \
--stopped-size=STOPPED_SIZE \
[--region=REGION | --zone=ZONE]

Substitua:

  • MIG_NAME: o nome do MIG em que uma instância será suspensa.
  • SUSPENDED_SIZE: o número de VMs suspensas que o MIG precisa manter a qualquer momento.
  • STOPPED_SIZE: o número de VMs interrompidas que o MIG precisa manter a qualquer momento.
  • REGION: para um MIG regional, a região em que o MIG está localizado.
  • ZONE: para um MIG zonal, a zona em que o MIG está localizado.

Terraform

O exemplo a seguir cria um MIG zonal com tamanhos de destino para VMs suspensas e interrompidas. Para definir os tamanhos de destino, use os argumentos target_suspended_size e target_stopped_size.

O exemplo usa o recurso google_compute_instance_group_manager. Para um MIG regional, use o método google_compute_region_instance_group_manager.

resource "google_compute_instance_group_manager" "default" {
  name                  = "standby-mig"
  base_instance_name    = "test"
  target_size           = 1
  target_suspended_size = 1
  target_stopped_size   = 2
  zone                  = "us-central1-f"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  standby_policy {
    initial_delay_sec = 50
    mode              = "SCALE_OUT_POOL"
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

REST

Use o método instanceGroupManager.patch e especifique os tamanhos dos pools de VMs suspensas e interrompidas no corpo da solicitação. Para MIGs regionais, use o método regionInstanceGroupManager.patch.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
// ...
"targetSuspendedSize": SUSPENDED_SIZE,
"targetStoppedSize": STOPPED_SIZE
// ...
}

Substitua:

  • PROJECT_ID: o ID do projeto para a solicitação.
  • ZONE: para um MIG zonal, a zona em que o MIG está localizado.
    • zones/ZONE por regions/REGION e especifique a região do MIG se ele for regional;
  • MIG_NAME: o nome do MIG em que uma instância será interrompida.
  • SUSPENDED_SIZE: o número de VMs suspensas que o MIG precisa manter a qualquer momento.
  • STOPPED_SIZE: o número de VMs interrompidas que o MIG precisa manter a qualquer momento.

A seguir