Como criar grupos de instâncias gerenciadas

Um grupo de instâncias gerenciadas (MIG, na sigla em inglês) contém instâncias de máquina virtual (VM) idênticas baseadas em um modelo de instância. Os MIGs mantêm a alta disponibilidade dos aplicativos mantendo proativamente as VMs disponíveis, ou seja, no estado RUNNING.

Os MIGs são compatíveis com recuperação automática, balanceamento de carga, escalonamento automático e atualização automática.

É possível criar MIGs zonais (zona única) e regionais (multizonais). Os MIGs regionais fornecem maior disponibilidade porque distribuem VMs entre várias zonas dentro da mesma região.

Para mais informações sobre grupos de instâncias, consulte a visão geral dos grupos de instâncias.

Antes de começar

Limitações

  • Cada MIG pode conter até 1.000 VMs.
  • Ao atualizar um MIG, não é possível especificar mais de 1.000 instâncias em uma solicitação.

Como usar MIGs para aplicativos sem estado

É possível usar MIGs para aplicativos sem estado, que não dependem do estado específico da instância de máquina virtual (VM) subjacente a ser executada. Seu aplicativo não pode depender de propriedades de VM que não permaneçam, como o conteúdo de discos anexados ou dados na memória. Se o aplicativo exigir a preservação das propriedades da VM, consulte MIGs com estado.

O comportamento padrão de todos os discos permanentes em MIGs sem estado é excluí-los ou recriá-los quando a VM correspondente for excluída ou recriada. Portanto, não dependa dos discos anexados como dados permanentes em um MIG sem estado. Para manter seus dados, o Google recomenda que você mantenha imagens personalizadas atualizadas regularmente com software e configurações atualizados. Para reter seus dados, use scripts de inicialização e configure seus aplicativos para fazer backup dos dados em outro local centralizado, como o Cloud Storage.

Nos modelos de instância, é possível especificar uma imagem do contêiner ou uma imagem personalizada com scripts de inicialização relevantes. Assim, quando uma VM for recriada, ela terá os aplicativos necessários instalados e acesso aos dados obrigatórios. Para mais informações sobre como criar modelos de instância, consulte Modelos de instância determinísticos.

Como usar MIGs para aplicativos com estado (Beta)

Os grupos de instâncias gerenciadas também são compatíveis com aplicativos com estado. Um MIG com estado preserva o estado exclusivo de cada VM (nome da instância de VM, discos permanentes anexados e/ou metadados) na reinicialização, recriação, recuperação automática ou atualização de máquina.

Use MIGs com estado para aplicativos que tenham dados com estado ou configuração, como bancos de dados, aplicativos de processamento de dados, aplicativos legados e cargas de trabalho em lote de longa duração com pontos de verificação.

Use MIGs com estado sempre que implantar um aplicativo ou cluster com estado no Compute Engine e quiser melhorar a disponibilidade com recuperação automática e implantação em várias zonas ou se quiser simplificar e acelerar atualizações com atualizações automáticas em andamento.

Para informações sobre como criar um MIG com estado ou adicionar uma configuração com estado a um MIG atual, consulte Como configurar MIGs com estado.

Como criar um grupo de instâncias gerenciadas

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

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

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 um grupo de instâncias.
  3. Insira um nome para o MIG 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 de instância. 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. Se quiser, ative o Escalonamento automático para que o grupo adicione ou remova instâncias automaticamente com base na utilização ou ative a recuperação automática para realizar a verificação de integridade baseada em aplicativo em VMs no grupo.
  7. Clique em Criar para gerar o novo grupo.

gcloud

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

gcloud compute instance-groups managed create instance-group-name \
    --base-instance-name base-name \
    --size size \
    --template instance-template \
    --zone zone

Faça estas substituições:

  • instance-group-name: o nome desse grupo de instâncias.
  • base-name: o nome a ser usado para VMs criadas neste grupo de instâncias. Como essas VMs são baseadas em um modelo comum, cada VM recebe uma string aleatória como parte do nome dela. O nome de base precede essa string aleatória. Por exemplo, se você definir o nome base como example, as VMs terão nomes como example-yahs e example-qtyz. Se você precisar de nomes específicos, consulte Como criar instâncias com nomes específicos em MIGs.
  • size: o tamanho do grupo de instâncias.
  • instance-template: o nome do modelo de instância a ser usado para este grupo.
  • zone: uma das zonas disponíveis para o Compute Engine.

    Por exemplo, o comando a seguir cria um grupo de instâncias chamado example-group, com nome de VM 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, crie uma solicitação POST para o método instanceGroupManagers.insert ou regionInstanceGroupManagers.insert. No corpo da solicitação, inclua o nome do grupo, o tamanho do grupo, o nome base das VMs no grupo e o URL do modelo de instância.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers

{
  "baseInstanceName": "base-name",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/instance-template"
    }
  ],
  "name": "instance-group-name",
  "targetSize": size
}

Faça estas substituições:

  • project-id: o ID do projeto para a solicitação.
  • zone: a zona da solicitação.
    • Para um MIG regional, substitua zones/zone por regions/region e especifique uma região.
  • instance-group-name: o nome desse grupo de instâncias.
  • base-name: o nome a ser usado para VMs criadas neste grupo de instâncias. Como essas VMs são baseadas em um modelo comum, cada VM recebe uma string aleatória como parte do nome dela. O nome de base precede essa string aleatória. Por exemplo, se você definir o nome base como example, as VMs terão nomes como example-yahs e example-qtyz. Se você precisar de nomes específicos, consulte Como criar instâncias com nomes específicos em MIGs.
  • size: o tamanho do grupo de instâncias.
  • instance-template: o modelo de instância a ser usado para este grupo.

Dependendo de como você configura e age em um MIG, várias políticas e ações podem afetar as instâncias no grupo. Para determinar quais instâncias gerenciadas estão em execução, consulte Como verificar o status de instâncias gerenciadas.

Alteração do 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 VMs no grupo. Isso permite controlar exatamente quais VMs são atualizadas, mas faz com que o grupo de instâncias contenha VMs diferentes.

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

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 o modelo.
  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 para atualizar um modelo, passe o novo modelo ao subcomando instance-groups managed set-instance-template:

gcloud compute instance-groups managed set-instance-template instance-group-name \
    --template instance-template \
    --zone zone

API

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

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/instance-template
}

Depois de alterar o modelo de instância, recrie instâncias individuais ou atualize todas as VMs no grupo com uma atualização contínua.

Como redimensionar um grupo de instâncias gerenciadas

Para adicionar ou remover VMs em um MIG, é possível:

Como redimensionar um MIG automaticamente

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

Como definir manualmente o tamanho de um MIG

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

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

É possível redimensionar um grupo de instâncias gerenciadas usando o Console do Google Cloud, a ferramenta gcloud compute ou a API.

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 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 vai adicionar ou remover instâncias automaticamente, conforme necessário. No entanto, é possível alterar os valores de número mínimo de instâncias e número máximo de instâncias para ajustar indiretamente o tamanho do grupo por meio do escalonador automático.
  5. Clique em Salvar para aplicar o novo modelo.

gcloud

Use o subcomando resize.

gcloud compute instance-groups managed resize instance-group-name \
    --size new-size \
    --zone zone

API

Crie uma solicitação para o método resize. Especifique o novo tamanho do grupo de instâncias como um parâmetro.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/resize?size=new-size

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

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

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

Por padrão, se a criação inicial de uma instância de VM falhar, o grupo de instâncias gerenciadas tentará continuamente criar a VM até que ela seja gerada. No entanto, se você não quiser novas tentativas de criação automática, poderá desativar o modo de criação configurando 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 da instância, o grupo de instâncias gerenciadas desistirá dessa instância, a removerá da lista de instâncias gerenciadas do grupo e diminuirá o tamanho de destino do grupo de instâncias gerenciadas.

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

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

Para redimensionar um grupo de instâncias gerenciadas no modo de novas tentativas de criação desativada, use a ferramenta gcloud ou a API.

gcloud

Use o subcomando resize com a sinalização --no-creation-retries:

gcloud beta compute instance-groups managed resize instance-group-name --size new-size \
    --no-creation-retries \
    --zone zone

API

Crie uma solicitação para o método resizeAdvanced. Especifique o novo tamanho do grupo de instâncias e o campo noCreationRetries no corpo da solicitação.

POST https://compute.googleapis.com/compute/beta/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/resizeAdvanced

{
 "targetSize": size
 "noCreationRetries": true
}

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

É possível ver quais instâncias estão sendo criadas e em qual modo usando o método listManagedInstances. As instâncias que estão sendo criadas no modo de tentativas de criação desativadas têm um currentAction de CREATING_WITHOUT_RETRIES.

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

Se você tiver um sistema que depende de nomes específicos, poderá criar VMs com esses nomes. Os nomes que você atribuir a essas instâncias gerenciadas persistirão se a VM for recriada. Consulte Como adicionar instâncias com nomes específicos.

Como excluir instâncias específicas de um grupo

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

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

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

Para excluir instâncias de um grupo de instâncias gerenciadas use o Console do Google Cloud, a ferramenta gcloud compute ou a API.

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

Use o subcomando instance-groups managed delete-instances:

gcloud compute instance-groups managed delete-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    --zone zone

API

Crie uma solicitação para o método instanceGroupManagers.deleteInstances. 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-name/deleteInstances

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

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

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 de instâncias gerenciadas.

Como abandonar instâncias de um grupo

É possível separar uma instância de VM de um grupo de instâncias gerenciadas para depurar mais facilmente problemas com VMs individuais sem afetar o grupo como um todo. O abandono de uma instância de um grupo também remove essa VM 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 do grupo de instâncias, mas não altera as configurações especificadas do escalonador automático. Os grupos de instâncias gerenciadas com um escalonador automático continuam a adicionar ou remover VMs automaticamente, conforme necessário.

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

Para abandonar instâncias de um grupo de instâncias gerenciadas use o Console do Google Cloud, a ferramenta gcloud compute ou a API.

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 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 sem excluí-la, use o subcomando abandon-instances.

gcloud compute instance-groups managed abandon-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    --zone zone

API

Crie uma solicitação para o método instanceGroupManagers.abandonInstances. 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-name/abandonInstances

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

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

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 de instâncias gerenciadas.

Como recriar instâncias no grupo

A recriação de uma instância gerenciada exclui a VM especificada e cria uma nova VM usando o modelo de instância atribuído ao grupo de instâncias gerenciadas.

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

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

Recrie as VMs 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-name \
    --instances example-i3n2,example-z2x9 \
    --zone zone

API

Crie uma solicitação para o método instanceGroupManagers.recreateInstances. 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-name/recreateInstances

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

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

Depois que você fizer uma solicitação para recriar instâncias em um grupo de instâncias gerenciadas, as novas VMs 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 de instâncias gerenciadas.

Como excluir um grupo de instâncias gerenciadas

Quando você exclui um grupo de instâncias gerenciadas, todas as VMs no grupo são excluídas. Se você precisar manter alguma das VMs nesse grupo de instâncias gerenciadas, abandone as instâncias primeiro para removê-las do grupo. Em seguida, exclua o grupo de instâncias gerenciadas.

Quando você exclui um grupo de instâncias gerenciadas e as instâncias dele usando o Console do Google Cloud ou a ferramenta gcloud compute, todos os escalonadores automáticos anexados são excluídos automaticamente. Entretanto, se estiver usando a API, primeiro é necessário emitir solicitações separadas para excluir qualquer escalonador automático com autoscalers.delete ou regionAutoscalers.delete.

Console

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

    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 VMs no grupo de instâncias gerenciadas.

gcloud

Use o subcomando instance-groups managed delete.

gcloud compute instance-groups managed delete instance-group-name \
    --zone zone

API

Crie uma solicitação para o método instanceGroupManagers.delete.

DELETE https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

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

Como criar grupos de instâncias preemptivas

É possível usar grupos de instâncias gerenciadas para criar rapidamente várias instâncias preemptivas, o que pode reduzir os custos das VMs 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. No Console do Cloud, acesse a página Modelos de instância.

    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. Inclui 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 defina-a 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.

Noções básicas sobre 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 seguinte grupo de instâncias gerenciadas, observe que os campos instanceTemplate e versions sã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 implementar atualizações em MIGs.

(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 comprar 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://compute.googleapis.com/compute/v1/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, você especifica um modelo de instância. Para um dos versions mas não ambos, você também tem que especificar o 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 example-template e o restante das instâncias de VM usam 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 o seguinte, em que project-id é o ID numérico do projeto correspondente:

project-id@cloudservices.gserviceaccount.com

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 recursos com base no modelo de instância. Em particular, isso significa que a conta de serviço precisa receber o papel compute.instanceAdmin.v1 e, como opção, o papel serviceAccountUser, para criar e gerenciar VMs no grupo de instâncias. O papel serviceAccountUser será necessário apenas se o grupo de instâncias gerenciadas criar VMs que podem ser executadas como uma conta de serviço. Lembre-se de que essa conta também é usada 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:

  • tem o papel serviceAccountUser. Importante se você planeja criar instâncias que podem ser executadas como uma conta de serviço;
  • tem permissões 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

Veja Como lançar atualizações para MIGs.

Como resolver problemas

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

Há vários problemas que podem impedir o grupo de instâncias de criar ou recriar com êxito uma instância de VM. 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 permanente 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 VM. Se uma VM tiver o nome my-awesome-instance, o disco também será chamado de 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. Assim, quando uma VM foi excluída (por exemplo, devido à recuperação automática), o disco permanente não foi excluído. Quando o grupo de instâncias gerenciadas tentou recriar a VM com o mesmo nome, ele encontrou o mesmo problema em que um disco permanente já existe com o mesmo nome. 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ê tiver atualizado o modelo de instância recentemente, pode haver uma propriedade inválida que faz com que o grupo de instâncias gerenciadas falhe na criação da VM. 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 VMs, qualquer outro disco que você quiser compartilhar entre todas as VMs do grupo pode ser anexado somente no modo somente leitura.
  • Se você configurou uma política de recuperação automática, mas não configurou (ou configurou incorretamente) a regra de firewall que permite que as sondagens de verificação de integridade alcancem seu aplicativo, suas VMs parecerão não íntegras, e o MIG sempre tentará recriá-las. Para mais informações sobre como configurar uma regra de firewall de verificação de integridade, consulte este exemplo de verificação de integridade configurada.

A seguir