Adicionar e remover VMs de um MIG


Depois de criar um grupo de instâncias gerenciadas (MIG), convém adicionar ou remover VMs desse grupo para atender às necessidades da carga de trabalho. Se você atingiu o padrão limite para o número máximo de VMs que podem ser adicionadas a um MIG e você precisa de mais VMs; é possívelaumentar o limite de tamanho do MIG.

Para adicionar ou remover VMs em um MIG, faça o seguinte:

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.

    Terraform

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

    1. Instale a CLI do Google Cloud.
    2. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    3. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login

    Veja mais informações em: Configurar a autenticação para um ambiente de desenvolvimento local.

    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

Definir o tamanho de destino do grupo

É possível definir o tamanho de destino de um MIG automaticamente usando um escalonador automático ou definir o tamanho manualmente.

Como adicionar e remover VMs automaticamente em um MIG

É possível configurar grupos de instâncias gerenciadas para adicionar ou remover VMs automaticamente com base nas cargas de trabalho delas. Os aplicativos lidam de maneira suave com aumentos no tráfego, e você reduz os custos quando a necessidade de recursos de computação é menor. Para iniciar o escalonamento dos grupos de instâncias gerenciadas, consulte Criar um MIG com o escalonamento automático.

Para mais informações, consulte Escalonamento automático de grupos de instâncias.

Como definir manualmente o tamanho de um MIG

Se um grupo de instâncias gerenciadas ainda não estiver definido para escalonar automaticamente, é possível redimensioná-lo manualmente para alterar o número de instâncias. Se você aumentar o tamanho, o grupo usará o modelo de instância atual para adicionar novas instâncias. Se você diminuir o tamanho, o grupo de instâncias gerenciadas excluirá as VMs do grupo. O grupo exclui instâncias com currentAction de DELETING, CREATING e RECREATING antes de excluir instâncias em execução sem ações agendadas.

Se o grupo fizer parte de um serviço de back-end que tenha ativado a diminuição da conexão, poderá levar até 60 segundos após a duração da diminuição da conexão antes que a instância de VM seja removida ou excluída.

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 que você quer redimensionar.

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

  4. Em Número de instâncias, especifique o número de instâncias que você quer incluir no grupo. Se o escalonamento automático estiver ativado, o grupo vai adicionar ou remover instâncias automaticamente, conforme necessário. No entanto, é possível alterar os valores de número mínimo de instâncias e número máximo de instâncias para ajustar indiretamente o tamanho do grupo por meio do escalonador automático.

  5. Clique em Salvar para aplicar o novo modelo.

gcloud

Use o comando resize.

gcloud compute instance-groups managed resize INSTANCE_GROUP_NAME \
    --size NEW_SIZE \
    --zone ZONE

REST

Chame o método resize para um recurso MIG zonal ou regional . Especifique o novo tamanho do grupo de instâncias como um parâmetro.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/resize?size=NEW_SIZE

Se o grupo for de instâncias gerenciadas por região, substitua zones/ZONE por regions/REGION.

Depois que você faz uma solicitação para redimensionar um grupo de instâncias gerenciadas, as VMs são iniciadas ou interrompidas assim que o sistema pode provisioná-las ou excluí-las. Esse processo pode demorar bastante, dependendo do número de instâncias no grupo. Verifique o status das instâncias no grupo de instâncias gerenciadas.

Como desativar o modo de novas tentativas de criação durante o redimensionamento

Por padrão, se a criação inicial de uma instância de VM falhar, o grupo de instâncias gerenciadas tentará continuamente criar a VM até que ela seja gerada. No entanto, se você não quiser novas tentativas de criação automática, desative o modo de novas tentativas de criação ao redimensionar o grupo de instâncias. Nesse modo, o grupo de instâncias gerenciadas tenta criar todas as instâncias apenas uma vez. Se houver um erro durante a criação da instância, o grupo de instâncias gerenciadas desistirá dessa instância, a removerá da lista de instâncias gerenciadas do grupo e diminuirá o tamanho de destino do grupo de instâncias gerenciadas.

Esse modo se aplica somente durante a primeira tentativa de criação de uma VM. Se uma VM for criada com sucesso enquanto esse modo estiver ativado, ela se comportará da mesma forma que todas as outras VMs criadas com uma solicitação de redimensionamento regular. Em particular, se uma VM em execução é desativada inesperadamente em um momento posterior e precisa ser recriada, esse modo não afeta o comportamento de recriação nesse cenário.

A desativação do modo de novas tentativas de criação é especialmente útil em cenários em que você tem sistemas que criam automaticamente grupos de VMs em que não é necessário um número exato de VMs. Talvez você prefira se estabilizar rapidamente no tamanho do grupo de instâncias gerenciadas e ser flexível no número de VMs no grupo, em vez de esperar indefinidamente até que todas as instâncias solicitadas sejam criadas, o que poderá ser adiado de forma temporária ou permanente devido a erros de cota ou outros problemas não relacionados.

Limitações

  • Não é possível desativar novas tentativas de criação para um MIG regional com um formato de distribuição de destino EVEN.
  • Para MIGs regionais com um formato de distribuição de destino BALANCED ou ANY_SINGLE_ZONE, é necessário desativar a redistribuição proativa de instâncias antes de desativar o modo de novas tentativas de criação.
  • Não é possível desativar novas tentativas de criação para MIGs com escalonamento automático.

Para redimensionar um grupo gerenciado de instâncias quando o modo de novas tentativas de criação está desativado, use a CLI do Google Cloud ou a REST.

gcloud

Use o comando resize beta com a sinalização --no-creation-retries.

gcloud beta compute instance-groups managed resize INSTANCE_GROUP_NAME \
    --size NEW_SIZE \
    --no-creation-retries \
    [--region REGION | --zone ZONE]

Substitua:

  • INSTANCE_GROUP_NAME: o nome do MIG que você quer redimensionar.
  • NEW_SIZE: o número pretendido de instâncias em execução no grupo de instâncias gerenciadas.
  • ZONE: para MIGs zonais, a zona em que o MIG está localizado.
  • REGION: para MIGs regionais, a região em que o MIG está localizado.

REST

Para um MIG zonal, use o método instanceGroupManagers.resizeAdvanced beta. Para um MIG regional, use o método regionInstanceGroupManagers.resizeAdvanced beta. Especifique o novo tamanho do grupo de instâncias e o campo noCreationRetries no corpo da solicitação.

Por exemplo, faça a seguinte chamada para redimensionar um MIG zonal com o modo de novas tentativas de criação desativado.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/resizeAdvanced

{
 "targetSize": NEW_SIZE,
 "noCreationRetries": true
}

Substitua:

  • PROJECT_ID: o ID do projeto
  • ZONE: a zona em que o MIG está localizado. Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região. Para mais informações, consulte Sobre MIGs regionais.
  • INSTANCE_GROUP_NAME: o nome do MIG que você quer redimensionar.
  • NEW_SIZE: o número pretendido de instâncias em execução no grupo de instâncias gerenciadas.

    É possível ver quais instâncias estão sendo criadas e em qual modo usando o método listManagedInstances. Quando o modo de novas tentativas de criação está desativado, as instâncias criadas têm um currentAction de CREATING_WITHOUT_RETRIES.

Adicionar, remover ou abandonar instâncias específicas

Como criar instâncias com nomes específicos em MIGs

Se você tiver um sistema que depende de nomes específicos, adicione VMs com esses nomes a um MIG que já existe.

Os nomes que você atribuir a essas instâncias gerenciadas persistirão se o MIG recriar a VM. Para ver mais informações sobre como preservar o estado de instâncias de MIG, consulte MIGs com estado.

Limitações

Se você criar instâncias com nomes específicos, observe o seguinte:

  • Desative o escalonamento automático durante o processo de criação da instância.
  • Defina a política de atualização do MIG como oportunista.
  • Se você estiver atualizando um MIG regional, observe o seguinte:
  • Não será possível usar nomes de instância de VM duplicados no mesmo projeto.

É possível usar a gcloud CLI ou a REST para adicionar VMs com nomes específicos a um MIG que já existe.

gcloud

Use o comando instance-groups managed create-instance.

gcloud compute instance-groups managed create-instance INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    [--region REGION | --zone ZONE]

Substitua:

  • INSTANCE_GROUP_NAME é o nome do MIG regional ou por zona que receberá uma nova instância.
  • INSTANCE_NAME é o nome que você quer atribuir à nova instância.

REST

Envie uma solicitação POST ao método regionInstanceGroupManagers.createInstances. Para grupos de instâncias gerenciadas zonais, use o método instanceGroupManagers.createInstances. No corpo da solicitação, inclua o campo instances com os nomes de uma ou mais instâncias.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/createInstances
{
  "instances": [
    {
      "name": "INSTANCE_NAME_1"
    },
    {
      "name": "INSTANCE_NAME_2"
    }
  ]
}

Como excluir instâncias específicas de um grupo

É possível excluir instâncias de VM individuais em um grupo de instâncias gerenciadas. A exclusão de instâncias reduz o targetSize especificado do grupo de instâncias e remove as VMs de todos os pools de destino de que são membros.

A exclusão de instâncias de um grupo de instâncias gerenciadas não altera as configurações especificadas do escalonador automático. Se você excluir instâncias de um grupo de instâncias gerenciadas, o escalonador automático poderá detectar um aumento na carga de trabalho nas outras instâncias do grupo e aumentar o tamanho dele para o nível anterior. Para evitar isso, interrompa o escalonador automático antes de tentar excluir as instâncias.

Se o grupo fizer parte de um serviço de back-end que tenha ativado a diminuição da conexão, poderá levar até 60 segundos após a duração da diminuição da conexão antes que a instância de VM seja removida ou excluída.

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 de que você quer excluir instâncias individuais. Uma página é aberta com as propriedades do grupo e uma lista de instâncias incluídas nele.

  3. Na seção Membros, na lista de instâncias, selecione uma ou mais instâncias que você quer excluir.

  4. Clique em Excluir instância. As instâncias selecionadas são excluídas.

gcloud

Para excluir uma instância com a CLI gcloud, use o comando instance-groups managed delete-instances:

gcloud compute instance-groups managed delete-instances INSTANCE_GROUP_NAME \
    --instances INSTANCE_NAME_1,INSTANCE_NAME_2 \
    [--region REGION | --zone ZONE]

O comando retorna o status da operação por instância:

  • SUCCESS será retornado se a CLI gcloud tiver excluído a instância.
  • FAIL será retornado para todas as instâncias se alguma instância especificada na solicitação não for membro do grupo, se algum membro já estiver sendo excluído ou abandonado ou se a solicitação falhar para qualquer outra motivo.
  • SKIPPED será retornado somente se você usar a sinalização --skip-instances-on-validation-error e a instância não for membro do grupo ou se já estiver sendo excluída ou abandonada.
  • MEMBER_NOT_FOUND é retornado apenas para grupos regionais quando a CLI gcloud não conseguiu resolver a zona a partir do nome da instância.

Se você prevê que sua solicitação de exclusão pode entrar em conflito com operações simultâneas, use a sinalização --skip-instances-on-validation-error. Essa sinalização especifica se a solicitação deve continuar, mesmo que a solicitação inclua instâncias que não sejam membros do grupo ou que já estejam sendo excluídas ou abandonadas. Por exemplo, instâncias que estão sendo excluídas por um escalonador automático. Por padrão, se você omitir essa sinalização e essa instância for especificada na solicitação, a operação falhará. A operação sempre falhará se a solicitação contiver um nome de instância formatado incorretamente ou uma referência a uma instância que exista em uma zona ou região diferente da zona ou região do grupo.

Por exemplo, o comando a seguir solicita a exclusão de quatro instâncias. No entanto, três delas não estão mais no grupo:

gcloud compute instance-groups managed delete-instances example-mig \
    --instances=example-instance-1,example-instance-2,example-instance-3,example-instance-4 \
    --region=us-central1 \
    --skip-instances-on-validation-error

Neste exemplo, três instâncias não foram aprovadas na validação. Portanto, elas foram ignoradas, enquanto o example-instance-3 foi excluído:

Updated [https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceGroupManagers/example-mig].
PROJECT          ZONE           INSTANCE               STATUS   VALIDATION_ERROR
example-project  us-central1-a  example-instance-1     SKIPPED  Cannot delete instance https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance-1 that was already deleted.
example-project  us-central1-a  example-instance-2     SKIPPED  Cannot delete instance https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance-2 that was already abandoned.
example-project  us-central1-a  example-instance-3     SUCCESS
example-project  us-central1-a  example-instance-4     SKIPPED  Cannot find instance https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance-4.

Se você omitir a sinalização --skip-instances-on-validation-error e qualquer instância não passar na validação, nenhuma instância será excluída:

gcloud compute instance-groups managed delete-instances example-mig \
    --instances=example-instance-1,example-instance-2,example-instance-3,example-instance-4 \
    --region=us-central1

Updated [https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceGroupManagers/example-mig].
PROJECT          ZONE             INSTANCE              STATUS
example-project  us-central1-a    example-instance-1    FAIL
example-project  us-central1-a    example-instance-2    FAIL
example-project  us-central1-a    example-instance-3    FAIL
example-project  us-central1-a    example-instance-4    FAIL

REST

Envie uma solicitação POST ao método regionInstanceGroupManagers.deleteInstances. Para grupos de instâncias gerenciadas zonais, use o método instanceGroupManagers.deleteInstances.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/deleteInstances

{
  "instances": [
    "zones/ZONE/instances/INSTANCE_NAME_1",
    "zones/ZONE/instances/INSTANCE_NAME_2"
   ]
}

Se você prevê que sua solicitação de exclusão pode entrar em conflito com operações simultâneas, use a sinalização skipInstancesOnValidationError. Esse campo especifica se a solicitação deve continuar, mesmo que a solicitação inclua instâncias que não sejam membros do grupo ou que já estejam sendo excluídas ou abandonadas. Por exemplo, instâncias que estão sendo excluídas por um escalonador automático. Por padrão, se você omitir essa sinalização e essa instância for especificada na solicitação, a operação falhará. A operação sempre falhará se a solicitação contiver um nome de instância formatado incorretamente ou uma referência a uma instância que exista em uma zona ou região diferente da zona ou região do grupo.

Por exemplo, a seguinte solicitação para excluir duas instâncias será bem-sucedida, mesmo que uma delas já tenha sido excluída ou excluída:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/deleteInstances

{
 "instances": [
  "zones/ZONE/instances/INSTANCE_NAME_1",
  "zones/ZONE/instances/INSTANCE_NAME_2"
 ],
 "skipInstancesOnValidationError": true
}

Visualize as instâncias que foram ignoradas na operação visualizando a operação. Para MIGs regionais, use o método regionOperations.get. Para MIGs por zona, use o método zoneOperations.get. Os avisos são listados no campo de aviso da operação.

Depois que você fizer uma solicitação para excluir instâncias em um grupo de instâncias gerenciadas, as instâncias vão parar assim que o sistema puder excluí-las. Esse processo poderá durar uma quantidade significativa de tempo, dependendo do número de instâncias que você excluir do grupo. Verifique o status do grupo ou das instâncias gerenciadas.

Como abandonar instâncias de um MIG

Separe uma instância de VM de um grupo de instâncias gerenciadas para depurar problemas com instâncias individuais mais facilmente sem afetar o grupo como um todo. Abandonar uma instância de um grupo também remove a instância dos balanceadores de carga que foram atribuídos ao grupo de instâncias gerenciadas. Os pools de destino que foram atribuídos manualmente a instâncias individuais específicas não são removidos.

Não é possível adicionar uma instância de VM abandonada de volta ao grupo. O abandono de instâncias reduz o targetSize do grupo de instâncias, mas não altera as configurações especificadas do escalonador automático. Grupos de instâncias gerenciadas com um escalonador automático continuam a adicionar ou remover instâncias automaticamente conforme necessário. Para um MIG regional com escalonamento automático definido para o modo ONLY_SCALE_OUT, se você abandonar uma instância de VM para reduzir o tamanho de destino do MIG para o tamanho recomendado pelo escalonador automático, o escalonador automático pode criar uma nova instância de VM na mesma zona da VM abandonada. Nesses casos, para evitar a criação de uma nova instância de VM, tente abandonar a instância de VM de uma zona diferente.

Se o grupo fizer parte de um serviço de back-end que tenha ativado a diminuição da conexão, poderá levar até 60 segundos após a duração da diminuição da conexão antes que a instância de VM seja removida ou excluída.

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 com as instâncias que você quer remover. Uma página é aberta com as propriedades do grupo e uma lista de instâncias incluídas nele.

  3. Na seção Membros, na lista de instâncias, selecione uma ou mais instâncias que você quer remover do grupo.

  4. Clique em Remover do grupo. As instâncias selecionadas deixam o grupo, mas continuam a ser executadas fora dele.

gcloud

Para remover uma instância do grupo sem excluir a VM, use o comando instance-groups managed abandon-instances.

gcloud compute instance-groups managed abandon-instances INSTANCE_GROUP_NAME \
    --instances INSTANCE_NAME_1,INSTANCE_NAME_2 \
    [--region REGION | --zone ZONE]

REST

Envie uma solicitação POST ao método regionInstanceGroupManagers.abandonInstances. Para grupos de instâncias gerenciadas zonais, use o método instanceGroupManagers.abandonInstances.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/abandonInstances

{
 "instances": [
  "zones/ZONE/instances/INSTANCE_NAME_1",
  "zones/ZONE/instances/INSTANCE_NAME_2"
 ]
}

Depois que você fizer uma solicitação para abandonar instâncias de um grupo de instâncias gerenciadas, o grupo removerá as instâncias o mais rápido possível. Verifique o status do grupo ou das instâncias gerenciadas.

Aumentar o limite de tamanho do grupo

Por padrão, o limite de tamanho para um MIG zonal é de 1.000 VMs, e o limite de tamanho para um MIG regional é de 2.000 VMs. É possível aumentar ainda mais esses limites para 2.000 VMs em um MIG zonal e 4.000 VMs para um MIG regional.

Para aumentar os limites, defina o campo listManagedInstancesResults do grupo como PAGINATED. Se você ainda precisar de mais VMs no grupo, crie vários MIGs ou entre em contato com o suporte.

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 que você quer aumentar o limite de tamanho.

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

  4. Expanda a seção de configurações avançadas clicando em Mostrar configuração avançada.

  5. Em Resultados de chamadas de API da lista de instâncias gerenciadas, selecione a opção Paginado.

  6. Clique em Salvar para aplicar as mudanças.

gcloud

Para um MIG atual, use o comando update Beta:

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --list-managed-instances-results=PAGINATED

Para um novo MIG, use o comando Beta create:

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --list-managed-instances-results=PAGINATED

Terraform

Para aumentar o limite de tamanho de um MIG, defina o argumento list_managed_instances_results como PAGINATED.

O exemplo a seguir aumenta o limite de tamanho de um MIG zonal. Para mais informações sobre o recurso usado na amostra, consulte 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                           = "my-igm"
  base_instance_name             = "test"
  target_size                    = 7
  zone                           = "us-central1-f"
  list_managed_instances_results = "PAGINATED"
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
}

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

REST

Para um MIG zonal atual, use a BetainstanceGroupManagers.patch método ou, para um MIG regional, use o BetaregionInstanceGroupManagers.patch método –por exemplo:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/regionInstanceGroupManagers/INSTANCE_GROUP_NAME

{
  "listManagedInstancesResults": "PAGINATED",
}

Para um MIG zonal, use o método instanceGroupManagers.insert ou, para um MIG regional, use o método regionInstanceGroupManagers.insert.

Se você quiser voltar aos resultados de lista sem páginas, também precisará reverter para o limite de tamanho padrão do grupo. Para voltar, primeiro verifique se o grupo não excede o limite de tamanho padrão e, em seguida, defina o campo listManagedInstancesResults como PAGELESS.

A seguir