Como criar e gerenciar MIGs regionais

Neste documento, descrevemos os procedimentos específicos para criar e gerenciar grupos de instâncias gerenciadas (MIGs) regionais. Para informações gerais sobre a criação de MIGs, consulte Como criar grupos de instâncias gerenciadas.

Um MIG regional distribui as instâncias em várias zonas em uma região, o que aumenta a resiliência das cargas de trabalho baseadas em MIG. O uso de várias zonas protege você contra casos extremos em que todas as instâncias de uma única zona falham.

Para mais informações sobre MIGs regionais, incluindo por que escolhê-los, as opções de configuração adicionais e como eles são diferentes dos MIGs zonais, consulte a Visão geral do MIG regional.

Antes de começar

Limitações

  • Com um MIG regional, é possível criar até 2.000 VMs em uma região, com um máximo de 1.000 VMs por zona. Com um MIG zonal, é possível criar até 1.000 VMs. Se você precisar de mais VMs, entre em contato com o suporte.
  • Ao atualizar um MIG, é possível especificar até 1.000 VMs em uma única solicitação.
  • Para um MIG com estado, analise as limitações desse tipo de MIG.

  • Ao criar o MIG regional, selecione as zonas que estão associadas a um MIG regional. Após escolher as zonas específicas durante a criação, não será possível alterá-las ou atualizá-las depois. No entanto, é possível definir o formato de distribuição de destino do MIG para especificar como o grupo distribui as instâncias gerenciadas nas zonas selecionadas.

  • Se você definir a forma de distribuição de destino do grupo como ANY ou como BALANCED, analise as limitações.+

  • Para usar o balanceamento de carga com um MIG regional, as seguintes limitações se aplicam:

    • Não é possível usar o modo de balanceamento maxRate.
    • Se você usa um esquema de balanceamento de carga HTTP(S) com um MIG regional, é necessário escolher o modo de balanceamento maxRatePerInstance ou maxUtilization.
  • Para escalonar automaticamente um MIG regional, as seguintes limitações se aplicam:

Como criar um MIG regional

Use o Console do Cloud, a ferramenta gcloud ou a API Compute Engine.

Se não houver capacidade suficiente em cada zona para aceitar as VMs do grupo, o Compute Engine criará o máximo de VMs possível e continuará a criar as outras restantes quando houver capacidade extra disponível.

Por padrão, se você não especificar explicitamente zonas individuais na solicitação, o Compute Engine escolherá automaticamente três zonas para criar VMs. Se precisar criar VMs em mais de ou menos de três zonas ou se quiser escolher quais zonas serão usadas, forneça uma lista de zonas em sua solicitação. Para mais informações, consulte Seleção de zona.

Por padrão, os MIGs distribuem VMs de modo uniforme nas zonas selecionadas. Como você está criando um MIG regional, lembre-se de que determinados recursos são zonais, como GPUs e discos permanentes atuais. Se o modelo de instância do MIG especificar recursos zonais, você terá de garantir que todos esses recursos estejam presentes em todas as zonas selecionadas para que possam ser anexados às VMs criadas pelo MIG regional. Como alternativa, se quiser que o grupo verifique a existência de recursos zonais, defina o formato de distribuição do MIG para criar instâncias somente em zonas que contenham esses recursos.

A redistribuição proativa de instâncias é ativada por padrão. Se você precisar gerenciar manualmente o número de VMs em cada zona ou definir o formato de distribuição de destino do MIG como BALANCED, desative a redistribuição proativa de instâncias. Se você desativar a redistribuição proativa de instâncias e quiser usar o escalonamento automático, também terá que definir o formato de distribuição como EVEN e restringir o escalonador automático para escalonar horizontalmente.

Console

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

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

  2. Clique em Criar grupo de instâncias para criar um novo grupo.
  3. Selecione uma das opções do novo grupo de instâncias gerenciadas: sem estado (padrão) ou com estado.
  4. Em Local, selecione Várias zonas.
  5. Escolha uma região.
  6. Se você quiser escolher zonas específicas, clique em Configurar zonas para selecionar quais usar.
  7. Em Forma de distribuição de destino, selecione Uniforme. Se você quiser selecionar uma forma diferente, consulte Como definir uma política para distribuir instâncias entre zonas.
  8. Se você quiser desativar a redistribuição proativa de instâncias, siga estas etapas:
    1. Verifique se o Modo de escalonamento automático está definido como Não fazer escalonamento automático.
    2. Defina a Redistribuição da instância como Desativado.
  9. Selecione um modelo de instância para o grupo ou crie um modelo novo.
  10. Especifique o número de VMs para este grupo. Lembre-se de provisionar VMs suficientes para dar suporte ao aplicativo se ocorrer uma falha de zona.
  11. Continue com o restante do processo de criação do MIG.

gcloud

Todos os MIGs exigem um modelo de instância. Caso ainda não tenha um, crie um modelo de instância. Por exemplo, o comando a seguir cria um modelo básico de instância com propriedades padrão:

gcloud compute instance-templates create example-template

Em seguida, use o comando instance-groups managed create com a sinalização --region. Por exemplo, o comando a seguir cria um MIG regional em três zonas dentro da região us-east1:

gcloud compute instance-groups managed create example-rmig \
    --template example-template  \
    --size 30 \
    --region us-east1

Para selecionar zonas específicas que o grupo usará, especifique a sinalização --zones:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c

Para desativar a redistribuição proativa de instâncias, defina a sinalização --instance-redistribution-type como NONE. Não é possível desativar a redistribuição proativa de instâncias se o escalonamento automático estiver ativado.

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --instance-redistribution-type NONE \
    --region us-east1

API

Todos os MIGs exigem um modelo de instância. Caso ainda não tenha um, crie um modelo de instância.

Em seguida, crie uma solicitação POST para o método regionInstanceGroupManagers.insert. No corpo da solicitação, especifique o nome e o tamanho do grupo e o URL do modelo de instância. Opcionalmente, especifique outros campos, como o nome de base das instâncias no grupo.

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

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE"
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo;
  • BASE_INSTANCE_NAME: o nome da instância de cada instância de VM criada como parte do grupo. Por exemplo, o nome de instância de base example-instance cria instâncias com nomes como example-instance-[RANDOM_STRING], em que [RANDOM_STRING] é gerado pelo servidor;
  • INSTANCE_TEMPLATE_NAME: o modelo de instância a ser usado;
  • INSTANCE_GROUP_NAME: o nome do MIG;
  • TARGET_SIZE: o número pretendido de VMs para o grupo.

Se você quiser selecionar zonas específicas ou criar VMs em uma região com menos ou mais de três zonas, inclua a propriedade distributionPolicy na solicitação e forneça uma lista de zonas. Substitua ZONE pelo nome de uma zona onde criar VMs.

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

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/ZONE"},
       {"zone": "zones/ZONE"}
      ]
   }
}

Por exemplo, o seguinte cria um MIG regional chamado example-rmig com 10 instâncias gerenciadas distribuídas entre as zonas us-east1-b e us-east1-c:

POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers

{
  "instanceTemplate": "global/instanceTemplates/example-instance",
  "name": "example-rmig",
  "targetSize": 10,
  "distributionPolicy": {
      "zones": [
        {"zone": "zones/us-east1-b"},
        {"zone": "zones/us-east1-c"}
      ]
   }
}

Como trabalhar com instâncias gerenciadas em um MIG regional

Se você precisar agir em instâncias gerenciadas específicas em um MIG, por exemplo, para criar ou excluir instâncias com nomes específicos, o processo será o mesmo para MIGs regionais e zonais. Consulte Como trabalhar com instâncias gerenciadas.

Como receber informações sobre MIGs regionais e instâncias gerenciadas

Se você quiser receber informações sobre seu MIG, por exemplo, para ver sua configuração ou inspecionar seu status ou se quiser informações sobre as instâncias gerenciadas em um MIG, o processo será o mesmo para regional e MIGs zonais. Consulte Como receber informações sobre MIGs e instâncias gerenciadas.

Como atualizar um grupo regional de instâncias gerenciadas

É possível aplicar um novo modelo de instância a um MIG regional usando o recurso Updater. Para mais informações, consulte Como atualizar um MIG regional.

Se você quiser adicionar ou remover instâncias em um MIG, consulte Como trabalhar com instâncias gerenciadas.

Se você quiser usar ou atualizar recursos do MIG, consulte a documentação de recuperação automática, balanceamento de carga, escalonamento automático, atualização automática e cargas de trabalho com estado.

Não é possível selecionar diferentes zonas para o MIG após a criação do MIG. No entanto, é possível atualizar a forma de destino do MIG para alterar a forma como o grupo distribui as instâncias gerenciadas nas zonas selecionadas.

Como definir uma política para distribuir instâncias entre zonas

É possível definir o formato de distribuição de destino de um MIG regional como uma das seguintes opções:

  • EVEN (uniformemente, o padrão): o grupo programa a criação e a exclusão de instâncias de VM para alcançar e manter um número uniforme de instâncias gerenciadas nas zonas selecionadas. A distribuição é uniforme quando o número de instâncias gerenciadas entre duas zonas não é diferente do número de instâncias mais uma. Recomendado para cargas de trabalho de exibição altamente disponível.

  • BALANCED (equilibrado): o grupo prioriza a aquisição de recursos, programando VMs em zonas onde os recursos estiverem disponíveis, ao mesmo tempo em que distribui VMs da maneira mais uniforme possível entre as zonas selecionadas a fim de minimizar o impacto de falhas na zona. Recomendado para de cargas de trabalho em lote ou de exibição altamente disponíveis que não exijam escalonamento automático.

  • ANY (qualquer): o grupo escolhe as zonas para a criação de instâncias de VM que atendam ao número solicitado de VMs dentro das restrições atuais dos recursos e que maximizem a utilização de reservas da zona não utilizadas. Recomendado para cargas de trabalho em lote que não exijam alta disponibilidade.

Para ajudar na escolha, consulte a tabela de comparação, os casos de uso e como as formas de distribuição funcionam.

Defina uma forma de distribuição de destino ao criar ou atualizar a forma de destino de um grupo existente.

Limitações

  • Só é possível selecionar as zonas para seu MIG ao criar o MIG.
  • Se você especificar recursos em seu modelo de instância que não estão disponíveis em todas as zonas selecionadas, as seguintes limitações se aplicarão:

    • Defina o formato de distribuição de destino como ANY ou BALANCED.
    • Verifique se os recursos necessários estão disponíveis em pelo menos uma das zonas selecionadas. Para informações sobre quais recursos do Compute Engine estão disponíveis em zonas específicas, consulte Regiões e zonas disponíveis.
    • Se você quiser atualizar o modelo de instância do grupo para um modelo que não pode ser instanciado em todas as zonas selecionadas, remova as instâncias gerenciadas de todas as zonas não compatíveis antes de definir o novo modelo.
  • Se você definir a forma de distribuição de destino como BALANCED, será preciso desativar a redistribuição proativa.

  • Se você definir o formato de distribuição de destino como BALANCED ou como ANY, as seguintes limitações se aplicarão:

    • O escalonamento automático não é aceito. É possível definir o tamanho do MIG ou adicionar instâncias por conta própria.
    • As atualizações Canary com duas versões não são compatíveis.
    • No caso de uma disponibilidade limitada de recursos solicitados em toda a região, o grupo pode programar a criação da instância de VM em uma zona em que os recursos já estão indisponíveis. Tente diminuir e aumentar o tamanho do grupo para conseguir os recursos solicitados em outras zonas.
    • Atualizações graduais que usam o método de substituição SUBSTITUTE tentarão criar as novas instâncias atualizadas na mesma zona que as máquinas desatualizadas, mesmo que a zona não tenha recursos para acomodar os requisitos da nova versão. Para mediar esse comportamento, exclua as VMs desatualizadas da zona restrita e aumente o tamanho do grupo pelo número de VMs excluídas. O grupo cria instâncias a partir do modelo mais recente nas zonas em que a capacidade está disponível.
    • Se você quiser atualizar o modelo de instância do grupo para um modelo que especifica recursos que não estão disponíveis em todas as zonas selecionadas, remova as instâncias gerenciadas de zonas não compatíveis antes de definir o novo modelo.

Como criar um grupo com um formato de distribuição de destino

Para criar seu grupo, selecione as zonas e defina o formato de distribuição de destino, use o Console do Cloud , a ferramenta gcloud ou a API Compute Engine.

Console

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

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

  2. Clique em Criar grupo de instâncias para criar um novo grupo.
  3. Selecione uma das opções do novo grupo de instâncias gerenciadas: sem estado (padrão) ou com estado.
  4. Em Local, selecione Várias zonas.
  5. Selecione uma região.
  6. Se quiser escolher zonas específicas ou todas as zonas, clique em Configurar zonas para selecionar as zonas que você quer usar.
  7. Escolha uma forma de distribuição de destino.
    1. Se você quiser selecionar Qualquer uma ou Equilibrada, na seção Escalonamento automático, clique em Excluir configuração de escalonamento automático.
    2. Se você quiser selecionar Equilibrada, na seção Redistribuição da instância, não selecione Ativar redistribuição da instância.
    3. Na seção Forma de distribuição de destino, selecione uma forma.
  8. Selecione um modelo de instância para o grupo ou crie um modelo novo.
  9. Especifique o número de VMs para este grupo. Para cargas de trabalho altamente disponíveis, lembre-se de provisionar VMs suficientes para fazer com que o aplicativo continue a funcionar se uma zona falhar.
  10. Continue com o restante do processo de criação do MIG.

gcloud

Use o comando gcloud beta compute instance-groups managed create e inclua a sinalização --target-distribution-shape.

gcloud beta compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template TEMPLATE \
    --size SIZE \
    [--zones ZONES \]
    --target-distribution-shape SHAPE

Substitua:

  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias.
  • TEMPLATE: o nome do modelo de instância a ser usado para o grupo.
  • SIZE: o tamanho de destino do grupo de instâncias.
  • ZONES (opcional): uma lista de zonas na região em que você quer implantar instâncias de VM.
  • SHAPE: o formato de distribuição de destino. Pode ser um dos seguintes valores:
    • EVEN (o padrão): o grupo programa a criação e a exclusão de instâncias de VM para alcançar e manter um número uniforme de instâncias gerenciadas nas zonas selecionadas. A distribuição é uniforme quando o número de instâncias gerenciadas entre duas zonas não é diferente do número de instâncias mais uma. Recomendado para cargas de trabalho de exibição altamente disponível.
    • BALANCED: o grupo prioriza a aquisição de recursos, programando VMs em zonas onde os recursos estiverem disponíveis, ao mesmo tempo em que distribui VMs da maneira mais uniforme possível entre as zonas selecionadas a fim de minimizar o impacto de falhas na zona. Recomendado para de cargas de trabalho em lote ou de exibição altamente disponíveis que não exijam escalonamento automático.
    • ANY: o grupo escolhe as zonas para a criação de instâncias de VM que atendam ao número solicitado de VMs dentro das restrições atuais dos recursos e que maximizem a utilização de reservas da zona não utilizadas. Recomendado para cargas de trabalho em lote que não exijam alta disponibilidade.

Por exemplo, para criar um MIG regional com uma forma de distribuição de destino balanceada, defina a sinalização --target-distribution-shape como balanced.

gcloud beta compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --target-distribution-shape BALANCED \
    --instance-redistribution-type NONE

API

Chame o campo método regionInstanceGroupManagers.insert. In the request body, include thedistributionPolicyproperty, and set itstargetShape`.

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

{
    "instanceTemplate": "global/instanceTemplates/TEMPLATE",
    "targetSize": SIZE,
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ],
        "targetShape": SHAPE
    }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias.
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias.
  • TEMPLATE: o nome do modelo de instância a ser usado para o grupo de instâncias.
  • SIZE: o tamanho de destino do grupo de instâncias.
  • ZONE: o nome de uma zona na região em que você quer implantar as instâncias de VM.
  • SHAPE: o formato de distribuição de destino. Pode ser um dos seguintes valores:
    • EVEN (o padrão): o grupo programa a criação e a exclusão de instâncias de VM para alcançar e manter um número uniforme de instâncias gerenciadas nas zonas selecionadas. A distribuição é uniforme quando o número de instâncias gerenciadas entre duas zonas não é diferente do número de instâncias mais uma. Recomendado para cargas de trabalho de exibição altamente disponível.
    • BALANCED: o grupo prioriza a aquisição de recursos, programando VMs em zonas onde os recursos estiverem disponíveis, ao mesmo tempo em que distribui VMs da maneira mais uniforme possível entre as zonas selecionadas a fim de minimizar o impacto de falhas na zona. Recomendado para de cargas de trabalho em lote ou de exibição altamente disponíveis que não exijam escalonamento automático.
    • ANY: o grupo escolhe as zonas para a criação de instâncias de VM que atendam ao número solicitado de VMs dentro das restrições atuais dos recursos e que maximizem a utilização de reservas da zona não utilizadas. Recomendado para cargas de trabalho em lote que não exijam alta disponibilidade.

Como aterar a forma de distribuição de destino de um grupo existente

É possível alterar o formato de distribuição de destino de um MIG regional existente, mas com as seguintes limitações:

  • Se você quiser alterar a forma de distribuição de destino para BALANCED, primeiro desative a redistribuição proativa.
  • Se você quiser alterar o formato de distribuição de destino para EVEN, e se a distribuição atual das instâncias for desigual, primeiro desative a redistribuição proativa.
  • Se você alterar o formato para EVEN e quiser reativar a redistribuição proativa, primeiro reequilibre o grupo manualmente.
  • Se você quiser alterar o formato de distribuição de destino para EVEN, mas seu modelo de instância especificar recursos que não são compatíveis com todas as zonas selecionadas, primeiro você precisará atualizar o modelo de instância do grupo para um que seja compatível em todas as zonas selecionadas.

Console

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

    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 alterar a forma de distribuição de destino.
  3. Clique em Editar para modificar o grupo gerenciado de instâncias.
  4. Em Forma de distribuição de destino, especifique a forma desejada.
  5. Clique em Salvar para aplicar o novo modelo.

gcloud

Use o comando gcloud beta compute instance-groups managed update e inclua a sinalização --target-distribution-shape.

gcloud beta compute instance-groups managed update INSTANCE_GROUP_NAME \
    --target-distribution-shape SHAPE

Substitua:

  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias.
  • SHAPE: o formato de distribuição de destino. Pode ser um dos seguintes valores:
    • EVEN (o padrão): o grupo programa a criação e a exclusão de instâncias de VM para alcançar e manter um número uniforme de instâncias gerenciadas nas zonas selecionadas. A distribuição é uniforme quando o número de instâncias gerenciadas entre duas zonas não é diferente do número de instâncias mais uma. Recomendado para cargas de trabalho de exibição altamente disponível.
    • BALANCED: o grupo prioriza a aquisição de recursos, programando VMs em zonas onde os recursos estiverem disponíveis, ao mesmo tempo em que distribui VMs da maneira mais uniforme possível entre as zonas selecionadas a fim de minimizar o impacto de falhas na zona. Recomendado para de cargas de trabalho em lote ou de exibição altamente disponíveis que não exijam escalonamento automático.
    • ANY: o grupo escolhe as zonas para a criação de instâncias de VM que atendam ao número solicitado de VMs dentro das restrições atuais dos recursos e que maximizem a utilização de reservas da zona não utilizadas. Recomendado para cargas de trabalho em lote que não exijam alta disponibilidade.

API

Chame o método regionInstanceGroupManagers.patch. No corpo da solicitação, inclua a propriedade distributionPolicy e defina o respectivo campo targetShape.

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "distributionPolicy": {
        "targetShape": SHAPE
    }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias.
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias.
  • SHAPE: o formato de distribuição de destino. Pode ser um dos seguintes valores:
    • EVEN (o padrão): o grupo programa a criação e a exclusão de instâncias de VM para alcançar e manter um número uniforme de instâncias gerenciadas nas zonas selecionadas. A distribuição é uniforme quando o número de instâncias gerenciadas entre duas zonas não é diferente do número de instâncias mais uma. Recomendado para cargas de trabalho de exibição altamente disponível.
    • BALANCED: o grupo prioriza a aquisição de recursos, programando VMs em zonas onde os recursos estiverem disponíveis, ao mesmo tempo em que distribui VMs da maneira mais uniforme possível entre as zonas selecionadas a fim de minimizar o impacto de falhas na zona. Recomendado para de cargas de trabalho em lote ou de exibição altamente disponíveis que não exijam escalonamento automático.
    • ANY: o grupo escolhe as zonas para a criação de instâncias de VM que atendam ao número solicitado de VMs dentro das restrições atuais dos recursos e que maximizem a utilização de reservas da zona não utilizadas. Recomendado para cargas de trabalho em lote que não exijam alta disponibilidade.

Como visualizar a política de distribuição de instâncias configurada

Console

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

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

    A página listará os grupos de instâncias, se você tiver algum.
  2. Clique no nome do grupo de instâncias que você quer examinar. Uma página é aberta com as propriedades do grupo e uma lista de instâncias incluídas nele.
  3. Clique em Details.
  4. Na seção Local, procure por Formato de distribuição de destino.

gcloud

Execute o comando gcloud beta compute instance-groups managed describe.

gcloud beta compute instance-groups managed describe INSTANCE_GROUP_NAME \
    --region REGION

O comando retorna os detalhes do grupo, incluindo o campo distributionPolicy.targetShape:

...
distributionPolicy:
  targetShape: BALANCED
  zones:
  - zone: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f
  ...
name: my-group
region: https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1
...

API

Crie uma solicitação GET para o método regionInstanceGroupManagers.get.

GET https://www.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias;
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias

A forma de distribuição de destino é retornada no campo distributionPolicy.targetShape. Exemplo:

{
  "name": "my-instance-group",
  "distributionPolicy": {
    "targetShape": "BALANCED",
  },
  "targetSize": 50,
  ...
}

Como desativar e reativar a redistribuição proativa de instâncias

A redistribuição proativa de instâncias mantém um número igual de VMs nas zonas selecionadas na região. Essa configuração maximiza a disponibilidade do aplicativo no caso de uma falha no nível da zona.

A redistribuição proativa de instâncias é ativada por padrão para MIGs regionais, mas é possível desativá-la para MIGs não escalonadas automaticamente. Quando a redistribuição proativa de instâncias é desativada, o grupo não tenta redistribuir proativamente as VMs entre as zonas. Isso é útil quando você precisa:

  • Excluir ou abandonar VMs do grupo sem afetar outras VMs em execução. Por exemplo, é possível excluir uma VM de worker em lote após a conclusão do job sem afetar outros workers.
  • Proteger VMs com cargas de trabalho com estado contra exclusão automática indesejada devido à redistribuição proativa.
  • Definir o formato de distribuição de destino do MIG como BALANCED.

Use o Console do Cloud, a ferramenta gcloud ou a API Compute Engine para criar um MIG regional com redistribuição proativa de instâncias desativada ou para ativar ou desativar a redistribuição de instâncias de um grupo atual.

Como criar um grupo com a redistribuição proativa de instâncias desativada

Console

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

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

  2. Clique em Criar grupo de instâncias para criar um novo grupo.
  3. Em Local, selecione Várias zonas.
  4. Escolha uma região.
  5. Se você quiser escolher zonas específicas, clique em Configurar zonas para selecionar quais usar.
  6. Para desativar a redistribuição proativa de instâncias, siga estas etapas:
    1. Verifique se o Modo de escalonamento automático está definido como Não fazer escalonamento automático.
    2. Defina Redistribuição de instâncias como Desativada.
  7. Escolha um modelo de instância para o grupo ou crie um novo.
  8. Especifique o número de VMs para este grupo. Lembre-se de provisionar VMs suficientes para dar suporte ao aplicativo se ocorrer uma falha de zona.
  9. Continue com o restante do processo de criação do MIG.

gcloud

Para criar um novo MIG regional sem redistribuição proativa de instâncias, use o comando gcloud compute instance-groups managed create com a sinalização --instance-redistribution-type definida como NONE.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

Substitua:

  • INSTANCE_GROUP_NAME: o nome do MIG;
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a ser usado para o grupo;
  • TARGET_SIZE: o tamanho de destino do grupo;
  • ZONES: a lista de zonas em uma única região em que você quer implantar VMs

Exemplo:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

Para criar um MIG regional, sem escalonamento automático e sem redistribuição proativa de instâncias, faça uma solicitação POST ao método regionInstanceGroupManagers.insert. No corpo da solicitação, inclua a propriedade updatePolicy e defina o respectivo campo instanceRedistributionType como NONE.

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

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": "TARGET_SIZE",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias;
  • INSTANCE_GROUP_NAME: o nome do MIG;
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a ser usado para o grupo;
  • TARGET_SIZE: o tamanho de destino do grupo de instâncias;
  • ZONE: o nome de uma zona na única região em que você quer implantar as VMs

Como desativar a redistribuição proativa de instâncias

Antes de desativar a redistribuição proativa de instâncias, é preciso definir o modo do escalonador automático para desativar o escalonamento automático ou restringi-lo apenas para escalonamento horizontal.

Console

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

    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 modificar.
  3. Clique em Editar para modificar o grupo gerenciado de instâncias.
  4. Se houver alguma configuração de escalonamento automático, verifique se o Modo de escalonamento automático está definido como Não fazer escalonamento automático.
  5. Defina Redistribuição de instâncias como Desativado para desativar a redistribuição automática.
  6. Clique em Salvar.

gcloud

Para desativar a redistribuição proativa de instâncias para um MIG regional não escalonado automaticamente, use o comando compute instance-groups managed update com a sinalização --instance-redistribution-type definida como NONE.

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

Substitua:

  • INSTANCE_GROUP_NAME: o nome do MIG.
  • REGION: a região do grupo de instâncias.

API

Para desativar a redistribuição proativa de instâncias para um MIG regional sem escalonamento automático, faça uma solicitação PATCH para o método regionInstanceGroupManagers.patch. No corpo da solicitação, inclua a propriedade updatePolicy e defina o respectivo campo instanceRedistributionType como NONE

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/[INSTANCE_GROUP_NAME

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias;
  • INSTANCE_GROUP_NAME: o nome de um MIG sem escalonamento automático.

Como ativar a distribuição proativa de instâncias

Para ativar a distribuição proativa de instâncias, use um comando semelhante ao visto em Como desativar a redistribuição proativa de instâncias, mas defina o tipo de redistribuição de instâncias como PROACTIVE.

Se você tiver excluído ou abandonado manualmente algumas instâncias gerenciadas que resultam em uma distribuição desigual de VMs na região, antes de reativar a redistribuição proativa de instâncias, será necessário reequilibrar manualmente o grupo. A diferença no número de VMs entre duas zonas não pode exceder uma VM.

Um MIG regional não permite ativar a redistribuição proativa de instâncias quando as VMs são distribuídas de maneira uniforme entre as zonas (a diferença no número de VMs entre duas zonas é de duas ou mais VMs). Isso evita uma exclusão automática não intencional de VMs de zonas com mais VMs, o que seria acionado para atingir a distribuição uniforme.

Como reequilibrar manualmente um MIG regional

O MIG não será equilibrado se a diferença no número de VMs entre duas zonas for de duas ou mais VMs. Um MIG poderá não balancear se você desativar a redistribuição proativa de instâncias e, em seguida, excluir ou abandonar instâncias para causar uma distribuição desigual entre as zonas.

É possível conseguir manualmente uma distribuição uniforme de instâncias entre zonas excluindo VMs das zonas com mais instâncias ou redimensionando para adicionar instâncias para zonas com menos VMs até que a distribuição esteja uniforme.

Quando você redimensiona um MIG com a redistribuição proativa de instâncias desativada, o grupo ainda converge de forma oportunista para o equilíbrio, tratando cada operação de redimensionamento como uma oportunidade para equilibrar o grupo:

  • Quando o grupo cresce, o grupo sempre tenta adicionar VMs às zonas com o menor número de VMs.
  • Quando o grupo diminui, o grupo sempre remove as VMs das zonas com o maior número de VMs.
Exemplo de redimensionamento manual de um grupo para conseguir redistribuição uniforme

Como simular uma falha de zona em um MIG regional

Para testar se o MIG regional está sendo provisionado em excesso e sobreviva a uma interrupção de zona, use o exemplo a seguir para simular uma falha zonal.

Neste script, o Apache é interrompido e iniciado como o cenário padrão. Caso isso não se aplique ao aplicativo, substitua os comandos que interrompem e iniciam o Apache pelo seu próprio cenário de falha e recuperação.

  1. Implante e execute esse script continuamente em todas as VMs do grupo. Para fazer isso, adicione o script ao modelo da instância ou inclua esse script a uma imagem personalizada e use essa imagem no modelo.

    #!/usr/bin/env bash
    
    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    set -o nounset
    set -o errexit
    set -o pipefail
    
    function GetMetadata() {
      curl -s "$1" -H "Metadata-Flavor: Google"
    }
    
    PROJECT_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/project/attributes"
    INSTANCE_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/instance"
    ZONE=$(GetMetadata "$INSTANCE_METADATA_URL/zone" | cut -d '/' -f 4)
    INSTANCE_NAME=$(hostname)
    
    # We keep track of the state to make sure failure and recovery is triggered only once.
    STATE="healthy"
    while true; do
      if [[ "$ZONE" = "$(GetMetadata $PROJECT_METADATA_URL/failed_zone)" ]] && \
         [[ "$INSTANCE_NAME" = *"$(GetMetadata $PROJECT_METADATA_URL/failed_instance_names)"* ]]; then
        if [[ "$STATE" = "healthy" ]]; then
          STATE="failure"
          # Do something to simulate failure here.
          echo "STARTING A FAILURE"
          /etc/init.d/apache2 stop
        fi
      else
        if [[ "$STATE" = "failure" ]] ; then
          STATE="healthy"
          # Do something to recover here.
          echo "RECOVERING FROM FAILURE"
          /etc/init.d/apache2 start
        fi
      fi
      sleep 5
    done
    
    
  2. Simule uma falha de zona definindo estes dois campos de metadados do projeto:

    • failed_zone: define a zona em que simular a falha (limite a falha a apenas uma zona);
    • failed_instance_names: escolha as VMs que ficarão off-line por nome (para limitar a falha apenas a nomes de VM que contenham essa string).

    É possível definir esses metadados usando a ferramenta gcloud. Por exemplo, o comando a seguir define a interrupção da zona como a zona europe-west1-b e afeta as VMs que têm nomes que começam com base-instance-name:

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. Depois de simular a falha, execute a recuperação removendo as chaves de metadados:

    gcloud compute project-info remove-metadata --keys failed_zone,failed_instance_names

Aqui estão algumas ideias de cenários de falha que podem ser executados com esse script:

  • Interrompa seu aplicativo completamente para ver como o MIG responde.
  • Faça com que suas VMs retornem como "não íntegras" nas verificações de integridade de balanceamento de carga.
  • Modifique o iptables para bloquear parte do tráfego de e para a VM.
  • Encerre as VMs. Por padrão, ele será recriado pelo MIG regional logo após, mas a nova encarnação será encerrada imediatamente assim que o script for executado e enquanto os valores de metadados forem definidos. Isso acarreta um loop de falha.

A seguir