Instale extensões de VMs criando políticas de extensões

Este documento descreve como criar políticas de extensões de VMs, que lhe permitem instalar e gerir automaticamente extensões numa frota de máquinas virtuais (VMs) do Compute Engine. Ao definir uma política, pode garantir que extensões específicas são instaladas e mantidas em todas as VMs que correspondam aos critérios que especificar, como etiquetas de VMs.

Antes de começar

Funções de IAM necessárias

Para receber a autorização de que precisa para criar uma política de extensão, peça ao seu administrador para lhe conceder a função de IAM administrador da política de extensão de VM (roles/compute.vmExtensionPolicyAdmin). Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém a autorização compute.vmExtensionPolicies.create , que é necessária para criar uma política de extensão.

Também pode obter esta autorização com funções personalizadas ou outras funções predefinidas.

Para mais informações sobre as funções e as autorizações de IAM no Compute Engine, consulte o artigo Funções e autorizações do Compute Engine.

Prioridade das políticas e resolução de conflitos

Quando várias políticas se aplicam à mesma MV, o Gestor de extensões de MV usa a prioridade da política para resolver conflitos.

Quando duas políticas entram em conflito para a mesma extensão, a política com a prioridade mais elevada tem precedência. Os valores de prioridade variam entre 0 e 65535, em que um número inferior significa uma prioridade mais elevada. A prioridade predefinida é 1000. Se várias políticas tiverem a mesma prioridade, o VM Extension Manager aplica a política atualizada mais recentemente às VMs. A eliminação de uma política não remove a extensão se uma política de prioridade inferior continuar a aplicar-se à VM.

Crie uma política de extensão de VM global

Pode criar uma política de extensão de VMs global para instalar extensões em VMs em várias zonas no seu projeto de acordo com um plano de implementação. Uma política de extensão de VM global não é aplicada diretamente às VMs. Em alternativa, à medida que a política é implementada, o VM Extension Manager cria políticas em cada zona com base no plano de implementação. Estas políticas gerem, em seguida, a instalação de extensões em VMs nas respetivas zonas.

Pode usar o gcloud ou o método globalVmExtensionPolicies.insert para criar políticas de extensões globais.

Acerca dos planos de implementação

As políticas de extensões de VMs globais usam planos de implementação para gerir a implementação de extensões em diferentes localizações. Pode usar um dos planos de implementação predefinidos ou criar um plano de implementação personalizado.

Planos de implementação predefinidos

  • slow_rollout: implementa a política ao longo de cinco dias. A implementação lenta é o plano de implementação predefinido.
  • fast_rollout: implementa a política imediatamente em todas as zonas.

Planos de implementação personalizados

Pode criar planos de implementação personalizados através do método rolloutPlans.insert. Por exemplo, o seguinte JSON define um plano de implementação denominado test-rollout-plan que segmenta duas zonas:

{
  "name": "test-rollout-plan",
  "waves": [
    {
      "selectors": [
        {
          "locationSelector": {
            "includedLocations": [
              "us-central1-a",
              "us-west1-a"
            ]
          }
        }
      ],
      "validation": {
        "type": "time",
        "timeBasedValidationMetadata": {
          "waitDuration": "0s"
        }
      },
      "orchestrationOptions": {
        "maxConcurrentResourcesPerLocation": "10",
        "maxConcurrentLocations": "10"
      }
    }
  ]
}

Em seguida, pode usar este plano de implementação personalizado quando criar uma política global, conforme mostrado no exemplo 2.

Crie uma política global

Use o comando gcloud beta compute global-vm-extension-policies create para criar uma política de extensão de VM global:

  gcloud beta compute global-vm-extension-policies create POLICY_NAME 
--description="DESCRIPTION"
--extensions=EXTENSION_NAME_1,EXTENSION_NAME_2
--version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2
--config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2
--inclusion-labels=KEY_1=VALUE_1
--priority=PRIORITY
--rollout-predefined-plan=ROLLOUT_PLAN
--rollout-conflict-behavior=ROLLOUT_CONFLICT_BEHAVIOR

Substitua o seguinte:

  • POLICY_NAME: um nome para a política de extensão de VM.
  • DESCRIPTION: uma descrição opcional da política.
  • EXTENSION_NAME_1,EXTENSION_NAME_2: uma lista separada por vírgulas de extensões a adicionar à política. Tem de especificar, pelo menos, uma extensão. Os valores válidos para as extensões são:
    • ops-agent
    • google-cloud-sap-extension
    • google-cloud-workload-extension
  • EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2: uma lista separada por vírgulas de pares chave-valor em que a chave é o nome da extensão e o valor é a versão da extensão. Se não especificar uma versão para uma extensão, o VM Extension Manager usa a versão mais recente disponível e atualiza-a automaticamente quando estiverem disponíveis novas versões.

  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2: uma lista de pares chave-valor separados por vírgulas em que a chave é o nome da extensão e o valor é o caminho para o ficheiro de configuração dessa extensão. Este ficheiro está localizado na VM onde executa o comando gcloud, e não na VM onde instala a extensão.

    Em alternativa, para fornecer a configuração como uma string inline, use a flag --config em vez de --config-from-file, por exemplo, EXTENSION_NAME_1="CONFIG_1". Pode usar --config-from-file ou --config, mas não ambos no mesmo comando.

  • KEY_1=VALUE_1: uma lista separada por vírgulas de pares de chave/valor que definem etiquetas de inclusão para um seletor. As VMs têm de ter todas as etiquetas especificadas num seletor para serem segmentadas. Se especificar --inclusion-labels várias vezes, a política segmenta VMs que correspondem a qualquer um dos seletores fornecidos (OU lógico). Se omitir esta flag, a política segmenta todas as VMs no seu projeto em todas as zonas.

  • PRIORITY: um número inteiro que define a prioridade da política. Os números maiores indicam uma prioridade mais elevada. O valor predefinido é 0. Se várias políticas tiverem a mesma prioridade, a política que foi atualizada mais recentemente é aplicada às MV.

  • ROLLOUT_PLAN: especifique slow_rollout ou fast_rollout. Se precisar de usar um plano de implementação personalizado, use a flag --rollout-custom-plan em vez de --rollout-predefined-plan e especifique o nome do plano, por exemplo:

      --rollout-custom-plan=projects/PROJECT_NUMBER/locations/global/rolloutPlans/ROLLOUT_PLAN_NAME
    

    Substitua o seguinte:

    • PROJECT_NUMBER: o projeto onde o plano de implementação está definido.
    • ROLLOUT_PLAN_NAME: o nome do plano de implementação personalizado que definiu. Se não for especificada nenhuma flag de plano de implementação, é usado slow_rollout.
  • ROLLOUT_CONFLICT_BEHAVIOR: especifica o comportamento quando é detetado um conflito entre uma política zonal e uma política global. Os valores possíveis são os seguintes:

    • "" (string vazia): é usado o valor da política zonal.
    • overwrite: a política global substitui a política zonal.

      Para mais detalhes, consulte a --rollout-conflict-behavior flag.

    Exemplo 1

    O comando seguinte cria uma política denominada global-test-extension-policy que instala a extensão ops-agent para o projeto test-project. A flag --config-from-file especifica o caminho para um ficheiro local que contém uma configuração YAML para o agente de operações e --rollout-predefined-plan especifica o plano slow_rollout.

    gcloud beta compute global-vm-extension-policies create global-test-extension-policy \
        --project=test-project \
        --extensions=ops-agent \
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
        --rollout-predefined-plan=slow_rollout

    Exemplo 2

    O comando seguinte cria uma política denominada global-test-extension-policy-2 que instala a extensão ops-agent para o projeto test-project em VMs com a etiqueta env=prod. A prioridade da política está definida como 500 e a flag --config-from-file especifica o caminho para um ficheiro local que contém uma configuração YAML para o agente de operações. A flag --rollout-custom-plan especifica um plano de implementação personalizado.

     gcloud beta compute global-vm-extension-policies create global-test-extension-policy-2 \
        --project=test-project \
        --extensions=ops-agent \
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
        --priority=500 \
        --inclusion-labels=env=prod \
        --rollout-custom-plan=projects/12345678/locations/global/rolloutPlans/test-rollout-plan

Crie uma política de extensão de VM zonal

Use um dos seguintes métodos para criar uma política de extensão de VM zonal. Esta política zonal define as extensões a instalar e em que VMs numa zona específica.

Consola

  1. Na Google Cloud consola, aceda à página Políticas de extensão de VMs.

    Aceda às políticas de extensão de VMs

  2. Clique em Criar política de extensões.
  3. No campo Nome, introduza um nome para a política.
  4. Opcional: no campo Descrição, introduza uma descrição para a política.
  5. No campo Prioridade, especifique um número de prioridade para resolver conflitos entre políticas. Os números mais baixos indicam uma prioridade mais elevada. O valor predefinido é 1000.
  6. Na lista Zona, selecione a zona onde quer aplicar esta política.
  7. Na secção Extensões, clique em Adicionar extensão e faça o seguinte para cada extensão que quer instalar nas VMs de destino:
    1. Na lista Extensão, selecione uma extensão. Consulte as extensões suportadas.
    2. Na lista Versão, especifique o número da versão da extensão. Deixe em branco para selecionar a versão mais recente.
      • Para o agente de operações, pode especificar a versão 2.58.0 ou posterior.
      • Para a extensão para SAP e a extensão para cargas de trabalho de computação, deixe o campo em branco para selecionar a versão mais recente.
    3. Opcional: no campo Conteúdo do ficheiro de configuração, introduza os parâmetros de configuração da extensão.
  8. Na secção Instâncias de VM de destino, selecione as VMs para a política. Para selecionar VMs com etiquetas específicas, clique em Adicionar etiquetas e adicione o par de chave-valor.
  9. Clique em Criar.

gcloud

Para criar uma política de extensão de VMs zonais e implementar a política em VMs numa zona específica, use o comando gcloud beta compute zone-vm-extension-policies create:

gcloud beta compute zone-vm-extension-policies create POLICY_NAME \
    --zone=ZONE \
    --description="DESCRIPTION" \
    --extensions=EXTENSION_NAME_1,EXTENSION_NAME_2 \
    --version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2 \
    --config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2 \
    --inclusion-labels=KEY_1=VALUE_1 \
    --priority=PRIORITY

Substitua o seguinte:

  • POLICY_NAME: um nome para a política de extensão de VM.
  • ZONE: a zona onde esta política se aplica.
  • DESCRIPTION: uma descrição opcional da política.
  • EXTENSION_NAME_1,EXTENSION_NAME_2: uma lista separada por vírgulas de extensões a adicionar à política. Tem de especificar, pelo menos, uma extensão. Os valores válidos para as extensões são:
    • ops-agent
    • google-cloud-sap-extension
    • google-cloud-workload-extension
  • EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2: uma lista separada por vírgulas de pares de chave-valor em que a chave é o nome da extensão e o valor é a versão da extensão. Se não especificar uma versão para uma extensão, o VM Extension Manager usa a versão mais recente disponível e atualiza-a automaticamente quando estiverem disponíveis novas versões.

  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2: uma lista de pares chave-valor separados por vírgulas em que a chave é o nome da extensão e o valor é o caminho para o ficheiro de configuração dessa extensão. Este caminho está na VM onde executa o comando gcloud e não na VM onde instala a extensão.

    Em alternativa, para fornecer a configuração como uma string inline, use a flag --config em vez de --config-from-file, por exemplo, EXTENSION_NAME_1="CONFIG_1". Pode usar --config-from-file ou --config, mas não ambos no mesmo comando.

  • KEY_1=VALUE_1: uma lista separada por vírgulas de pares de chave-valor que definem etiquetas de inclusão para um seletor. As VMs têm de ter todas as etiquetas especificadas num seletor para serem segmentadas. Se especificar --inclusion-labels várias vezes, a política segmenta VMs que correspondem a qualquer um dos seletores fornecidos (OU lógico). Se omitir esta flag, a política segmenta todas as VMs na zona especificada.

  • PRIORITY: um número inteiro de 0 a 65535 que define a prioridade da política. Os números mais baixos indicam uma prioridade mais elevada. O valor predefinido é 1000.

    O comando falha se já existir uma política com o nome especificado na zona.

Exemplo 1

O seguinte comando cria uma política denominada test-extension-policy que instala a extensão ops-agent na zona us-central1-f para o projeto test-project. A flag --config-from-file especifica o caminho para um ficheiro local que contém uma configuração YAML para o agente de operações.

gcloud beta compute zone-vm-extension-policies create test-extension-policy  \
    --project=test-project \
    --zone=us-central1-f \
    --extensions=ops-agent \
    --config-from-file=ops-agent="/usr/ops-agent-config.yaml"

Exemplo 2

O comando seguinte cria uma política denominada test-extension-policy-2 que instala a extensão ops-agent na zona us-central1-f para o projeto test-project em VMs com a etiqueta env=prod. A prioridade da política está definida como 500 e a flag --config-from-file especifica o caminho para um ficheiro local que contém uma configuração YAML para o agente de operações.

 gcloud beta compute zone-vm-extension-policies create test-extension-policy-2  \
    --project=test-project \
    --zone=us-central1-f \
    --extensions=ops-agent \
    --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
    --priority=500 \
    --inclusion-labels=env=prod

O que se segue?