Agrupar VMs não gerenciadas


Um grupo de instâncias não gerenciadas é um conjunto de instâncias de máquina virtual (VM) que residem em um único projeto, zona, rede VPC e sub-rede. Esses grupos são úteis para agrupar VMs que exigem configurações ou ajustes individuais. É possível usar um grupo de instâncias não gerenciadas no serviço de back-end de um balanceador de carga.

Para VMs que exigem configurações consistentes, use um grupo gerenciado de instâncias (MIG, na sigla em inglês) baseado em um modelo de instância. Quando possível, considere usar grupos gerenciados de instâncias em vez de grupos não gerenciados. Para criar um grupo gerenciado de instâncias, consulte Criar um MIG.

É possível adicionar qualquer tipo de grupo de instâncias como back-end a um balanceador de carga do Google Cloud. Para mais informações, consulte a visão geral do Cloud Load Balancing. Para ver o número de VMs por grupo de instâncias compatíveis com o Cloud Load Balancing, consulte VMs por grupo de instâncias.

Para saber mais sobre os grupos de instâncias, consulte Visão geral dos grupos de instâncias.

Antes de começar

  • Leia sobre a diferença entre grupos de instâncias gerenciadas e não gerenciadas.
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

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

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

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

        gcloud init

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

Como trabalhar com grupos de instâncias não gerenciadas

Como criar grupos

Ao contrário de grupos gerenciados de instâncias, os grupos não gerenciados de instâncias são apenas conjuntos de VMs distintas que não compartilham um modelo de instância comum. Basta criar um grupo e adicionar VMs individuais a ele.

Console

  1. No Console do Google 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.
  3. Clique em Novo grupo de instâncias não gerenciadas.
  4. Digite um nome para o grupo de instâncias não gerenciadas.
  5. Em Local, selecione uma região e uma zona.
  6. Selecione uma Rede e uma Sub-rede.
  7. Em Instâncias de VM, selecione as VMs para adicionar a este grupo.
  8. Clique em Criar.

gcloud

Para criar um novo grupo de instâncias não gerenciadas, use o comando instance-groups unmanaged create:

gcloud compute instance-groups unmanaged create instance-group-name \
    --zone=zone

Substitua:

  • instance-group-name: o nome do grupo do qual você quer remover as VMs.
  • zone: a zona em que você quer remover todas as portas nomeadas do grupo.

REST

Para criar um grupo de instâncias não gerenciadas com REST, envie uma solicitação POST usando o método instanceGroups.insert:

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

{
   "name": "instance-group-name"
}

Substitua:

  • instance-group-name: o nome do grupo do qual você quer remover as VMs.
  • zone: a zona em que você quer listar as VMs do grupo.
  • project-id: o ID do projeto que contém o grupo.

Quando você cria um novo grupo de instâncias não gerenciadas com a CLI do Google Cloud ou com a REST nenhuma VM é adicionada automaticamente. É possível adicionar VMs ao grupo de instâncias não gerenciadas manualmente.

Como listar e descrever grupos

Recupere uma lista de grupos de instâncias não gerenciadas atuais.

Console

No console do Google Cloud, a página Grupos de instâncias lista os grupos de instâncias gerenciadas e não gerenciadas.

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

gcloud

Para listar todos os grupos de instâncias não gerenciadas no seu projeto com a CLI do Google Cloud, use lista de grupos de instâncias não gerenciadas:

gcloud compute instance-groups unmanaged list

Para mais informações sobre um grupo de instâncias não gerenciadas específicas, use o comando instance-groups unmanaged describe:

gcloud compute instance-groups unmanaged describe instance-group-name \
   --zone=zone

Substitua:

  • instance-group-name: o nome do grupo a ser descrito.
  • zone: a zona do grupo.

REST

Para listar grupos de instâncias com REST, envie uma solicitação GET usando o método instanceGroups.list:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

Para informações sobre um grupo de instâncias não gerenciadas específicas com a API, envie uma solicitação GET usando o método instanceGroups.get:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

Substitua:

  • instance-group-name: o nome do grupo a ser descrito.
  • zone: a zona do grupo.
  • project-id: o ID do projeto que contém o grupo.

Como excluir grupos

Diferente de um grupo de instâncias gerenciadas, a exclusão de um grupo de instâncias não gerenciadas não exclui nenhuma das VMs do grupo. Essa exclusão só remove o agrupamento lógico de VMs.

Não é possível excluir um grupo de instâncias se ele for um back-end de um balanceador de carga do Google Cloud. Primeiro é preciso remover o back-end do serviço de back-end.

Console

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

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

  2. Selecione um ou mais grupos de instâncias não gerenciadas na lista.
  3. Clique em Excluir para remover os grupos. Os grupos são removidos, mas as VMs neles não são excluídas.

gcloud

Para excluir um grupo de instâncias não gerenciadas, use o comando instance-groups unmanaged delete:

gcloud compute instance-groups unmanaged delete instance-group-name \
    --zone=zone

Substitua:

  • instance-group-name: o nome do grupo que você quer excluir.
  • zone: a zona do grupo.

REST

Para excluir um grupo de instâncias não gerenciadas com REST, envie uma solicitação DELETE usando o método instanceGroups.delete:

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

Substitua:

  • instance-group-name: o nome do grupo que você quer excluir.
  • zone: a zona do grupo.
  • project-id: o ID do projeto que contém o grupo.

Filiação a grupo

Como adicionar VMs

Depois de criar um grupo de instâncias não gerenciadas, é possível adicionar VMs ao grupo. No entanto, só será possível agrupar VMs se a primeira ou única interface de rede (nic0) de cada VM estiver anexada à mesma rede VPC. O número máximo de VMs que podem ser adicionadas a um grupo de instâncias não gerenciadas é 2.000. Se você quiser adicionar mais de 2.000 VMs ao grupo, entre em contato com o suporte.

Console

  1. No Console do Google 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 adicionar suas VMs. Uma página será aberta com as propriedades do grupo e uma lista de VMs que já fazem parte dele.
  3. Clique em Editar para modificar esse grupo não gerenciado de instâncias.
  4. Em Instâncias de VM, selecione uma ou mais VMs atuais para adicionar ao grupo. Só é possível selecionar VMs que estejam na mesma zona, rede VPC e sub-rede das VMs atuais.
  5. Clique em Salvar para adicionar as novas VMs ao grupo.

gcloud

Para adicionar instâncias a um grupo de instâncias não gerenciadas, use o comando instance-groups un-managed add-instances:

gcloud compute instance-groups unmanaged add-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

Substitua:

  • instance-group-name: o nome do grupo ao qual você quer adicionar VMs.
  • zone: a zona do grupo.
  • list-of-VM-names: uma lista delimitada por vírgulas de VMs na mesma zona, rede VPC e sub-rede.

REST

Para adicionar VMs a um grupo de instâncias não gerenciadas, envie uma solicitação POST usando o método instanceGroups.addInstances:

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

   {
      "instances": [
         {
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
         ....
         }
      ]
   }

Substitua:

  • instance-group-name: o nome do grupo ao qual você quer adicionar VMs.
  • zone: a zona do grupo.
  • project-id: o ID do projeto que contém o grupo.
  • instance-1-name e instance-2-name: são nomes das VMs, na mesma zona, rede VPC e sub-rede que você quer adicionar ao grupo.

Como listar VMs

É possível recuperar uma lista de VMs incluídas em um grupo de instâncias não gerenciadas.

Console

  1. No Console do Google 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 não gerenciadas que você quer visualizar. Uma página com a lista de instâncias incluídas no grupo será exibida.

gcloud

Para listar as VMs em um grupo de instâncias não gerenciadas, use o comando instance-groups unmanaged list-instances:

gcloud compute instance-groups unmanaged list-instances instance-group-name \
   --zone=zone

Substitua:

  • instance-group-name: o nome do grupo cujos membros você quer listar.
  • zone: a zona do grupo.

REST

Para listar VMs em um grupo de instâncias não gerenciadas, envie uma solicitação POST usando o método instanceGroups.listInstances:

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

Substitua:

  • instance-group-name: o nome do grupo cujos membros você quer listar.
  • zone: a zona do grupo.
  • project-id: o ID do projeto que contém o grupo.

Como remover VMs

É possível remover VMs de um grupo de instâncias não gerenciadas. Fazer isso, no entanto, não exclui a VM.

Console

  1. No Console do Google 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 remover as VMs. Uma página é aberta com as propriedades do grupo de instâncias e uma lista de VMs incluídas no grupo.
  3. Na lista, selecione uma ou mais VMs que você quer remover do grupo.
  4. Clique em Remover do grupo. As VMs que você remove de um grupo de instâncias não gerenciadas continuam existindo e sendo executadas, a menos que você as interrompa ou exclua.

gcloud

Para remover VMs de um grupo de instâncias não gerenciadas, use o comando instance-groups unmanaged remove-instances:

gcloud compute instance-groups unmanaged remove-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

Substitua:

  • instance-group-name: o nome do grupo que contém instâncias a serem removidas.
  • zone: a zona do grupo.
  • list-of-VM-names: uma lista delimitada por vírgulas de VMs que você quer remover do grupo.

REST

Para remover VMs de um grupo de instâncias não gerenciadas, envie uma solicitação POST usando o método instanceGroups.removeInstances. É possível remover várias VMs simultaneamente, como mostrado abaixo:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/removeInstances
{
    "instances": [
        {
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
        ....
        }
    ]
}

Substitua:

  • instance-group-name: o nome do grupo que contém instâncias a serem removidas.
  • zone: a zona do grupo.
  • project-id: o ID do projeto que contém o grupo.
  • instance-1-name e instance-2-name: são nomes das VMs que você quer desassociar do grupo.

Como trabalhar com portas nomeadas

As portas nomeadas são pares de chave-valor que representam o nome e o número de uma porta. O nome da porta representa o nome de um serviço ou aplicativo. Esse nome representa a porta em que o serviço ou aplicativo é executado.

As portas nomeadas são utilizadas pelo Cloud Load Balancing. Balanceadores de carga que atuam como proxies se inscrevem em somente uma porta nomeada na configuração do serviço de back-end. O nome da porta é convertido em um número de porta com base no mapeamento de portas nomeadas de cada back-end do grupo de instâncias.

Por exemplo, um serviço de back-end pode se inscrever em uma porta nomeada http-port. O grupo de instâncias de back-end pode ter uma porta chamada http-port:80. O grupo de instâncias de back-end instrui o balanceador de carga a enviar tráfego para uma VM no grupo na porta 80 usando um protocolo, como TCP. O protocolo é definido no serviço de back-end do balanceador de carga.

As portas nomeadas são metadados simples usados por balanceadores de carga do proxy. Elas não controlam recursos de rede ou firewall no Compute Engine.

Vários números de porta para uma porta nomeada

É possível atribuir várias portas para cada nome de serviço. Também é possível atribuir vários nomes de serviço a cada porta.

Tenha em mente os seguintes pontos:

  • O tráfego é balanceado entre todas as portas com o mesmo nome.
  • Um determinado serviço de back-end só pode encaminhar tráfego para uma porta nomeada de cada vez.
  • Se você usar vários números de porta para uma porta nomeada, todas as portas precisarão ser do mesmo aplicativo.

    Por exemplo, http:80,http:8080 funciona, mas http:80,http:443 não funciona porque a porta 80 não é compatível com TLS.

É possível definir várias portas nomeadas em um grupo de instâncias. Para ilustrar, considere um serviço de back-end de exemplo que assina a porta nomeada http-port e que tem dois grupos de instâncias de back-end:

  • instance-group-a com uma porta nomeada de http-port:80
  • instance-group-b com uma porta nomeada de http-port:79

Este serviço de back-end envia tráfego para a porta 80 para VMs em instance-group-a e porta 79 para VMs em instance-group-b.

Quando você adicionar o mesmo grupo de instâncias a vários serviços de back-end (para vários balanceadores de carga), e o grupo de instâncias exibir portas diferentes em cada balanceador de carga, não adicione todos os números de porta a uma única porta nomeada. Em vez disso, crie uma porta nomeada exclusiva e mapeie-a para um conjunto de portas que cada serviço de back-end deve exibir.

Por exemplo, suponha que você tenha três aplicativos, cada um com seu próprio balanceador de carga. Cada aplicativo tem um número de porta: 81 para app1, 82 para app2 e 83 para app3. Supondo que os três serviços de back-end estejam usando um grupo de instâncias comum, atribua as portas nomeadas desse grupo de instâncias como [app1:81, app2:82, app3:83].

Portas nomeadas e verificações de integridade

Para que uma porta nomeada com vários números de porta em um serviço de back-end funcione em um balanceador de carga de aplicativo externo ou interno, a verificação de integridade precisa ter a flag --use-serving-port em vez de um número de porta específico de dois minutos. Essa opção não está disponível no Console do Google Cloud. Para definir --use-serving-port, você precisa usar a CLI do Google Cloud ou a API.

Suponha que você tenha um aplicativo que balanceie a carga do tráfego em três portas diferentes (81, 82, 83) no mesmo serviço de back-end com um único grupo de instâncias. É possível atribuir as portas para esses grupos de instâncias como [app:81, 82, 83]. A verificação de integridade desse cenário precisa ter a sinalização --use-serving-port.

Para mais informações, consulte a documentação de verificação de integridade do balanceamento de carga.

Portas nomeadas e regras de firewall

Portas nomeadas não criam nem modificam regras de firewall do Google Cloud. Para permitir o tráfego para as VMs de back-end, você ainda precisa criar as regras de firewall necessárias.

Portas nomeadas e serviços de back-end

Além da configuração do grupo de instâncias, configure também o serviço de back-end. Por exemplo, suponha que você definiu a porta nomeada em um grupo de instâncias com o nome my-service-name e a porta 8888:

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

Em seguida, faça referência à porta nomeada na configuração do serviço de back-end com o --port-name no serviço de back-end definido como my-service-name:

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

Como criar portas nomeadas

Console

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

    Acesse Grupos de instâncias

  2. Na coluna Nome da lista, clique no nome do grupo de instâncias em que você quer especificar portas nomeadas. Uma página é aberta com as propriedades do grupo de instâncias.
  3. Clique em Editar para modificar esse grupo não gerenciado de instâncias.
  4. Na seção Mapeamento de portas, clique em Adicionar porta e insira um nome de porta e o número dela. Adicione ou remova outras portas nomeadas conforme necessário.
  5. Clique em Salvar para atualizar a lista de portas nomeadas do grupo de instâncias não gerenciadas.

gcloud

Para adicionar portas nomeadas a um grupo não gerenciado de instâncias, use o comando instance-groups unmanaged set-named-ports:

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=port-name:port-number,...

Para listar portas nomeadas em um grupo não gerenciado de instâncias, use o comando instance-groups unmanaged get-named-ports:

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

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

Por exemplo:

gcloud compute instance-groups unmanaged 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 a cada serviço, crie mais de uma entrada para cada nome ou porta. Por exemplo, se as portas 10, 20 e 80 forem para o mesmo aplicativo, será possível atribuir name1 a todas essas portas. Além disso, é possível atribuir dois nomes, name2 e name3, à porta 8080. Por fim, é possível atribuir a porta 9000 a name4, como no exemplo a seguir:

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

Para remover todas as portas nomeadas de um grupo de instâncias não gerenciadas com a CLI do Google Cloud, use o comando instance-groups unmanaged set-named-ports com uma lista vazia de portas nomeadas:

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=""

Em todos os exemplos acima, substitua o seguinte se presente:

  • instance-group-name: o nome do grupo de instâncias.
  • zone: a zona do grupo.
  • port-name e port-number: o nome e o número da porta representam um mapeamento de um nome escolhido para um número de porta. É possível especificar vários mapeamentos separados por vírgula. Por exemplo, port-one:80,port-two:8080 é uma lista válida de portas nomeadas.

REST

  1. Descreva o grupo de instâncias e observe a fingerprint.

  2. Para adicionar portas nomeadas, envie uma solicitação POST usando o método instanceGroups.setNamedPorts. Se você quiser remover todas as portas nomeadas, defina namedPorts como uma lista vazia.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/setNamedPorts
    
    {
        "fingerprint": "fingerprint",
        "namedPorts": [
            {
            "name": "port-name",
            "port": port-number
            },
            {
            "name": "port-name",
            "port": port-number
            },
            ....
        ]
    }
    

    Substitua:

    • instance-group-name: o nome do grupo de instâncias.
    • zone: a zona do grupo.
    • project-id: o ID do projeto que contém o grupo.
    • port-name e port-number: o nome e o número da porta representam um mapeamento de um nome escolhido para um número de porta.
    • fingerprint: esta é a impressão digital da etapa anterior.

A seguir