Crie e aplique políticas de posicionamento distribuído a VMs

Este documento descreve como melhorar a fiabilidade das instâncias de máquinas virtuais (VM) através da criação e aplicação de políticas de posicionamento disperso. Para saber mais sobre as políticas de posicionamento, incluindo as respetivas restrições e preços, consulte a vista geral das políticas de posicionamento.

Uma política de posicionamento disperso especifica que as suas VMs devem ser distribuídas por diferentes domínios de disponibilidade. Esta distribuição ajuda a mitigar as interrupções específicas da localização, como erros de hardware, e é útil quando executa cargas de trabalho distribuídas e replicadas em grande escala, como o Hadoop Distributed File System (HDFS), o Cassandra ou o Kafka.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Trusted Cloud by S3NS 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 e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init
    2. Set a default region and zone.

    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 e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

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

Funções necessárias

Para receber as autorizações de que precisa para criar e aplicar uma política de posicionamento disperso a VMs, peça ao seu administrador que lhe conceda a função de IAM Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) no seu projeto. 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 as autorizações necessárias para criar e aplicar uma política de posicionamento disperso a VMs. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para criar e aplicar uma política de posicionamento disperso a VMs:

  • Para criar políticas de posicionamento: compute.resourcePolicies.create no projeto
  • Para aplicar uma política de posicionamento a VMs existentes: compute.instances.addResourcePolicies no projeto
  • Para criar VMs:
    • compute.instances.create no projeto
    • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
    • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
    • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
    • Para atribuir uma rede antiga à VM: compute.networks.use no projeto
    • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
    • Para atribuir um endereço IP externo à VM quando usar uma rede antiga: compute.networks.useExternalIp no projeto
    • Para especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
    • Para atribuir um endereço IP externo à VM quando usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Para definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
    • Para definir etiquetas para a VM: compute.instances.setTags na VM
    • Para definir etiquetas para a VM: compute.instances.setLabels na VM
    • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
    • Para criar um novo disco para a VM: compute.disks.create no projeto
    • Para anexar um disco existente no modo de leitura ou leitura/escrita: compute.disks.use no disco
    • Para anexar um disco existente no modo de leitura: compute.disks.useReadOnly no disco
  • Para criar um modelo de instância: compute.instanceTemplates.create no projeto
  • Para criar um grupo de instâncias geridas (MIG): compute.instanceGroupManagers.create no projeto

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Crie uma política de posicionamento de propagação

A menos que queira testar a aplicação da política de posicionamento disperso às suas VMs,a Google Trusted Cloud by S3NS recomenda a criação de políticas de posicionamento disperso com dois ou mais domínios de disponibilidade. Isto mitiga o risco de todas as VMs serem afetadas por um único erro de hardware. Para mais informações, consulte o artigo Acerca das políticas de posicionamento de dispersão.

Para criar uma política de posicionamento de propagação, selecione uma das seguintes opções:

gcloud

Para criar uma política de posicionamento disperso, use o comando gcloud compute resource-policies create group-placement com a flag --availability-domain-count.

gcloud compute resource-policies create group-placement POLICY_NAME \
    --availability-domain-count=DOMAIN_COUNT \
    --region=REGION

Substitua o seguinte:

  • POLICY_NAME: o nome da política de posicionamento de propagação.

  • DOMAIN_COUNT: o número distinto de domínios de disponibilidade para colocar as suas VMs. O valor tem de estar entre 1 e 8.

  • REGION: a região na qual criar a política de posicionamento.

REST

Para criar uma política de posicionamento de propagação, faça um pedido POST ao método resourcePolicies.insert. No corpo do pedido, inclua o campo availabilityDomainCount.

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "availabilityDomainCount": DOMAIN_COUNT
  }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto no qual criar a política de posicionamento.

  • REGION: a região na qual criar a política de posicionamento.

  • POLICY_NAME: o nome da política de posicionamento de propagação.

  • DOMAIN_COUNT: o número distinto de domínios de disponibilidade para colocar as suas VMs. O valor tem de estar entre 1 e 8.

Aplique uma política de posicionamento de dispersão

Pode aplicar uma política de posicionamento disperso a uma VM ou a um MIG existente ou quando criar VMs, modelos de instâncias ou MIGs.

Para aplicar uma política de posicionamento disperso a um recurso do Compute Engine, selecione um dos seguintes métodos:

Depois de aplicar uma política de posicionamento disperso a uma VM, pode verificar o domínio de disponibilidade no qual a VM está localizada vendo os detalhes da VM e verificando o valor do campo availabilityDomain.

Aplique a política a uma VM existente

Antes de aplicar uma política de posicionamento disperso a uma MV existente, considere o seguinte:

  • Se a sua política de posicionamento disperso especificar vários domínios de disponibilidade, pode aplicar a política a uma VM sem parar a VM. No entanto, a VM pode ter de ser realocada para um domínio de disponibilidade diferente. Durante este processo, o Compute Engine para ou migra em direto a VM com base na respetiva política de manutenção do anfitrião.

  • A VM e a política de posicionamento de propagação têm de estar localizadas na mesma região. Por exemplo, se a política de posicionamento estiver localizada na região us-central1, a VM tem de estar localizada numa zona em us-central1. Se precisar de migrar uma VM para outra região, consulte o artigo Mova uma VM entre zonas ou regiões.

Se quiser especificar o domínio de disponibilidade no qual colocar a VM, aplique a política de posicionamento à VM atualizando as respetivas propriedades. Quando atualizar as propriedades da VM, certifique-se de que inclui os campos resourcePolicies e scheduling.availabilityDomain.

Para aplicar uma política de posicionamento disperso a uma VM existente, selecione uma das seguintes opções:

gcloud

Para aplicar uma política de posicionamento disperso a uma VM existente, use o comando gcloud compute instances add-resource-policies.

gcloud compute instances add-resource-policies VM_NAME \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

Substitua o seguinte:

  • VM_NAME: o nome de uma VM existente.

  • POLICY_NAME: o nome de uma política de posicionamento de propagação existente.

  • ZONE: a zona onde a VM está localizada.

REST

Para aplicar uma política de posicionamento disperso a uma VM existente, faça um pedido POST ao método instances.addResourcePolicies.

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addResourcePolicies

{
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde se encontram a política de posicionamento de propagação e a VM.

  • ZONE: a zona onde a VM está localizada.

  • VM_NAME: o nome de uma VM existente.

  • REGION: a região onde se encontra a política de posicionamento de spreads.

  • POLICY_NAME: o nome de uma política de posicionamento de propagação existente.

Aplique a política ao criar uma VM

Só pode criar uma VM que especifique uma política de posicionamento disperso na mesma região que a política de posicionamento.

Para criar uma VM que especifique uma política de posicionamento disperso, selecione uma das seguintes opções:

gcloud

Para criar uma VM que especifique uma política de posicionamento disperso, use o comando gcloud compute instances create com a flag --resource-policies.

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

Substitua o seguinte:

  • VM_NAME: o nome da VM a criar.

  • MACHINE_TYPE: o tipo de máquina para a VM.

  • POLICY_NAME: o nome de uma política de posicionamento de propagação existente.

  • ZONE: a zona na qual criar a VM.

Opcionalmente, para especificar o domínio de disponibilidade no qual criar a VM, inclua o sinalizador --availability-domain.

gcloud compute instances create VM_NAME \
    --availability-domain=DOMAIN_NUMBER \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

Substitua DOMAIN_NUMBER pelo número do domínio de disponibilidade no qual quer colocar a sua VM. O valor tem de estar entre 1 e o número de domínios especificados na política de posicionamento de propagação. Para validar o número de domínios numa política de posicionamento disperso, veja os detalhes da política de posicionamento.

REST

Para criar uma VM que especifique uma política de posicionamento disperso, faça um POST pedido ao método instances.insert. No corpo do pedido, inclua o campo resourcePolicies.

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde se encontra a política de posicionamento de propagação.

  • ZONE: a zona onde criar a VM e onde se encontra o tipo de máquina. Só pode especificar uma zona na região da política de posicionamento de propagação.

  • VM_NAME: o nome da VM a criar.

  • MACHINE_TYPE: o tipo de máquina para a VM.

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud. Para mais informações sobre os projetos de imagens suportados, consulte o artigo Imagens públicas.

  • IMAGE: especifique uma das seguintes opções:

    • Uma versão específica da imagem do SO, por exemplo, debian-12-bookworm-v20240617.

    • Uma família de imagens, que tem de estar formatada como family/IMAGE_FAMILY. Isto especifica a imagem do SO não descontinuada mais recente. Por exemplo, se especificar family/debian-12, é usada a versão mais recente na família de imagens do Debian 12. Para mais informações sobre a utilização de famílias de imagens, consulte o artigo Práticas recomendadas para famílias de imagens.

  • REGION: a região onde se encontra a política de posicionamento de spreads.

  • POLICY_NAME: o nome de uma política de posicionamento de propagação existente.

Opcionalmente, para especificar o domínio de disponibilidade no qual criar a VM, inclua o campo availabilityDomain no corpo do pedido.

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ],
  "scheduling": {
    "availabilityDomain": DOMAIN_NUMBER
  }
}

Substitua DOMAIN_NUMBER pelo número do domínio de disponibilidade no qual quer colocar a sua VM. O valor tem de estar entre 1 e o número de domínios especificados na política de posicionamento de propagação. Para validar o número de domínios numa política de posicionamento disperso, veja os detalhes da política de posicionamento.

Para mais informações sobre as opções de configuração para criar uma VM, consulte o artigo Crie e inicie uma instância de VM.

Aplique a política durante a criação de um modelo de instância

Antes de criar um modelo de instância que especifique uma política de posicionamento disperso, certifique-se do seguinte:

  • Se quiser criar um modelo de instância regional, crie o modelo na mesma região que a política de posicionamento disperso. Caso contrário, a criação do modelo de instância falha.

  • Quando cria um modelo de instância, pode especificar opcionalmente o domínio de disponibilidade no qual criar VMs. Evite criar todas as VMs num único domínio. Caso contrário, não mitiga o risco de um único erro de hardware afetar todas as suas VMs.

Depois de criar um modelo de instância que especifique uma política de posicionamento disperso, pode usar o modelo para fazer o seguinte:

Para criar um modelo de instância que especifique uma política de posicionamento disperso, selecione uma das seguintes opções:

gcloud

Para criar um modelo de instância que especifique uma política de posicionamento disperso, use o comando gcloud compute instance-templates create com a flag --resource-policies.

Por exemplo, para criar um modelo de instância global que especifique uma política de posicionamento de propagação, execute o seguinte comando:

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME

Substitua o seguinte:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.

  • MACHINE_TYPE: o tipo de máquina para as VMs criadas com o modelo de instância.

  • POLICY_NAME: o nome de uma política de posicionamento de propagação existente.

Opcionalmente, para especificar o domínio de disponibilidade no qual criar as VMs, inclua o sinalizador --availability-domain.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --availability-domain=DOMAIN_NUMBER  \
    --machine-type=MACHINE_TYPE \
    --resource-policies=POLICY_NAME

Substitua DOMAIN_NUMBER pelo número do domínio de disponibilidade no qual quer criar as suas VMs. O valor tem de estar compreendido entre 1 e o número de domínios especificados na política de posicionamento. Para validar o número de domínios numa política de posicionamento disperso, veja os detalhes da política de posicionamento.

REST

Para criar um modelo de instância que especifique uma política de posicionamento de propagação, faça um pedido POST a um dos seguintes métodos:

No corpo do pedido, especifique o campo resourcePolicies.

Por exemplo, para criar um modelo de instância global que especifique uma política de posicionamento de dispersão, faça um pedido POST da seguinte forma:

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ]
  }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde se encontra a política de posicionamento de propagação.

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud. Para mais informações sobre os projetos de imagens suportados, consulte o artigo Imagens públicas.

  • IMAGE: especifique uma das seguintes opções:

    • Uma versão específica da imagem do SO, por exemplo, debian-12-bookworm-v20240617.

    • Uma família de imagens, que tem de estar formatada como family/IMAGE_FAMILY. Isto especifica a imagem do SO não descontinuada mais recente. Por exemplo, se especificar family/debian-12, é usada a versão mais recente na família de imagens do Debian 12. Para mais informações sobre a utilização de famílias de imagens, consulte o artigo Práticas recomendadas para famílias de imagens.

  • MACHINE_TYPE: o tipo de máquina para as VMs criadas com o modelo de instância.

  • POLICY_NAME: o nome de uma política de posicionamento de propagação existente.

Opcionalmente, para especificar o domínio de disponibilidade no qual criar as VMs, inclua o campo availabilityDomain no corpo do pedido.

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ],
    "scheduling": {
      "availabilityDomain": DOMAIN_NUMBER
    }
  }
}

Substitua DOMAIN_NUMBER pelo número do domínio de disponibilidade no qual quer criar as suas VMs. O valor tem de estar compreendido entre 1 e o número de domínios especificados na política de posicionamento. Para validar o número de domínios numa política de posicionamento disperso, veja os detalhes da política de posicionamento.

Para mais informações sobre as opções de configuração para criar um modelo de instância, consulte o artigo Crie modelos de instâncias.

Aplique a política a VMs num MIG

Depois de criar um modelo de instância que especifique uma política de posicionamento disperso, pode usar o modelo para fazer o seguinte:

Aplique a política durante a criação de um MIG

Só pode criar VMs que especifiquem uma política de posicionamento disperso se as VMs estiverem localizadas na mesma região que a política de posicionamento.

Para criar um MIG com um modelo de instância que especifique uma política de posicionamento disperso, selecione uma das seguintes opções:

gcloud

Para criar um MIG com um modelo de instância que especifique uma política de posicionamento disperso, use o comando gcloud compute instance-groups managed create.

Por exemplo, para criar um MIG zonal com um modelo de instância global que especifica uma política de posicionamento disperso, execute o seguinte comando:

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

Substitua o seguinte:

  • INSTANCE_GROUP_NAME: o nome do MIG a criar.

  • SIZE: o tamanho do MIG.

  • INSTANCE_TEMPLATE_NAME: o nome de um modelo de instância global existente que especifica uma política de posicionamento de dispersão.

  • ZONE: a zona na qual criar o MIG, que tem de estar na região onde se encontra a política de posicionamento disperso.

REST

Para criar um MIG com um modelo de instância que especifique uma política de posicionamento distribuído, faça um pedido POST a um dos seguintes métodos:

Por exemplo, para criar um MIG zonal com um modelo de instância global que especifica uma política de posicionamento disperso, faça um pedido POST da seguinte forma:

POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers

{
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": SIZE,
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
    }
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde se encontra a política de posicionamento de propagação e o modelo de instância que especifica a política de posicionamento.

  • ZONE: a zona na qual criar o MIG, que tem de estar na região onde se encontra a política de posicionamento disperso.

  • INSTANCE_GROUP_NAME: o nome do MIG a criar.

  • SIZE: o tamanho do MIG.

  • INSTANCE_TEMPLATE_NAME: o nome de um modelo de instância global existente que especifica uma política de posicionamento de dispersão.

Para mais informações sobre as opções de configuração para criar MIGs, consulte o artigo Cenários básicos para criar MIGs.

Aplique a política a um MIG existente

Só pode aplicar uma política de posicionamento disperso a um GIG existente se o GIG estiver localizado na mesma região que a política de posicionamento ou, no caso de GIGs zonais, numa zona dentro da mesma região que a política de posicionamento.

Para atualizar um MIG de modo a usar um modelo de instância que especifique uma política de posicionamento disperso, selecione uma das seguintes opções:

gcloud

Para atualizar um MIG de modo a usar um modelo de instância que especifica uma política de posicionamento de dispersão, use o comando gcloud compute instance-groups managed rolling-action start-update.

Por exemplo, para atualizar um MIG zonal de modo a usar um modelo de instância que especifica uma política de posicionamento disperso e substituir as VMs existentes do MIG por novas VMs que especificam as propriedades do modelo, execute o seguinte comando:

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

Substitua o seguinte:

  • INSTANCE_GROUP_NAME: o nome de um MIG existente.

  • INSTANCE_TEMPLATE_NAME: o nome de um modelo de instância global existente que especifica uma política de posicionamento de dispersão.

  • ZONE: a zona onde o MIG está localizado. Só pode aplicar a política de posicionamento disperso a um MIG localizado na mesma região que a política de posicionamento.

REST

Para atualizar um GIG de modo a usar um modelo de instância que especifique uma política de posicionamento de dispersão e aplicar automaticamente as propriedades do modelo e da política de posicionamento às VMs existentes no GIG, faça um pedido PATCH a um dos seguintes métodos:

Por exemplo, para atualizar um MIG zonal de modo a usar um modelo de instância global que especifica uma política de posicionamento disperso e substituir as VMs existentes do MIG por novas VMs que especificam as propriedades do modelo, faça o seguinte pedido PATCH:

PATCH https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME

{
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto que usou para criar um MIG existente, a política de posicionamento disperso e o modelo de instância que especifica a política de posicionamento disperso.

  • ZONE: a zona onde o MIG está localizado. Só pode aplicar a política de posicionamento disperso a um MIG localizado na mesma região que a política de posicionamento.

  • INSTANCE_GROUP_NAME: o nome de um MIG existente.

  • INSTANCE_TEMPLATE_NAME: o nome de um modelo de instância global existente que especifica uma política de posicionamento de dispersão.

Para mais informações sobre as opções de configuração para atualizar as VMs num MIG, consulte Atualize e aplique novas configurações a VMs num MIG.

O que se segue?