Configurando metadados com estado em MIGs


Os metadados da instância são úteis para definir propriedades e se comunicar com seus aplicativos por meio do servidor de metadados. Por exemplo, você pode usar metadados para configurar a identidade da instância da máquina virtual (VM), variáveis ​​de ambiente, informações sobre a arquitetura do cluster ou intervalo de dados pelo qual uma VM é responsável.

Ao configurar metadados com estado em um grupo de instâncias gerenciadas (MIG) , você garante que os metadados específicos da instância sejam preservados em eventos de recuperação automática, atualização e recriação de instâncias gerenciadas .

Configure metadados com estado individualmente para instâncias de VM em um MIG definindo-os em configurações por instância e aplicando a configuração. Você pode definir uma configuração por instância na criação da instância ou em instâncias gerenciadas existentes. Depois que a configuração por instância é aplicada, o MIG armazena metadados com estado no campo estado preservado da configuração ( preservedStateFromConfig ) de uma instância gerenciada.

Antes de começar

Limitações

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

Um MIG com configuração com estadoum MIG com estado — tem as seguintes limitações:

  • Você não poderá usar o escalonamento automático se o seu MIG tiver configuração com estado.
  • Se quiser usar atualizações contínuas automatizadas, você deverá definir o método de substituição como RECREATE .
  • Para MIGs regionais com estado, você deve desabilitar a redistribuição proativa (definir o tipo de redistribuição como NONE ) para evitar a exclusão de instâncias com estado por meio da redistribuição automática entre zonas.
  • Se você usar uma configuração de todas as instâncias para substituir as propriedades do modelo de instância, não poderá 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 você exclui permanentemente uma instância (manualmente ou redimensionando), o MIG não preserva os metadados com estado da instância.

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

Defina metadados com estado ao criar instâncias manualmente em um MIG. Isso é útil para migrar um aplicativo com estado em VMs autônomas para um MIG com estado e ao criar instâncias com estado.

Ao criar manualmente uma instância em um MIG e fornecer metadados com estado, o MIG executa as seguintes tarefas:

  1. Cria uma instância gerenciada a partir do modelo de instância usando o nome de 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 gerenciada associada.

gcloud

Para criar uma instância gerenciada com um nome personalizado e definir metadados com estado nessa VM, use o comando gcloud compute instance-groups managed create-instance com a sinalização --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 ser criada
  • KEY e VALUE : pares de valores-chave de metadados com estado para definir individualmente para as instâncias, além dos metadados definidos no modelo de instância
    • Os valores-chave definidos aqui têm prioridade sobre quaisquer valores-chave conflitantes do modelo de instância

Exemplo

Você precisa implementar um cluster de nós, example-cluster , que possa operar em um dos dois modos: active ou standby . Você define o modo individualmente para cada VM em um cluster usando metadados, por exemplo: mode:active . Você também configura o nível de elaboração do registro em log para cada nó, usando uma chave de metadados de registro logging que pode ser definida como basic ou elaborate . O aplicativo no nó é configurado usando valores de metadados da instância.

Para criar um nó ativo, node-12 , com registro elaborado, você 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 valores-chave de metadados, mode:active e logging:elaborate , para a nova instância.

Terraforma

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

O exemplo a seguir usa um MIG zonal. Se você 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 Comandos básicos do Terraform .

DESCANSAR

Para criar uma ou várias instâncias gerenciadas em um MIG com nomes de VM personalizados e definir metadados com estado individualmente nessas 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 para a solicitação
  • ZONE : a zona onde o MIG está localizado (aplica-se a um MIG 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 ser criada
  • KEY e VALUE : pares de valores-chave de metadados com estado para definir individualmente para as instâncias, além dos metadados definidos no modelo de instância
    • Os valores-chave definidos aqui têm prioridade sobre quaisquer valores-chave conflitantes do modelo de instância

Exemplo

Você precisa implementar um cluster de nós, example-cluster , que possa operar em um dos dois modos: active ou standby . Você define o modo individualmente para cada VM em um cluster usando metadados, por exemplo: mode:active . Você também configura o nível de elaboração do registro em log para cada nó, usando uma chave de metadados de registro logging que pode ser definida como basic ou elaborate . O aplicativo no nó é configurado usando valores de metadados da instância.

Para criar um nó ativo, node-12 , com registro elaborado, 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 valores-chave 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 em um MIG definindo-os em uma 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 em um MIG, defina ou remova metadados com estado na configuração por instância associada. Se você aplicar a configuração à instância ao mesmo tempo ( --update-instance ), poderá escolher se deseja manter a instância em execução, reiniciá-la ou recriá-la. Se você não aplicar a configuração ( --no-update-instance ), suas alterações não entrarão em vigor até que você recrie ou atualize a instância.

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

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:

  • O sinalizador --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 gerenciadas.
  • INSTANCE_NAME : o nome da instância para a qual configurar metadados com estado.
  • KEY = VALUE : pares de valores-chave de metadados com estado a serem definidos individualmente para a instância, além dos metadados definidos no modelo de instância. Os valores-chave definidos aqui têm prioridade sobre quaisquer valores-chave conflitantes do modelo de instância.
  • KEY : chaves de metadados com estado específicas da instância a serem removidas da configuração por instância.
    • Se um valor para a chave não for definido pelo modelo de instância, o par chave-valor será completamente removido da instância quando a alteração for aplicada.
    • Se um valor para a chave for definido pelo modelo de instância, o valor do modelo de instância será definido na instância quando a alteração for aplicada.
  • MINIMAL_ACTION : execute pelo menos a ação especificada ao aplicar a atualização de configuração por instância à instância. Um MINIMAL_ACTION só pode ser definido quando o sinalizador --update-instance é usado. O valor deve ser um dos seguintes:

    • none : Nenhuma ação.
    • refresh : aplica atualizações que podem ser aplicadas sem interromper a instância.
    • restart : interrompa a instância e reinicie-a.
    • replace : Recrie a instância.

    Se omitido, será usada a ação menos perturbadora exigida pela atualização.

Exemplo

Você tem um cluster de nós, example-cluster , que pode operar em um dos dois modos: active ou standby . Você define o modo individualmente para cada VM no cluster usando metadados, por exemplo: mode:active . Você também configura o nível de elaboração do registro em log para cada nó, usando uma chave de metadados de registro logging que pode ser definida como basic ou elaborate . O aplicativo em cada nó consome os valores dos metadados da instância.

O modelo de instância define os metadados mode:active e logging:basic a serem usados ​​como padrão para todas as instâncias. Você definiu logging:elaborate em uma configuração por instância para a VM node-12 no cluster. Agora, você deseja mudar node-12 para o modo de espera e mudar o log para basic para esta VM.

Para mudar a instância node-12 para standby e seu registro para 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 metadados mode:standby na configuração por instância que está 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 do node-12 :
    • Define metadados mode:standby , de acordo com a configuração.
    • Define os metadados logging:basic do modelo de instância porque o valor da chave logging não é mais definido pela configuração por instância.
  4. A alteração é aplicada à VM imediatamente por padrão porque o sinalizador --no-update-instance é omitido.
  5. A VM continua em execução durante a atualização porque o sinalizador --instance-update-minimal-action é omitido e a ação menos perturbadora é escolhida para a atualização por padrão, neste caso: refresh .

DESCANSAR

Para configurar metadados com estado individualmente para instâncias de VM existentes em um MIG, defina ou remova os metadados nas configurações associadas por instância. 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 método instanceGroupManagers.updatePerInstanceConfigs 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 fornecidas, 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 da solicitação.
  • ZONE : A zona onde o MIG está localizado (aplica-se a um MIG 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 valores-chave 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.
    • Outras entradas de metadados do modelo de instância permanecem inalteradas e disponíveis.
    • Fornecer null como 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 você atualiza ou recria a instância. Para aplicar as alterações a uma VM, você pode aplicar a atualização manualmente ou usar o Atualizador no modo proativo ou oportunista.

Exemplo

Você tem um cluster de nós, example-cluster , que pode operar em um dos dois modos: active ou standby . Você define o modo individualmente para cada VM no cluster usando metadados, por exemplo: mode:active . Você também configura o nível de elaboração do registro em log para cada nó, usando uma chave de metadados de registro logging que pode ser definida como basic ou elaborate . O aplicativo em cada nó consome os valores dos metadados da instância.

O modelo de instância define os metadados mode:active e logging:basic a serem usados ​​como padrão para todas as instâncias. Você definiu logging:elaborate em uma configuração por instância para a VM node-12 no cluster. Agora, você deseja mudar node-12 para o modo de espera e mudar o log para basic para esta instância.

Para mudar a VM node-12 para espera e seu log para básico, corrija a configuração por instância associada usando o 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 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 porque o valor fornecido é null .

A atualização de configuração ainda não foi aplicada à instância de VM node-12 . A atualização de configuração será aplicada na próxima recriação ou atualização da instância ou se você 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 do node-12 :

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

Opinião

Queremos saber mais sobre seus casos de uso, desafios e feedback sobre MIGs com estado. Compartilhe seus comentários com nossa equipe em mig-discuss@google.com .

O que vem a seguir