Configurar metadados com estado em MIGs


Os metadados da instância são úteis para definir propriedades e comunicar com as suas aplicações através do servidor de metadados. Por exemplo, pode usar metadados para configurar a identidade da instância da máquina virtual (VM), as variáveis de ambiente, as informações sobre a arquitetura do cluster ou o intervalo de dados de que uma VM é responsável.

Ao configurar metadados com estado num grupo de instâncias geridas (GIG), garante que os metadados específicos da instância são preservados em instâncias geridas eventos de autorreparação, atualização e recriação.

Configure metadados com estado individualmente para instâncias de VM num MIG definindo-os em configurações por instância e aplicando a configuração. Pode definir uma configuração por instância na criação da instância ou em instâncias geridas existentes. Depois de a configuração por instância ser aplicada, o MIG armazena metadados com estado no campo preserved state from configuration (preservedStateFromConfig) de uma instância gerida.

Antes de começar

  • Reveja quando usar MIGs com estado e como funcionam os MIGs com estado.
  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

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

    gcloud

    1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    Terraform

    Para usar os exemplos do Terraform nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para mais informações, consulte Set up authentication for a local development environment.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

Limitações

Um MIG com metadados com estado tem as seguintes limitações:

Um MIG com uma configuração com estado, ou seja, um MIG com estado, tem as seguintes limitações:

  • Não pode usar o dimensionamento automático se o MIG tiver uma configuração com estado.
  • Se quiser usar atualizações contínuas automáticas, tem de definir o método de substituição como RECREATE.
  • Para os MIGs regionais com estado, tem de desativar a redistribuição proativa (defina o tipo de redistribuição como NONE) para impedir a eliminação de instâncias com estado pela redistribuição automática entre zonas.
  • Se usar uma configuração de todas as instâncias para substituir as propriedades do modelo de instância, não pode especificar essas propriedades em nenhuma configuração por instância e, ao mesmo tempo, na configuração de todas as instâncias do grupo.

  • Quando elimina uma instância permanentemente (manualmente ou redimensionando), o MIG não preserva os metadados com estado da instância.

Definir metadados com estado na criação de instâncias

Defina metadados com estado quando criar manualmente instâncias num MIG. Isto é útil para migrar uma aplicação com estado em VMs autónomas para um MIG com estado e quando cria instâncias com estado.

Quando cria manualmente uma instância num MIG e fornece metadados com estado, o MIG realiza as seguintes tarefas:

  1. Cria uma instância gerida a partir do modelo de instância com o nome da instância fornecido.
  2. Cria uma configuração por instância com os metadados com estado fornecidos e define esses metadados na instância.
  3. Armazena os metadados com estado no estado preservado da configuração (preservedStateFromConfig) da instância gerida associada.

gcloud

Para criar uma instância gerida com um nome personalizado e definir metadados com estado nessa VM, use o comando gcloud compute instance-groups managed create-instance com a flag --stateful-metadata.

gcloud compute instance-groups managed create-instance NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...]

Substitua o seguinte:

  • NAME: o nome do MIG no qual criar uma instância
  • INSTANCE_NAME: o nome da instância a criar
  • KEY e VALUE: pares de chave-valor de metadados com estado para definir individualmente para as instâncias, além dos metadados definidos no modelo de instância
    • Os valores-chave que definir aqui têm prioridade sobre quaisquer valores-chave em conflito do modelo de instância

Exemplo

Tem de implementar um cluster de nós, example-cluster, que pode funcionar num de dois modos: active ou standby. Pode definir o modo individualmente para cada VM num cluster através de metadados, por exemplo: mode:active. Também pode configurar o nível de detalhe do registo para cada nó através de uma chave de metadados logging que pode ser definida como basic ou elaborate. A aplicação no nó é configurada com valores dos metadados da instância.

Para criar um nó ativo, node-12, com registo detalhado, executaria o seguinte comando:

gcloud compute instance-groups managed create-instance example-cluster \
  --instance node-12 \
  --stateful-metadata mode=active,logging=elaborate

O comando cria uma VM, node-12, no MIG example-cluster e define dois pares de chave-valor de metadados, mode:active e logging:elaborate, para a nova instância.

Terraform

Para criar uma instância gerida com um nome personalizado e definir metadados com estado nessa VM, use o recurso google_compute_per_instance_config.

O exemplo seguinte usa um MIG zonal. Se ainda não tiver um MIG zonal, crie um MIG zonal com VMs confinadas a uma única zona.

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "node-12"
  preserved_state {
    metadata = {
      mode    = "active"
      logging = "elaborate"
    }
  }
}

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

REST

Para criar uma ou várias instâncias geridas num MIG com nomes de VMs personalizados e para definir metadados com estado individualmente nestas VMs, use o método instanceGroupManagers.createInstances. Para um MIG regional, use o método regionInstanceGroupManagers.createInstances.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances
{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY" : "VALUE",
          ...
        }
      }
    },
    ...
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto do pedido
  • ZONE: a zona onde a GIG está localizada (aplica-se a uma GIG zonal)
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG
  • NAME: o nome do MIG no qual criar uma instância
  • INSTANCE_NAME: o nome da instância a criar
  • KEY e VALUE: pares de chave-valor de metadados com estado para definir individualmente para as instâncias, além dos metadados definidos no modelo de instância
    • Os valores-chave que definir aqui têm prioridade sobre quaisquer valores-chave em conflito do modelo de instância

Exemplo

Tem de implementar um cluster de nós, example-cluster, que pode funcionar num de dois modos: active ou standby. Pode definir o modo individualmente para cada VM num cluster através de metadados, por exemplo: mode:active. Também pode configurar o nível de detalhe do registo para cada nó através de uma chave de metadados logging que pode ser definida como basic ou elaborate. A aplicação no nó é configurada com valores dos metadados da instância.

Para criar um nó ativo, node-12, com registo detalhado, execute o seguinte método:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances

{
  "instance": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode":"active",
          "logging":"elaborate"
        }
      }
    }
  ]
}

O método cria uma VM, node-12, no MIG example-cluster e define dois pares de chave-valor de metadados, mode:active e logging:elaborate, para a nova instância.

Definir, modificar e remover metadados com estado individualmente para instâncias de VM existentes

Defina, modifique ou remova metadados com estado para uma instância existente num MIG definindo-os numa configuração por instância associada e, em seguida, aplicando a configuração atualizando a instância.

gcloud

Para configurar metadados com estado individualmente para uma instância de VM num MIG, defina ou remova metadados com estado na configuração por instância associada. Se aplicar a configuração à instância ao mesmo tempo (--update-instance), pode optar por manter a instância em execução, reiniciá-la ou recriá-la. Se não aplicar a configuração (--no-update-instance), as alterações não entram em vigor até recriar ou atualizar a instância.

Se não existir uma configuração por instância para uma determinada instância, use o gcloud compute instance-groups managed instance-configs create comando com uma das seguintes flags:

gcloud compute instance-groups managed instance-configs create NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Se já existir uma configuração por instância para uma determinada instância, use o comando gcloud compute instance-groups managed instance-configs update com:

  • A flag --stateful-metadata para definir ou modificar metadados, ou
  • O sinalizador --remove-stateful-metadata para remover metadados com estado específicos da instância.
gcloud compute instance-groups managed instance-configs update NAME \
  --instance INSTANCE_NAME \
  [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \
  [--remove-stateful-metadata KEY[,KEY,...]] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Substitua o seguinte:

  • NAME: o nome do grupo de instâncias gerido.
  • INSTANCE_NAME: o nome da instância para a qual configurar metadados com estado.
  • KEY=VALUE: Pares de chave-valor de metadados com estado a definir individualmente para a instância, além dos metadados definidos no modelo de instância. Os valores-chave que definir aqui têm prioridade sobre quaisquer valores-chave em conflito do modelo de instância.
  • KEY: chaves de metadados com estado específicas da instância a remover da configuração por instância.
    • Se um valor para a chave não for definido pelo modelo de instância, o par de chave-valor é removido completamente da instância quando a alteração é aplicada.
    • Se um valor para a chave for definido pelo modelo de instância, o valor do modelo de instância é definido na instância quando a alteração é aplicada.
  • MINIMAL_ACTION: execute, pelo menos, a ação especificada quando aplicar a atualização da configuração por instância à instância. Só é possível definir um MINIMAL_ACTION quando é usada a flag --update-instance. O valor tem de ser um dos seguintes:

    • none: nenhuma ação.
    • refresh: aplique atualizações que sejam possíveis aplicar sem parar a instância.
    • restart: pare a instância e, em seguida, inicie-a novamente.
    • replace: recrie a instância.

    Se for omitido, é usada a ação menos disruptiva exigida pela atualização.

Exemplo

Tem um cluster de nós, example-cluster, que pode funcionar num de dois modos: active ou standby. Define o modo individualmente para cada VM no cluster através de metadados, por exemplo: mode:active. Também pode configurar o nível de detalhe do registo para cada nó através de uma chave de metadados que pode ser definida como basic ou elaborate.logging A aplicação em cada nó consome os valores dos metadados da instância.

O modelo de instância define metadados mode:active e logging:basic a usar como predefinição para todas as instâncias. Definiu logging:elaborate numa configuração por instância para a VM node-12 no cluster. Agora, quer mudar o node-12 para o modo de espera e mudar o registo para basic para esta VM.

Para mudar a instância node-12 para o modo de espera e o respetivo registo para o modo básico, execute o seguinte comando:

gcloud compute instance-groups managed instance-configs update example-cluster \
  --instance node-12 \
  --stateful-metadata mode=standby \
  --remove-stateful-metadata logging

O comando faz o seguinte:

  1. Define os metadados mode:standby na configuração por instância associada à VM node-12 no MIG example-cluster.
  2. Remove os metadados logging:elaborate da configuração por instância para a instância node-12.
  3. Aplica a alteração de configuração por instância à VM node-12:
    • Define os metadados mode:standby de acordo com a configuração.
    • Define os metadados logging:basic a partir do modelo de instância porque o valor da chave logging já não está definido pela configuração por instância.
  4. A alteração é aplicada à VM imediatamente por predefinição porque a flag --no-update-instance é omitida.
  5. A VM continua a ser executada durante a atualização porque a flag --instance-update-minimal-action foi omitida e a ação menos disruptiva é escolhida para a atualização por predefinição, neste caso: refresh.

REST

Para configurar metadados com estado individualmente para instâncias de VM existentes num MIG, defina ou remova os metadados nas configurações por instância associadas. Em seguida, atualize a instância para aplicar a configuração.

Se ainda não existirem configurações por instância para as instâncias fornecidas, use o instanceGroupManagers.updatePerInstanceConfigs method com metadados com estado:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Se já existirem configurações por instância para as instâncias indicadas, use o método instanceGroupManagers.patchPerInstanceConfigs

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG.
  • INSTANCE_NAME: O nome da VM para a qual configurar metadados com estado.
  • KEY e VALUE: pares de chave-valor de metadados com estado para definir individualmente para as instâncias, além de quaisquer metadados definidos no modelo de instância.
    • Os valores de metadados com estado definidos para as chaves que já existem no modelo de instância substituem os valores do modelo de instância.
    • As outras entradas de metadados do modelo de instância permanecem inalteradas e disponíveis.
    • Fornecer null como um valor remove a chave da configuração por instância.
  • FINGERPRINT: (opcional). A impressão digital da configuração fornecida, se já existir. Usado para bloqueio otimista.

Os métodos updatePerInstanceConfigs e patchPerInstanceConfigs atualizam as configurações especificadas por instância, mas não aplicam as atualizações de configuração às instâncias de VM associadas. As alterações são aplicadas a uma VM quando atualiza ou recria a instância. Para aplicar as alterações a uma VM, pode aplicar a atualização manualmente ou usar o atualizador no modo proativo ou oportunista.

Exemplo

Tem um cluster de nós, example-cluster, que pode funcionar num de dois modos: active ou standby. Define o modo individualmente para cada VM no cluster através de metadados, por exemplo: mode:active. Também pode configurar o nível de detalhe do registo para cada nó através de uma chave de metadados que pode ser definida como basic ou elaborate.logging A aplicação em cada nó consome os valores dos metadados da instância.

O modelo de instância define metadados mode:active e logging:basic a usar como predefinição para todas as instâncias. Definiu logging:elaborate numa configuração por instância para a VM node-12 no cluster. Agora, quer mudar node-12 para o modo de espera e mudar o registo para basic para esta instância.

Para mudar a VM node-12 para o modo de espera e o respetivo registo para o modo básico, aplique uma patch à configuração por instância associada através do método patchPerInstanceConfigs:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode": "standby",
          "logging": null
        }
      }
    }
  ]
}

O método faz o seguinte:

  1. Define os metadados mode:standby na configuração por instância associada à VM, node-12, no GIG example-cluster.
  2. Remove os metadados logging:elaborate da configuração por instância, porque o valor fornecido é null.

A atualização da configuração ainda não foi aplicada à instância de VM node-12. A atualização da configuração é aplicada quando recria ou atualiza a instância ou se usar a atualização automática proativa.

Para aplicar a atualização de configuração por instância à instância de VM node-12, chame o método instanceGroupManagers.applyUpdatesToInstances para a instância:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-12"],
  "minimalAction": "NONE"
}

O método aplica a configuração atualizada por instância à VM:node-12

  1. Define os metadados da mode:standby, de acordo com a configuração por instância.
  2. Define os metadados logging:basic a partir do modelo de instância porque o valor da chave logging já não está definido pela configuração por instância.
  3. A VM continua a ser executada durante a atualização porque minimalAction está definido como NONE, o que permite que o MIG use a ação menos disruptiva necessária para a atualização. Uma atualização de metadados de uma instância requer a ação REFRESH, que não interrompe uma instância em execução.

Feedback

Queremos saber mais sobre os seus exemplos de utilização, desafios e feedback acerca dos MIGs com estado. Partilhe o seu feedback com a nossa equipa através do endereço de email mig-discuss@google.com.

O que se segue?