Como criar grupos de instâncias gerenciadas

Nesta página, descrevemos como criar um grupo de instâncias gerenciadas dentro de uma zona. Um grupo desse tipo contém instâncias idênticas que você gerencia como uma única entidade. Os grupos de instâncias gerenciadas mantêm a alta disponibilidade dos aplicativos, pois as instâncias ficam disponíveis (ou seja, no estado RUNNING) de maneira proativa. Os grupos de instâncias gerenciadas são compatíveis com escalonamento automático, balanceamento de carga, atualizações contínuas e muito mais.

Você também pode criar grupos de instâncias gerenciadas regionais, que contêm instâncias em várias zonas dentro da mesma região. Para saber mais sobre grupos de instâncias, leia a visão geral de grupos de instâncias.

Antes de começar

Limitações

  • Cada grupo de instâncias gerenciadas pode conter até 1.000 instâncias de VM.
  • Ao atualizar um grupo, é possível especificar no máximo 1.000 instâncias gerenciadas em uma única solicitação.

Como usar grupos de instâncias gerenciadas para aplicativos sem estado

Os grupos de instâncias gerenciadas destinam-se a auxiliar aplicativos sem estado que não dependem do estado específico das instâncias de VM subjacentes para serem executados. Com isso, é possível usar recursos como escalonamento automático e recuperação automática, em que o grupo de instâncias gerenciadas pode excluir e recriar instâncias automaticamente. Além disso, se uma instância for excluída do grupo de instâncias gerenciadas devido a uma ação do usuário, como parte da recuperação automática ou devido à manutenção de infraestrutura quando a instância não estiver definida para migração em tempo real, ela será recriada automaticamente com um novo disco permanente raiz.

Devido à natureza sem estado de grupos de instâncias gerenciadas, projete o aplicativo ou faça uma adição a ele para que não dependa de propriedades de instâncias específicas que não persistirão, como um endereço IP ou dados na memória. Da mesma maneira, o comportamento padrão dos discos permanentes de inicialização é excluí-las quando a instância de VM correspondente for excluída. Portanto, não dependa de discos de inicialização como dados permanentes em um grupo de instâncias gerenciadas.

Para conservar os dados, a recomendação do Google é manter as imagens do SO atualizadas, usar scripts de inicialização e fazer backup dos dados em outro local centralizado, como o Google Cloud Storage.

Nos modelos de instância, especifique uma imagem de contêiner ou uma imagem personalizada e os scripts de inicialização relevantes para que, quando uma instância for recriada, ela tenha os aplicativos de software necessários instalados e receba acesso aos dados exigidos. Para mais recomendações relacionadas à criação de modelos de instâncias, leia Modelos deterministas de instância.

Caso você decida manter os discos de inicialização associados aos grupos de instâncias gerenciadas, desative a opção disks.autoDelete para impedir que os discos permanentes de inicialização sejam excluídos, mas lembre-se de que isso não é recomendável e impedirá que o grupo de instâncias gerenciadas crie novas instâncias.

Como criar um grupo de instâncias gerenciadas

Antes de criar um grupo de instâncias gerenciadas, crie um modelo de instância para especificar a imagem do sistema operacional ou do contêiner e as configurações de cada instância do grupo.

Depois de criar o modelo, crie o grupo de instâncias gerenciadas por meio do Console do Google Cloud Platform, da ferramenta gcloud compute ou da API.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos de instâncias"

  2. Clique em Criar um grupo de instâncias.
  3. Digite um nome para o grupo de instâncias gerenciadas e selecione a zona em que você quer localizar o grupo.
  4. Em Tipo de grupo, selecione Grupo de instâncias gerenciadas.
  5. Em Modelo de instância, selecione um modelo. Se nenhum modelo estiver disponível, crie um modelo de instância.
  6. Especifique o número de instâncias que você quer criar no grupo. Também é possível ativar o escalonamento automático para que o grupo adicione ou remova automaticamente as instâncias com base no uso da CPU da instância ou na recuperação automática a fim de executar a verificação de integridade nas instâncias do grupo.
  7. Clique em Criar para criar o novo grupo.

gcloud

Crie um grupo de instâncias com o comando instance-groups managed create:

gcloud compute instance-groups managed create [NAME] \
    --base-instance-name [BASE_NAME] \
    --size [SIZE] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

em que você substituiria:

  • [NAME] pelo nome deste grupo de instâncias;
  • [BASE_NAME] pelo nome a ser usado para instâncias criadas neste grupo de instâncias. Como essas instâncias são idênticas, elas recebem uma string aleatória como parte do nome de cada uma delas. O nome de base precede essa string aleatória. Por exemplo, se o nome de base for example, as instâncias terão nomes como example-yahs, example-qtyz e assim por diante;
  • [SIZE] pelo tamanho do grupo de instâncias;
  • [INSTANCE_TEMPLATE] pelo nome do modelo de instância a ser usado para este grupo;
  • [ZONE] por uma das zonas disponíveis para o Compute Engine.

    Por exemplo, o seguinte comando cria um grupo de instâncias chamado example-group, cujo nome da instância de base é test. O grupo contém três instâncias:

    gcloud compute instance-groups managed create example-group
    --base-instance-name test
    --size 3
    --template an-instance-template

API

Na API, construa uma solicitação POST para o serviço instanceGroupManagers. No corpo da solicitação, inclua o nome do grupo desejado, o tamanho do grupo, o nome de base para as instâncias no grupo e o URL para o modelo de instância.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

{
  "baseInstanceName": "[BASE_NAME]",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
  ],
  "name": "[NAME]",
  "targetSize": [SIZE]
}

em que você substituiria:

  • [PROJECT_ID] pelo código do projeto da solicitação;
  • [ZONE] pela zona da solicitação;
  • [NAME] pelo nome deste grupo de instâncias;
  • [BASE_NAME] pelo nome a ser usado para instâncias criadas neste grupo de instâncias. Como essas instâncias são idênticas, elas recebem uma string aleatória como parte do nome de cada uma delas. O nome de base precede essa string aleatória. Por exemplo, se o nome de base for example, as instâncias terão nomes como example-yahs, example-qtyz e assim por diante;
  • [SIZE] pelo tamanho do grupo de instâncias;
  • [INSTANCE_TEMPLATE] pelo modelo de instância a ser usado para este grupo.

Como recuperar grupos atuais e descrições de grupos

É possível conseguir informações sobre grupos de instâncias gerenciadas atuais usando o Console, a ferramenta de linha de comando gcloud ou a API. Para receber o id do grupo, use gcloud ou a API.

Console

  1. Acesse a página "Grupos de instâncias" no console do GCP.

    Acessar a página "Grupos de instâncias"

    A página listará os grupos de instâncias, se você tiver algum. Observe que essa página também lista grupos de instâncias não gerenciadas.

  2. Na coluna Nome da lista, clique no nome do grupo de instâncias que você quer examinar. Uma página é aberta com as propriedades do grupo de instâncias e a lista de instâncias que estão incluídas no grupo.

gcloud

Liste todos os grupos de instâncias gerenciadas dentro de um projeto:

gcloud compute instance-groups managed list

Para conseguir informações sobre um grupo específico:

gcloud compute instance-groups managed describe [INSTANCE_GROUP] \
    --zone [ZONE]

API

Para listar todos os grupos de instâncias gerenciadas em uma zona, crie uma solicitação GET para o serviço instanceGroupManagers:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

Para receber informações sobre um grupo específico, crie uma solicitação GET para o serviço instanceGroupManagers e inclua o nome de um grupo de instâncias gerenciadas específico:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

Para grupos de instâncias gerenciadas regionais (várias zonas), use o recurso regionInstanceGroupManagers como alternativa: regionInstanceGroupManagers.list e regionInstanceGroupManagers.get.

Como alterar o modelo de instância de um grupo de instâncias gerenciadas

Altere o modelo de instância de um grupo de instâncias gerenciadas sem aplicar nenhuma alteração às instâncias. O grupo de instâncias gerenciadas usa o novo modelo quando você faz uma solicitação para adicionar ou recriar instâncias, mas o modelo não atualiza automaticamente as instâncias no grupo. Isso permite que você controle exatamente quais instâncias são atualizadas, mas faz com que o grupo contenha instâncias diferentes.

Depois de criar um novo modelo de instância, altere o modelo para um grupo de instâncias.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos de instâncias"

  2. Na coluna Nome da lista, clique no nome do grupo de instâncias no qual você quer alterar o modelo de instância.
  3. Clique em Editar grupo para modificar o grupo de instâncias gerenciadas.
  4. Em Modelo de instância, selecione o novo modelo de instância que quer usar neste grupo.
  5. Clique em Salvar para aplicar o novo modelo.

gcloud

Para usar o método set-instance-template a fim de atualizar um modelo, passe o novo modelo para o subcomando instance-groups managed set-instance-template:

gcloud compute instance-groups managed set-instance-template [INSTANCE_GROUP] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers com o nome do grupo de instâncias gerenciadas de destino. Inclua o URL do novo modelo de instância no corpo da solicitação:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers[INSTANCE_GROUP]/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]
}

Depois de alterar o modelo de instância, recrie instâncias individuais ou atualize todas as instâncias do grupo com uma atualização gradual.

Como fazer o redimensionamento automático de um grupo de instâncias gerenciadas

Configure grupos de instâncias gerenciadas para adicionar ou remover instâncias 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 for menor. Para iniciar o escalonamento dos grupos de instâncias gerenciadas, consulte Como escalonar grupos de instâncias automaticamente.

Como redimensionar manualmente um grupo de instâncias gerenciadas

Se um grupo de instâncias gerenciadas ainda não estiver configurado para o escalonamento automático, será possível redimensionar um grupo manualmente para alterar o número de instâncias no grupo. Se você aumentar o tamanho, o grupo usará o modelo de instância atual para adicionar novas instâncias. Se você diminuir o tamanho, ele excluirá instâncias do grupo. O grupo exclui instâncias com uma currentAction de DELETING, CREATING e RECREATING antes de excluir instâncias que estão sendo executadas sem ações programadas.

Se o grupo fizer parte de um serviço de back-end com diminuição de conexão ativada, pode levar até 60 segundos após essa diminuição para que a instância da VM seja removida ou excluída.

Redimensione um grupo de instâncias gerenciadas usando o Console do Google Cloud Platform, a ferramenta gcloud compute ou a API.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos 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 grupo para modificar o grupo de instâncias gerenciadas.
  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 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 autoescalador.
  5. Clique em Salvar para aplicar o novo modelo.

gcloud

O uso do comando é:

gcloud compute instance-groups managed resize [INSTANCE_GROUP ] \
    --size [NEW_SIZE] \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers com o nome do grupo de instâncias gerenciadas de destino. Especifique o novo tamanho da instância como um parâmetro.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resize?size=[NEW_SIZE]

Depois que você fizer uma solicitação para redimensionar um grupo de instâncias gerenciadas, as instâncias vão começar ou parar assim que o sistema puder 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.

Como desativar o modo de repetição de criação

Por padrão, se a criação inicial de uma instância de máquina virtual falhar, o grupo de instâncias gerenciadas tentará continuamente criar cada instância até que ela seja criada com êxito. No entanto, se você não quiser novas tentativas de criação automática, poderá desativar o modo de repetição de criação fornecendo a sinalização --nocreation-retries 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, o grupo de instâncias gerenciadas não criará essa instância 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 instância. Se uma instância for criada com êxito enquanto esse modo estiver ativado, ela se comportará da mesma forma que todas as outras criadas com uma solicitação de redimensionamento normal. Em particular, se uma instância em execução for desativada inesperadamente em um momento posterior e precisar ser recriada, esse modo não afetará o comportamento de recriação nesse cenário.

O modo "Desativar repetição de criação" é especialmente útil em cenários em que os sistemas criam grupos de instâncias automaticamente quando não é necessário um número exato de instâncias. Opte por estabilizar rapidamente o tamanho do grupo de instâncias gerenciadas e ser flexível quanto ao número de instâncias do grupo em vez de esperar indefinidamente até que todas as solicitadas sejam criadas. Isso pode ser adiado de maneira temporária ou permanente devido a erros de cotas ou outras questões não relacionadas.

Para redimensionar um grupo de instâncias gerenciadas no modo de repetição de criação desativado, use a ferramenta gcloud compute ou a API.

gcloud

Com a ferramenta de linha de comando gcloud, execute o comando resize com a sinalização --no-creation-retries:

gcloud beta compute instance-groups managed resize [INSTANCE_GROUP] --size [NEW_SIZE] \
    --nocreation-retries \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers com o nome do grupo de instâncias gerenciadas de destino. Especifique o tamanho da nova instância e o campo noCreationRetries no corpo da solicitação.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resizeAdvanced

{
 "targetSize": [SIZE]
 "noCreationRetries": true
}

Com o método listManagedInstances, veja quais instâncias estão sendo criadas e em qual modo. As instâncias criadas no modo de repetição de criação desativada terão o status CREATING_WITHOUT_RETRIES.

Como configurar a verificação de integridade e a recuperação automática de grupos de instâncias gerenciadas

Para melhorar a disponibilidade do aplicativo e para verificar se ele está respondendo, configure uma política de recuperação automática para o grupo de instâncias gerenciadas. Essa política depende de uma verificação de integridade baseada em aplicativo para verificar se ele está respondendo conforme o esperado. Verificar se um aplicativo responde é mais preciso do que apenas verificar se uma instância está em um estado RUNNING.

Quando o recuperador automático determina que um aplicativo não está respondendo, o grupo de instâncias gerenciadas recria automaticamente essa instância. No caso de uma instância preemptiva, o grupo recriará a instância quando os recursos necessários ficarem disponíveis novamente.

Use sinais de verificação de integridade para confirmar se uma instância é criada e se o aplicativo está respondendo. Quando uma instância gerenciada está em processo de criação, a currentAction dela é CREATING. Se uma política de recuperação automática for anexada, a instância gerenciada prosseguirá para uma currentAction de VERIFYING assim que for criada e executada, e o verificador de integridade começará a sondar o aplicativo da instância. Se o aplicativo passar por essa verificação de integridade inicial durante o tempo que leva para ele iniciar, a instância será verificada e a currentAction dela será NONE. Quando você anexa uma verificação de integridade a um grupo de instâncias gerenciadas pela primeira vez, pode levar 15 minutos até que ela seja concluída. Consulte Como verificar o status de instâncias em um grupo de instâncias gerenciadas para mais informações.

É possível configurar uma política de recuperação automática para um grupo de instâncias gerenciadas.

Como um exemplo de como usar uma verificação de integridade em um grupo de instâncias gerenciadas, siga as instruções abaixo para criar uma verificação de integridade que verifique a resposta de um servidor da Web na porta 80. Em seguida, aplique essa verificação de integridade a um grupo de instâncias gerenciadas para garantir que os servidores da Web nesse grupo funcionem corretamente.

Console

  1. Crie uma verificação de integridade para a recuperação automática que seja mais conservadora do que uma verificação de integridade de balanceamento de carga.

    Por exemplo, crie uma verificação de integridade que procure uma resposta na porta 80 e que possa tolerar alguma falha antes de marcar as instâncias como UNHEALTHY e fazer com que elas sejam recriadas. Neste exemplo, uma instância será marcada como íntegra se retornar com êxito uma só vez. Ela será marcada como não íntegra se retornar com falha 3 vezes consecutivas.

    1. Acesse a página "Criar verificação de integridade" no Console do GCP.

      Acessar a página "Criar verificação de integridade"

    2. Dê um nome à verificação de integridade, como example-check.
    3. Em Protocolo, selecione HTTP se ainda não estiver selecionado.
    4. Em Porta, digite 80.
    5. Em Intervalo de verificação, digite 5.
    6. Em Tempo limite, digite 5.
    7. Defina um Limite íntegro para determinar quantas verificações de integridade bem-sucedidas e consecutivas precisam ser retornadas antes que uma instância não íntegra seja marcada como íntegra. Digite 1 para este exemplo.
    8. Defina um Limite não íntegro para determinar quantas verificações de integridade malsucedidas consecutivas precisam ser retornadas antes que uma instância íntegra seja marcada como não íntegra. Digite 3 para este exemplo.
    9. Clique em Criar para criar a verificação de integridade.
  2. Crie uma regra de firewall para permitir que as sondagens de verificação de integridade se conectem ao seu aplicativo.

    As sondagens de verificação de integridade são realizadas por meio de endereços nos intervalos 130.211.0.0/22 e 35.191.0.0/16. Portanto, confirme se as regras de firewall da sua rede permitem a conexão com a verificação de integridade. Neste exemplo, nosso grupo de instâncias gerenciadas usa a rede default e as instâncias realizam a detecção na porta 80. Se a porta 80 ainda não estiver aberta na rede padrão, crie uma regra de firewall.

    1. Acesse a página "Criar regra de firewall" no Console do GCP.

      Acessar a página "Criar regra de firewall"

    2. Em Nome, digite o nome da regra de firewall (por exemplo, allow-health-check).
    3. Em Rede, selecione a rede default.
    4. Em Filtro de origem, selecione IP ranges.
    5. Em Intervalos de IPs de origem, digite 130.211.0.0/22 e 35.191.0.0/16.
    6. Em Portas e protocolos, selecione Protocolos e portas especificados e digite tcp:80.
    7. Clique em Criar
  3. Aplique a verificação de integridade configurando uma política de recuperação automática para seu grupo de instâncias gerenciadas regional ou zonal.

    1. Acesse a página "Grupos de instâncias" no console do GCP.

      Acessar a página "Grupos de instâncias"

    2. Na coluna Nome da lista, clique no nome do grupo de instâncias em que você quer aplicar a verificação de integridade.
    3. Clique em Editar grupo para modificar o grupo de instâncias gerenciadas.
    4. Em Recuperação automática, selecione a verificação de integridade criada anteriormente.
    5. Altere ou mantenha a configuração de Atraso inicial. Essa configuração impede que a recuperação automática recrie prematuramente uma instância em processo de inicialização. O timer de atraso inicial começa quando a currentAction da instância é VERIFYING.
    6. Clique em Salvar para aplicar as alterações.

    Pode levar alguns minutos até que a recuperação automática comece a monitorar as instâncias no grupo.

gcloud

  1. Crie uma verificação de integridade para a recuperação automática que seja mais conservadora do que uma verificação de integridade de balanceamento de carga.

    Por exemplo, crie uma verificação de integridade que procure uma resposta na porta 80 e que possa tolerar alguma falha antes de marcar as instâncias como UNHEALTHY e fazer com que elas sejam recriadas. Neste exemplo, uma instância será marcada como íntegra se retornar com êxito uma só vez. Ela será marcada como não íntegra se retornar com falha 3 vezes consecutivas.

    gcloud compute health-checks create http example-check --port 80 \
        --check-interval 30s \
        --healthy-threshold 1 \
        --timeout 10s \
        --unhealthy-threshold 3
    
  2. Crie uma regra de firewall para permitir que as sondagens de verificação de integridade se conectem ao seu aplicativo.

    As sondagens de verificação de integridade são realizadas por meio de endereços nos intervalos 130.211.0.0/22 e 35.191.0.0/16. Portanto, confirme se as regras de firewall da sua rede permitem a conexão com a verificação de integridade. Neste exemplo, nosso grupo de instâncias gerenciadas usa a rede default e as instâncias realizam a detecção na porta 80. Se a porta 80 ainda não estiver aberta na rede padrão, crie uma regra de firewall.

    gcloud compute firewall-rules create allow-health-check \
        --allow tcp:80 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --network default
    
  3. Aplique a verificação de integridade configurando uma política de recuperação automática para seu grupo de instâncias gerenciadas regional ou zonal.

    Use o comando update para aplicar a verificação de integridade ao grupo de instâncias gerenciadas.

    A configuração de initial-delay impede que a recuperação automática recrie prematuramente uma instância em processo de inicialização. O timer de atraso inicial começa quando a currentAction da instância é VERIFYING.

    Exemplo:

    gcloud compute instance-groups managed update my-mig \
        --health-check example-check \
        --initial-delay 300 \
        --zone us-east1-b
    

    Pode levar 15 minutos até que a recuperação automática comece a monitorar as instâncias no grupo.

API

  1. Crie uma verificação de integridade para a recuperação automática que seja mais conservadora do que uma verificação de integridade de balanceamento de carga.

    Por exemplo, crie uma verificação de integridade que procure uma resposta na porta 80 e que possa tolerar alguma falha antes de marcar as instâncias como UNHEALTHY e fazer com que elas sejam recriadas. Neste exemplo, uma instância será marcada como íntegra se retornar com êxito uma só vez. Ela será marcada como não íntegra se retornar com falha 3 vezes consecutivas.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks
    
    {
     "name": "example-check",
     "type": "http",
     "port": 80,
     "checkIntervalSec": 30,
     "healthyThreshold": 1,
     "timeoutSec": 10,
     "unhealthyThreshold": 3
    }
    
  2. Crie uma regra de firewall para permitir que as sondagens de verificação de integridade se conectem ao seu aplicativo.

    As sondagens de verificação de integridade são realizadas por meio de endereços nos intervalos 130.211.0.0/22 e 35.191.0.0/16. Portanto, confirme se as regras de firewall da sua rede permitem a conexão com a verificação de integridade. Neste exemplo, nosso grupo de instâncias gerenciadas usa a rede default e as instâncias realizam a detecção na porta 80. Se a porta 80 ainda não estiver aberta na rede padrão, crie uma regra de firewall.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls
    
    {
     "name": "allow-health-check",
     "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
     "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
     ],
     "allowed": [
      {
       "ports": [
        "80"
       ],
       "IPProtocol": "tcp"
      }
     ]
    }
    
  3. Aplique a verificação de integridade configurando uma política de recuperação automática para seu grupo de instâncias gerenciadas regional ou zonal.

    Uma política de recuperação automática faz parte de um recurso instanceGroupManager ou regionInstanceGroupManager.

    Defina uma política de recuperação automática usando os métodos insert ou patch.

    O exemplo a seguir define uma política de recuperação automática usando o método instanceGroupManagers.patch.

    PATCH https://www.googleapis.com/compute/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]
    {
      "autoHealingPolicies": [
        {
          "healthCheck": "global/healthChecks/example-check",
          "initialDelaySec": 300
        }
      ],
    }
    

    A configuração de initialDelaySec impede que a recuperação automática recrie prematuramente uma instância em processo de inicialização. O timer de atraso inicial começa quando a currentAction da instância é VERIFYING.

    Pode levar alguns minutos até que a recuperação automática comece a monitorar as instâncias no grupo.

    Para desativar a recuperação automática baseada em aplicativos, defina a política de recuperação automática como um valor vazio, autoHealingPolicies[]. O grupo de instâncias gerenciadas recriará apenas instâncias que não estão em um estado RUNNING.

    É possível ver a política de recuperação automática de um grupo de instâncias gerenciadas lendo o campo instanceGroupManagers.autoHealingPolicies. É possível receber um recurso de grupo de instâncias gerenciadas usando um dos métodos a seguir:

Comportamento da recuperação automática

A recuperação automática recria instâncias não íntegras usando o modelo original, que foi usado para criar a instância de VM, e não necessariamente o modelo atual no grupo de instâncias gerenciadas. Por exemplo, se uma instância de VM tiver sido criada com instance-template-a e você atualizar o grupo de instâncias gerenciadas para usar instance-template-b no modo OPPORTUNISTIC, a recuperação automática continuará utilizando instance-template-a para recriar a instância. Isso ocorre porque as recriações da recuperação automática não são iniciadas pelo usuário. Por isso, no Compute Engine, não há a suposição de que a instância de VM precise usar o novo modelo. Se você quiser aplicar um novo modelo, consulte Como alterar o modelo de instância de um grupo de instâncias gerenciadas.

Em determinado momento, o número de instâncias com recuperação automática simultânea é menor que o tamanho do grupo de instâncias gerenciadas. Isso garante que o grupo continue executando um subconjunto de instâncias mesmo que, por exemplo, a política de recuperação automática não se ajuste à carga de trabalho, as regras de firewall estejam configuradas incorretamente ou haja problemas de infraestrutura ou conectividade de rede que identifiquem erroneamente a instância como não íntegra. No entanto, se um grupo de instâncias gerenciadas zonal tiver apenas uma instância ou um grupo de instâncias gerenciadas regional tiver apenas uma instância por zona, a recuperação automática recriará essas instâncias quando elas não estiverem íntegras.

A recuperação automática não recria uma instância UNHEALTHY durante o período de inicialização dela, conforme especificado pela propriedade autoHealingPolicies[].initialDelaySec. Essa configuração atrasa a verificação feita pela recuperação automática e a recriação possivelmente prematura da instância caso ela esteja em processo de inicialização. O timer de atraso inicial começa quando a instância tem uma currentAction de VERIFYING.

Recuperação automática e discos

Ao recriar uma instância com base no modelo, o recuperador automático lida com diferentes tipos de discos de maneiras distintas. Com algumas configurações de disco, o recuperador automático pode falhar ao tentar recriar uma instância gerenciada.

Tipo de disco autodelete Comportamento durante uma operação de recuperação automática
Novo disco permanente true O disco é recriado conforme especificado no modelo da instância. Todos os dados que foram gravados nele são perdidos quando o disco e a respectiva instância são recriados.
Novo disco permanente false O disco antigo é separado, mas permanece disponível. No entanto, a recriação da instância da VM falha porque o Compute Engine não pode recriar um disco existente.
Disco permanente existente true O disco antigo é excluído. A recriação da instância da VM falha porque o Compute Engine não pode reanexar um disco excluído à instância.
Disco permanente existente false O disco antigo é reanexado conforme especificado no modelo da instância. Os dados no disco são preservados. No entanto, no caso de discos de leitura e gravação existentes, um grupo de instâncias gerenciadas pode ter apenas uma VM, porque um único disco permanente não pode ser anexado a várias instâncias nesse modo.
Novo SSD local n/a O disco é recriado conforme especificado no modelo da instância. Os dados em um SSD local são perdidos quando uma instância é recriada ou excluída

O recuperador automático não reanexa discos que não estão especificados no modelo da instância, como os discos anexados a uma VM manualmente depois que ela foi criada.

Para preservar dados importantes que foram gravados no disco, tome precauções como estas:

  • Tire instantâneos do disco permanente regularmente.

  • Exporte dados para outra fonte, como o Cloud Storage.

Se as instâncias tiverem configurações importantes que você quer preservar, o Google também recomenda usar uma imagem personalizada no modelo de instância que contenha as configurações personalizadas necessárias. Assim, quando uma instância for recriada, o grupo de instâncias gerenciadas usará a imagem personalizada especificada por você.

Como ver o histórico de operações de recuperação automática

Use a ferramenta gcloud ou a API para ver eventos de recuperação automática antigos.

gcloud

Use o comando gcloud compute operations list com um filtro para ver apenas os eventos de reparo da recuperação automática no projeto.

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

Para mais informações sobre uma operação de reparo específica, use o comando describe. Exemplo:

gcloud compute operations describe repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5 --zone us-east1-b

API

Para grupos de instâncias gerenciadas por zona, envie uma solicitação GET para a zona do recurso de operations e inclua um filtro para o escopo da lista de saída para eventos compute.instances.repair.*.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

Para grupos de instâncias gerenciadas por região, use o recurso de operations da região em vez de um de zona.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/region/[REGION]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

Para mais informações sobre uma operação de reparo específica, envie uma solicitação GET para essa operação.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/operations/repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5

Como identificar instâncias que fazem parte de um grupo

Para ver uma lista de todas as instâncias de um grupo, consulte Como recuperar grupos e descrições de grupos.

Para verificar se uma instância específica é atualmente um membro de um grupo, use o console ou a API.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique em uma instância para acessar os detalhes da instância da VM.
  3. Se a instância da VM for membro de um grupo de instâncias gerenciadas, o nome dele aparecerá sob o cabeçalho Em uso por. Se a instância da VM não for membro de um grupo, o cabeçalho Em uso por não aparecerá na página de detalhes da instância.

API

Consulte Como ver referenciadores para instâncias de VM.

Como alternativa, para identificar se uma instância é ou era membro de um grupo de instâncias gerenciadas, procure estas duas chaves de metadados nos metadados da instância:

  • instance-template indica o modelo usado para criar a instância.
  • created-by indica o grupo de instâncias gerenciadas que criou a instância.

Mesmo que você abandone a instância, ela ainda terá essas entradas de metadados, a menos que você as remova manualmente.

Por exemplo, se houver uma instância chamada random-instance-biy e você quiser saber se ela foi criada por um grupo de instâncias gerenciadas, você poderá descrevê-la e procurar as chaves de metadados acima. Exemplo:

gcloud compute instances describe random-instance-biy --zone us-central1-f

A resposta da gcloud é semelhante a esta:

canIpForward: false
cpuPlatform: Intel Ivy Bridge
creationTimestamp: '2016-08-24T14:11:38.012-07:00'
disks:
- autoDelete: true
  boot: true
  deviceName: persistent-disk-0
  index: 0
  interface: SCSI
  kind: compute#attachedDisk
...[snip]...
metadata:
  items:
  - key: instance-template
    value: projects/123456789012/global/instanceTemplates/example-it
  - key: created-by
    value: projects/123456789012/zones/us-central1-f/instanceGroupManagers/igm-metadata

Como excluir instâncias individuais de um grupo

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

A exclusão de instâncias de um grupo de instâncias gerenciadas não altera as configurações especificadas do autoescalador. Se você excluir instâncias de um grupo de instâncias gerenciadas, o autoescalador 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 autoescalador antes de tentar excluir as instâncias.

Se o grupo fizer parte de um serviço de back-end com diminuição de conexão ativada, pode levar até 60 segundos após essa diminuição para que a instância da VM seja removida ou excluída.

Exclua instâncias de um grupo de instâncias gerenciadas usando o Console do Google Cloud Platform, a ferramenta gcloud compute ou a API.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos 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 de instâncias e uma lista de instâncias que estão incluídas no grupo.
  3. Selecione na lista uma ou mais instâncias que você quer excluir.
  4. Clique em Excluir. As instâncias selecionadas são excluídas.

gcloud

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

gcloud compute instance-groups managed delete-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers com o nome do grupo de instâncias gerenciadas de destino. No corpo da solicitação, inclua os URLs para uma ou mais instâncias que você quer excluir.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/deleteInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

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 das instâncias no grupo.

Como abandonar instâncias de um grupo

Separe uma instância 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.

O abandono de instâncias reduz o targetSize especificado do grupo, mas não altera as configurações especificadas do autoescalador. Grupos de instâncias gerenciadas com um autoescalador continuam a adicionar ou remover instâncias automaticamente conforme necessário.

Se o grupo fizer parte de um serviço de back-end com diminuição de conexão ativada, pode levar até 60 segundos após essa diminuição para que a instância da VM seja removida ou excluída.

Abandone instâncias de um grupo de instâncias gerenciadas usando o Google Cloud Platform Console, a ferramenta gcloud compute ou a API.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos 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 lista de instâncias, selecione as 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 de instâncias sem excluí-la, use o subcomando abandon-instances.

gcloud compute instance-groups managed abandon-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers com o nome do grupo de instâncias gerenciadas de destino. No corpo da solicitação, inclua os URLs para uma ou mais instâncias que você quer abandonar.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/abandonInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

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 das instâncias no grupo.

Como recriar instâncias no grupo

Recriar a instância exclui as instâncias especificadas e cria novas usando o modelo atribuído ao grupo de instâncias gerenciadas.

Com esse método, é possível atualizar instâncias selecionadas para que elas usem o modelo mais recente. Se você precisar recriar todas as instâncias em um grupo de instâncias gerenciadas, inicie uma atualização gradual.

Se o grupo fizer parte de um serviço de back-end com diminuição de conexão ativada, pode levar até 60 segundos após essa diminuição para que a instância da VM seja removida ou excluída.

Recrie instâncias selecionadas no grupo de instâncias gerenciadas usando a ferramenta gcloud compute ou a API.

gcloud

Use o subcomando instance-groups managed recreate-instances.

gcloud compute instance-groups managed recreate-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers com o nome do grupo de instâncias gerenciadas de destino. No corpo da solicitação, inclua os URLs para uma ou mais instâncias que você quer recriar.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/recreateInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

Depois que você fizer uma solicitação para recriar instâncias em um grupo de instâncias gerenciadas, as novas instâncias serão iniciadas assim que o sistema puder provisioná-las. Esse processo pode demorar significativamente dependendo do número de instâncias recriadas. Verifique o status das instâncias no grupo.

Como verificar o status de instâncias em um grupo de instâncias gerenciadas

Vários comandos e solicitações criam, excluem e modificam instâncias em um grupo de instâncias gerenciadas. Essas operações serão retornadas como DONE depois que o grupo programar ações para criar, excluir ou atualizar essas instâncias. No entanto, isso não significa que as instâncias no grupo tenham sido criadas, excluídas ou atualizadas antes da conclusão das ações subjacentes. Verifique o status dessas instâncias com a ferramenta gcloud compute ou a API.

gcloud

Use o comando instance-groups managed list-instances para listar as instâncias no grupo e as ações atuais delas.

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP] \
    --zone [ZONE]

Exemplo:

gcloud compute instance-groups managed list-instances example-group \
    --zone [ZONE]
NAME               STATUS  ACTION   LAST_ERROR
example-group-0gnk RUNNING NONE
example-group-15xy         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-18ep         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0, Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-1u1y         CREATING

Neste exemplo, example-group contém quatro instâncias. Uma delas está em execução, duas apresentaram falha na tentativa de criação devido às cotas de CPU e endereço e uma está sendo criada, mas ainda não encontrou nenhum erro.

Em grupos de instâncias preemptivas, se a capacidade preemptiva não estiver disponível, as ações de criação falharão com o erro: ZONE_RESOURCE_POOL_EXHAUSTED. Para ver eventos de preempção anteriores, consulte Como detectar se uma instância foi interrompida.

wait-until-stable

Use o comando instance-groups managed wait-until-stable para verificar automaticamente um grupo de instâncias e fazer com que o script aguarde até que todas as instâncias do grupo estejam estáveis.

gcloud compute instance-groups managed wait-until-stable example-group \
    --zone [ZONE]

API

Crie uma solicitação para o serviço instanceGroupManagers e especifique o nome do grupo de instâncias gerenciadas que contém as instâncias que você quer verificar.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/listManagedInstances

Exemplo:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instanceGroupManagers/example-group/listManagedInstances

A solicitação recebe a resposta a seguir:

{
 "managedInstances": [
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-0gnk",
   "id": "16960422116594945029",
   "instanceStatus": "RUNNING",
   "currentAction": "NONE"
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-15xy",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-18ep",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0"
      },
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-1u1y",
   "id": "7239700230861444556",
   "instanceStatus": "RUNNING",
   "currentAction": "CREATING"
  }
 ]
}

Neste exemplo, example-group contém quatro instâncias. Uma delas está em execução, duas apresentaram falha na tentativa de criação devido às cotas de CPU e endereço e uma está sendo criada, mas ainda não encontrou nenhum erro.

Em grupos de instâncias preemptivas, se a capacidade preemptiva não estiver disponível, as ações de criação falharão com o erro: ZONE_RESOURCE_POOL_EXHAUSTED. Para ver eventos de preempção anteriores, consulte Como detectar se uma instância foi interrompida.

Como excluir um grupo de instâncias gerenciadas

Quando você exclui um grupo de instâncias gerenciadas usando o Console do Google Cloud Platform ou a gcloud, todas as instâncias do grupo e todos os autoescaladores anexados também são excluídos. Se for preciso manter qualquer uma das instâncias no grupo, abandone as instâncias antes de removê-las do grupo. Em seguida, use o parâmetro delete para excluir o grupo de instâncias gerenciadas.

Antes de excluir um grupo de instâncias gerenciadas usando a API, é necessário emitir solicitações separadas para excluir os autoescaladores anexados.

Exclua um grupo inteiro de instâncias gerenciadas e as instâncias dele usando o Console do Google Cloud Platform, a ferramenta gcloud compute ou a API.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos de instâncias"

  2. Selecione um ou mais grupos na lista que você quer excluir.
  3. Clique em Excluir para excluir o grupo e todas as instâncias no grupo de instâncias gerenciadas.

gcloud

Use o subcomando instance-groups managed delete.

gcloud compute instance-groups managed delete [INSTANCE_GROUP] \
    --zone [ZONE]

API

Crie uma solicitação DELETE para o serviço instanceGroupManagers e especifique o nome do grupo de instâncias gerenciadas que você quer excluir.

DELETE https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

Como criar grupos de instâncias preemptivas

Use grupos de instâncias gerenciadas para criar rapidamente várias instâncias preemptivas, o que pode reduzir os custos das instâncias nos grupos de instâncias gerenciadas. Por exemplo, crie um grupo de instâncias preemptivas, use-o para executar uma tarefa de processamento em lote e depois exclua-o quando a tarefa estiver concluída.

Para criar um grupo de instâncias preemptivas, defina a opção preemptiva em um modelo de instância e depois use o modelo para criar o grupo de instâncias gerenciadas.

Console

  1. Acesse a página "Modelos de instância" no Console do GCP.

    Acessar a página "Modelos de instância"

  2. Clique em Novo modelo de instância.
  3. Preencha as propriedades que você quer para o modelo de instância.
  4. Clique em Mostrar opções avançadas para expandir a seção Políticas de disponibilidade.
  5. Defina a Preempção como Ativada.
  6. Clique em Criar para criar o modelo.
  7. Use esse modelo para criar um grupo de instâncias gerenciadas

gcloud

Em gcloud compute, crie um modelo de instância usando o comando instance-templates create. Inclua a sinalização --preemptible.

gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
    --preemptible

Depois de criar o modelo de instância, use-o para criar um grupo de instâncias gerenciadas.

API

Use o método instanceTemplates().insert para criar um novo modelo de instância. Inclua a propriedade preemptible em scheduling e a defina como true.

{
"name": "[INSTANCE_TEMPLATE]",
"properties": {
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "scheduling":
  {
    "preemptible": true
  },
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

Depois de criar o modelo de instância, use-o para criar um grupo de instâncias gerenciadas.

Como adicionar um grupo de instâncias gerenciadas a um balanceador de carga

O balanceamento de carga do Google Cloud Platform usa grupos de instâncias, gerenciadas e não gerenciadas, para veicular tráfego. Dependendo do tipo de balanceador de carga que você estiver usando, adicione grupos de instâncias a um pool de destino ou serviço de back-end. Para saber mais sobre balanceamento de carga, consulte Como escolher um balanceador de carga.

Como adicionar um grupo de instâncias gerenciadas a um serviço de back-end

É necessário um serviço de back-end para criar um HTTP(S), um proxy SSL, um proxy TCP ou um balanceador de carga interno. Um serviço de back-end contém back-ends individuais, cada um com um grupo de instâncias gerenciadas ou não gerenciadas. As instâncias contidas no grupo respondem ao tráfego vindo do balanceador de carga. O serviço de back-end, por sua vez, tem as informações de quais instâncias podem ser usadas, a capacidade delas para processar o tráfego e a quantidade de tráfego que elas estão processando no momento. Além disso, a verificação da integridade é monitorada no serviço de back-end, que não envia novas conexões para instâncias não íntegras.

Para aprender a adicionar um grupo de instâncias a um serviço de back-end, leia Como adicionar grupos de instâncias a um serviço de back-end.

Como adicionar um grupo de instâncias gerenciadas a um pool de destino

Um pool de destino é um objeto que contém uma ou mais instâncias de máquina virtual. Ele é usado no balanceamento de carga de rede, em que as solicitações do usuário são encaminhadas para o pool de destino associado ao balanceador de carga. As instâncias que fazem parte desse pool atendem essas solicitações e retornam uma resposta. Adicione um grupo de instâncias gerenciadas a um pool de destino para que, quando as instâncias forem adicionadas ou removidas do grupo, o pool também seja automaticamente atualizado com as alterações.

Para adicionar um grupo de instâncias gerenciadas a um pool de destino, é preciso que esse pool já exista. Para mais informações, consulte a documentação Como adicionar um pool de destino.

Para adicionar um grupo de instâncias gerenciadas a um pool de destino, execute as etapas a seguir. Isso faz com que todas as instâncias de VM contidas no grupo sejam adicionadas ao pool de destino.

Console

  1. Acesse a página "Pools de destino" no Console do GCP.

    Acessar a página "Pools de destino"

  2. Clique no pool de destino para adicionar o grupo de instâncias.
  3. Clique no botão Editar.
  4. Role para baixo até a seção Instâncias da VMs e clique em Selecionar grupos de instâncias.
  5. Selecione um grupo de instâncias no menu suspenso.
  6. Salve as alterações.

gcloud

Com a ferramenta de linha de comando gcloud, use o comando set-target-pools:

gcloud compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--zone ZONE]

em que:

  • [INSTANCE_GROUP] é o nome do grupo de instâncias;
  • [TARGET_POOL] é o nome de um ou mais pools de destino aos quais adicionar este grupo de instâncias;
  • [ZONE] é a zona do grupo de instâncias.

API

Na API, faça uma solicitação POST para o seguinte URI:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

em que:

  • [PROJECT_ID] é o código do projeto da solicitação;
  • [ZONE] é a zona do grupo de instâncias;
  • [INSTANCE_GROUP] é o nome do grupo de instâncias.

O corpo da solicitação conterá uma lista de URIs para os pools de destino aos quais você quer adicionar esse grupo. Exemplo:

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

Como atribuir portas nomeadas a grupos de instâncias gerenciadas

Portas nomeadas são pares chave:valor que representam um nome de serviço e o número da porta em que o serviço é executado. As portas nomeadas são usadas pelos serviços de balanceamento de carga para direcionar o tráfego para portas específicas em instâncias individuais. Por exemplo, se você definir uma porta nomeada como http:80 e depois configurar o serviço de back-end para enviar tráfego para uma porta chamada http, o balanceamento de carga encaminhará o tráfego para a porta 80 das instâncias individuais que fazem parte do grupo de instâncias.

As portas nomeadas são metadados simples usados pelo balanceamento de carga. As portas nomeadas não controlam recursos de rede ou firewall no Compute Engine.

Atribua várias portas para cada nome de serviço e vários nomes de serviço para cada porta. No entanto, lembre-se de que um determinado serviço de back-end só pode encaminhar tráfego para uma porta nomeada de cada vez.

Console

  1. Acesse a página "Grupos de instâncias" no Console do GCP.

    Acessar a página "Grupos de instâncias"

  2. Clique no nome do grupo de instâncias em que você quer especificar as portas nomeadas. Uma página é aberta com as propriedades do grupo de instâncias.
  3. Clique em Editar grupo para modificar o grupo de instâncias gerenciadas.
  4. Clique em Especificar mapeamento de nomes de porta para expandir as opções de portas nomeadas.
  5. Clique em Adicionar item e digite o nome da porta e os números de porta que você quer associar a esse nome. Clique em Adicionar item novamente para adicionar outras entradas, se necessário.
  6. Clique em Salvar para salvar as alterações e aplicar as portas nomeadas às instâncias no grupo de instâncias gerenciadas.

gcloud

Defina uma ou mais portas nomeadas usando o comando set-named-ports:

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports [PORT_NAME]:[PORT],[PORT_NAME]:[PORT]

Exemplo:

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:80,name2:8080

Para atribuir várias portas a cada nome de serviço ou vários nomes para cada serviço, crie mais de uma entrada para cada nome ou porta. Por exemplo, atribua name1 às portas 10, 20 e 80. Em seguida, atribua name2 e name3 à porta 80. Por fim, atribua a porta 9000 a name4.

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:10,name1:20,name1:80,\
                name2:8080,name3:8080,\
                name4:9000

Verifique as atribuições de portas nomeadas para um grupo de instâncias gerenciadas usando o comando get-named-ports:

gcloud compute instance-groups managed get-named-ports [INSTANCE_GROUP]
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

API

A API Instance Group Manager não oferece um método setNamedPorts, mas você pode usar a API Instance Group para executar essa tarefa.

Crie uma solicitação para a API Instance Group e inclua o nome do grupo de instâncias. Consiga o valor fingerprint atual do grupo de instâncias ao receber informações sobre um grupo específico. Inclua fingerprint e um ou mais pares de valores namedPorts no corpo da solicitação:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  },
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  }
 ]
}

Exemplo:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 80
  },
  {
   "name": "name2",
   "port": 8080
  }
 ]
}

Para atribuir várias portas a cada nome de serviço, crie várias entradas para os nomes. Por exemplo, você pode atribuir as portas 10, 20 e 80 a name1. Também atribua a porta 8080 a name2.

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 10
  },
  {
   "name": "name1",
   "port": 20
  }
  {
   "name": "name1",
   "port": 80
  }
  {
   "name": "name2",
   "port": 8080
  }
  {
   "name": "name3",
   "port": 80
  }
  {
   "name": "name4",
   "port": 8080
  }
 ]
}

Para listar as portas nomeadas que já estão atribuídas a um grupo de instâncias gerenciadas, crie uma solicitação GET que aponte para o grupo:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

Como entender os campos instanceTemplate e versions

Ao criar um grupo de instâncias gerenciadas, você fornece um modelo de instância que o grupo de instâncias gerenciadas usa para criar instâncias de VM individuais. Por padrão, o Compute Engine descreve o modelo de instância usado em duas propriedades distintas da API: a instanceTemplate de nível superior e a versions. Por exemplo, no grupo de instâncias gerenciadas a seguir, observe que os campos instanceTemplate e versions estão preenchidos:

{

 "name": "example-group",
 "zone": "zones/us-central1-a",
 "instanceTemplate": "global/instanceTemplates/example-it",
 "versions": [
  {
   "name": "v3",
   "instanceTemplate": "global/instanceTemplates/example-it",
   "targetSize": {
    "calculated": 3
   }
  }
 ]...
}

O Compute Engine preenche automaticamente o campo instanceTemplate de nível superior e o campo versions para manter a compatibilidade com versões anteriores. É recomendável especificar o campo versions e omitir o campo instanceTemplates de nível superior sempre que possível. Porém, se o código de seu aplicativo definir atualmente o campo instanceTemplate, essa ainda será uma solicitação válida.

Para saber mais sobre o Managed Instance Group Updater, leia Como atualizar grupos de instâncias gerenciadas.

(Avançado) Como implementar modelos de instância canário com um grupo de instâncias gerenciadas

É possível criar um grupo de instâncias gerenciadas em que há dois grupos de VMs que usam modelos de instância diferentes. Por exemplo, é possível criar um grupo de instâncias gerenciadas que tenha 20 instâncias de VM. 10 VMs são executadas em uma imagem operacional específica, enquanto o restante é executado em uma imagem de sistema operacional diferente. Esse recurso permite comparar as duas versões diferentes de modelo de instância antes de decidir qual usar.

Na API, crie uma solicitação POST para o seguinte URL:

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

No corpo da solicitação, omita o campo instanceTemplates de nível superior e mantenha a propriedade versions com dois modelos de instância definidos. Em cada objeto versions, especifique um modelo de instância. Para um dos objetos versions, mas não para ambos, você precisa especificar targetSize. Por exemplo, a solicitação a seguir cria um grupo de instâncias em que 50% das instâncias de VM usam o modelo de instância example-template e o restante usa o modelo small-machine-type:

{
  "baseInstanceName": "example-instances",
  "name": "example-group",
  "targetSize": 5,
  "versions":
  [
    {
      "instanceTemplate": "global/instanceTemplates/example-template",
      "targetSize":
      {
        "percent": 50
      }
    },
   {
     "instanceTemplate": "global/instanceTemplates/small-machine-type"
   }
  ]
}

Grupos de instâncias gerenciadas e IAM

Todas as operações realizadas pelo Compute Engine como parte do grupo de instâncias gerenciadas são executadas com a conta de serviço das APIs do Google do projeto. Essa conta de serviço por projeto tem um endereço de e-mail como este:

[PROJECT_ID]@cloudservices.gserviceaccount.com

em que

  • [PROJECT_ID] é o código numérico do projeto correspondente.

A conta de serviço das APIs do Google é diferente da conta de serviço padrão do Compute Engine.

Cabe a você garantir que a conta de serviço usada pelo grupo de instâncias gerenciadas tenha privilégios suficientes para criar instâncias de máquina virtual com base no modelo de instância. Em particular, isso significa que a conta de serviço precisa receber os papéis compute.instanceAdmin.v1 e serviceAccountUser (opcional) para criar e gerenciar instâncias no grupo. O papel serviceAccountUser será necessário somente se o grupo de instâncias gerenciadas for criar instâncias que possam ser executadas como uma conta de serviço. Tenha também em mente que essa conta é utilizada por outros processos, incluindo o Deployment Manager.

Ao criar um grupo de instâncias gerenciadas ou atualizar um modelo de instância, o Compute Engine confirma que a conta de serviço das APIs do Google:

  • recebeu o papel serviceAccountUser no modelo de instância, se você planeja criar instâncias que possam ser executadas como uma conta de serviço;
  • tem permissão para todos os recursos referenciados nos modelos de instância, como imagens, discos, redes VPC e sub-redes.

Para saber mais sobre contas de serviço, leia a visão geral das contas de serviço.

Como atualizar todas as instâncias em um grupo de instâncias gerenciadas

Consulte Como atualizar grupos de instâncias gerenciadas.

Solução de problemas

Meu grupo de instâncias gerenciadas não consegue criar uma instância. Qual é o problema?

Há vários problemas que podem impedir que o grupo de instâncias crie ou recrie uma instância. Veja a seguir alguns problemas comuns:

  • O grupo de instâncias gerenciadas está tentando criar ou recriar a instância e o disco permanente de inicialização, mas o disco já existe. Por padrão, a criação de novos discos permanentes de inicialização ocorre quando instâncias novas são criadas. Esses discos recebem o nome da instância. Se uma instância tiver o nome my-awesome-instance, o disco também se chamará my-awesome-instance. Se já existir um disco permanente com esse nome, haverá uma falha na solicitação. Exclua o disco permanente para resolver esse problema.

  • O modelo de instância definiu a opção disks.autoDelete como false para discos permanentes de inicialização, de modo que, quando uma instância for excluída (por causa da recuperação automática, por exemplo), o disco permanente não será excluído. Quando o grupo de instâncias gerenciadas tentou recriar a instância, teve o mesmo problema de já haver um disco permanente com um nome igual ao dela. Exclua o disco permanente para resolver o problema imediato e atualize o modelo de instância para definir disks.autoDelete como true, caso queira que os discos permanentes de inicialização sejam excluídos com a instância.

  • O modelo de instância pode ser inválido. Se você atualizou o modelo de instância recentemente, pode haver uma propriedade inválida que faz com que o grupo de instâncias gerenciadas não consiga criar a instância. Alguns exemplos de propriedades inválidas:

    • Você especificou um recurso que não existe, como uma imagem de origem.
    • Você escreveu um nome de recurso incorretamente.
    • Você tentou anexar discos permanentes que não são de inicialização no modo de leitura e gravação. Como os grupos de instâncias contêm várias instâncias, só é possível anexar discos extras que você quer compartilhar entre todas as instâncias do grupo no modo somente leitura.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine