Como definir políticas de colocação de instância

É possível controlar onde as instâncias de máquina virtual (VM, na sigla em inglês) estão localizadas fisicamente em relação a uma zona. As políticas de posicionamento a seguir estão disponíveis:

  • Políticas de posicionamento distribuído. Use políticas de posicionamento distribuído quando quiser que as VMs sejam distribuídas longe umas das outras para reduzir o impacto de falhas do sistema host.
  • Políticas de posicionamento compacto. Use políticas de posicionamento compacto quando quiser que as VMs fiquem próximas umas das outras para diminuir a latência de rede entre as VMs.

Antes de começar

Suporte e restrições

As políticas de posicionamento têm o seguinte suporte e restrições:

  • Políticas de posicionamento distribuído:
  • Políticas de posicionamento compacto:
    • Suporte a até 150 VMs em cada política.
    • Compatível apenas com tipos de máquinas A2, C2, C2D, N2 e N2D.
    • Não é possível fazer migração em tempo real.
    • Aplica a VMs definidas como TERMINATE para eventos de manutenção do host.
    • Não é possível aplicar a VMs existentes.
  • Políticas de posicionamento compactado e distribuído:

Criar uma política de posicionamento

Para controlar onde as VMs estão localizadas em relação umas a outras, use o seguinte processo:

  1. Crie uma política de posicionamento compacto ou distribuído com a configuração de posicionamento necessária para as VMs.
    • As políticas de posicionamento distribuído colocam as instâncias de VM estritamente em infraestruturas de data center básicas para que as VMs não compartilhem o mesmo sistema de host ou de energia. Isso reduz o impacto de falhas de host ou de energia.
    • As políticas de posicionamento compacto colocam as instâncias de VM perto umas das outras para possibilitar baixa latência de rede entre as VMs.
  2. Aplique a política de colocação a uma ou mais instâncias. As VMs que compartilham a mesma política são posicionadas dependendo de como você definiu a política.

Criar uma política de canais de distribuição

Para criar uma política de colocação de extensão em que as instâncias estão localizadas em vários domínios de disponibilidade distintos, especifique o número de domínios de disponibilidade que essa política precisa usar para separar instâncias.

gcloud

Use a CLI gcloud para criar a política.

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

Substitua:

  • POLICY_NAME: o nome da nova política
  • DOMAIN_COUNT: o número de conjuntos distintos de hardware de host e redes físicas que esta política usará para separar VMs.
  • REGION: a região em que você planeja criar instâncias de VM que usam essa política
  • PROJECT_ID: o ID do projeto.

API

Crie uma política de colocação de extensão usando o método resourcePolicies.insert nas APIs e serviços do Console do Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

No corpo da solicitação, forneça detalhes da política de posicionamento:

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

Substitua:

  • PROJECT_ID: o ID do projeto.
  • REGION: a região em que você planeja criar instâncias de VM que usam essa política
  • POLICY_NAME: o nome da nova política
  • DOMAIN_COUNT: o número de conjuntos distintos de hardware de host e redes físicas que esta política usará para separar instâncias

Criar uma política de colocação de compactação

Para criar uma política de colocação de compactação em que as instâncias estejam localizadas mais próximas umas das outras e na mesma infraestrutura de rede, especifique uma política COLLOCATED.

gcloud

Use a CLI gcloud para criar a política.

gcloud compute resource-policies create group-placement POLICY_NAME \
    --collocation COLLOCATED \
    --region REGION \
    --project PROJECT_ID

Substitua:

  • POLICY_NAME: o nome da nova política
  • REGION: a região em que você planeja criar instâncias de VM que usam essa política
  • PROJECT_ID: o ID do projeto.

API

Crie uma política de colocação de compactação usando o método resourcePolicies.insert nas APIs e serviços do Console do Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

No corpo da solicitação, forneça detalhes da política de posicionamento:

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "collocation": "COLLOCATED"
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto.
  • REGION: a região em que você planeja criar instâncias de VM que usam essa política
  • POLICY_NAME: o nome da nova política

Aplicar políticas de posicionamento a instâncias

Use os procedimentos a seguir para aplicar políticas de colocação em instâncias novas e atuais.

Como aplicar uma política de posicionamento a uma nova instância

Depois de criar a política de colocação, aplique-a a uma ou mais instâncias. As VMs que compartilham a mesma política são posicionadas dependendo de comocomo você definiu a política.

gcloud

Para aplicar uma política de colocação a uma VM, inclua a sinalização --resource-policies ao criar VMs individualmente ou em massa.

Para políticas de posicionamento compacto, é necessário incluir as sinalizações --maintenance-policy=TERMINATE e --no-restart-on-failure.

Por exemplo, para criar uma VM que use uma política de colocação de compactação, use o seguinte comando:

gcloud compute instances create VM_NAME \
    --zone ZONE \
    --resource-policies POLICY_NAME \
    --image-family IMAGE_FAMILY \
    --image-project IMAGE_PROJECT \
    --project PROJECT_ID \
    --maintenance-policy=TERMINATE \
    --no-restart-on-failure \
    --async

Substitua:

  • VM_NAME: o nome da nova VM;
  • ZONE: a zona em que você quer criar a nova VM.

    Essa zona precisa estar na mesma região em que a política de colocação está localizada.

  • POLICY_NAME: o nome da política de posicionamento que você quer aplicar a essa VM.

    É possível aplicar mais de uma política de posicionamento a uma VM.

  • IMAGE_FAMILY: uma das famílias de imagens disponíveis.

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem.

  • PROJECT_ID: ID do projeto

API

Para aplicar uma política de colocação a uma VM, inclua a sinalização --resource-policies ao criar VMs individualmente ou em massa.

Por exemplo, para criar uma única VM, use o seguinte comando:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

No corpo da solicitação, forneça a política de recursos. Para políticas de posicionamento compacto, é necessário incluir os argumentos "onHostMaintenance": "TERMINATE" e "automaticRestart": false:

{
  "name": "VM_NAME",
  "machineType": "machineTypes/MACHINE_TYPE"
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT"
    }],
    "network": "global/networks/default"
  }],
  "scheduling": {
    "onHostMaintenance": "TERMINATE",
    "automaticRestart": false
  },
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
       "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
     }
  }],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

Substitua:

  • PROJECT_ID: ID do projeto
  • ZONE: a zona em que você quer criar a nova VM;

    Essa zona precisa estar na mesma região em que a política de colocação está localizada.

  • VM_NAME: o nome da nova VM;

  • MACHINE_TYPE: o tipo de máquina da VM;

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem;

  • IMAGE_FAMILY: uma das famílias de imagens disponíveis;

  • REGION: a região em que você criou a política de posicionamento;

  • POLICY_NAME: o nome da política de posicionamento que você quer aplicar a essa VM.

    É possível aplicar mais de uma política de posicionamento a uma VM.

Como aplicar uma política de posicionamento em uma instância existente

Se você criar uma política de posicionamento distribuído, é possível aplicá-la a uma ou mais VMs existentes sem reiniciar a VM.

gcloud

Aplique uma política de propagação de posição em uma instância atual usando o comando add-resource-policies.

Para políticas de posicionamento compacto, é necessário incluir as sinalizações --maintenance-policy=TERMINATE e --no-restart-on-failure.

gcloud compute instances add-resource-policies VM_NAME \
    --zone ZONE \
    --resource-policies POLICY_NAME \
    --project PROJECT_ID
    [--maintenance-policy=TERMINATE] \
    [--no-restart-on-failure]

Substitua:

  • VM_NAME: O nome da VM.
  • ZONE: a zona da VM;

    Essa zona precisa estar na mesma região em que a política de posicionamento está localizada.

  • POLICY_NAME: o nome da política de posicionamento que você quer aplicar a essa VM.

    É possível aplicar mais de uma política de posicionamento a uma VM.

  • PROJECT_ID: ID do projeto

API

Aplique uma política de propagação de posição em uma instância atual usando o método addResourcePolicies.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addResourcePolicies

No corpo da solicitação, forneça a política de recursos. Para políticas de posicionamento compacto, é necessário incluir os argumentos "onHostMaintenance": "TERMINATE" e "automaticRestart": false.

{
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
   "scheduling": {
    "onHostMaintenance": "TERMINATE",
    "automaticRestart": false
  },
}

Substitua:

  • PROJECT_ID: ID do projeto
  • ZONE: a zona em que você quer criar a nova VM;

    Essa zona precisa estar na mesma região em que a política de colocação está localizada.

  • VM_NAME: o nome da nova VM;

  • REGION: a região em que você planeja criar instâncias de VM que usam essa política

  • POLICY_NAME: o nome da política de posicionamento que você quer aplicar a essa VM.

    É possível aplicar mais de uma política de posicionamento a uma VM.

Visualizar políticas de posicionamento

É possível visualizar as políticas de posicionamento aplicadas a uma VM e os detalhes de uma política de posicionamento específica usando a CLI gcloud e a API Compute Engine.

Visualizar a política de posicionamento de uma VM

gcloud

Para visualizar a política de posicionamento de recursos de uma VM, use o comando gcloud compute instances describe:

gcloud compute instances describe VM_NAME

Substitua VM_NAME pelo nome da VM.

Se uma política de posicionamento estiver disponível, a saída conterá o campo resourcePolicies:

resourcePolicies:
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGIONS/resourcePolicies/POLICY_NAME

API

Para visualizar a política de posicionamento de recursos de uma VM, use o método instances.get:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

Substitua:

  • PROJECT_ID: ID do projeto
  • ZONE: a zona que contém a VM;
  • VM_NAME: o nome da VM.

Se uma política de posicionamento estiver disponível, o campo resourcePolicies retornará as políticas de recursos da VM.

"resourcePolicies": [
"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/VM_NAME"
],

Ver detalhes de uma política de posicionamento

gcloud

Para ver os detalhes de uma política de posicionamento , use o comando gcloud compute resource-policies describe:

gcloud compute resource-policies describe POLICY_NAME

Substitua POLICY_NAME pelo nome da política de posicionamento.

Se a política de posicionamento estiver disponível, a saída conterá os detalhes da política de posicionamento:

...
groupPlacementPolicy:
  availabilityDomainCount: 2
kind: compute#resourcePolicy
name: POLICY_NAME
region: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION
...

API

Para visualizar detalhes de uma política de posicionamento, use o método resourcePolicies.get:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME

Substitua:

  • PROJECT_ID: ID do projeto
  • REGION: a região que contém a VM;
  • POLICY_NAME: o nome da política de posicionamento.

Se a política de posicionamento estiver disponível, o corpo da resposta conterá os detalhes da política:

...
"region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION",
"name": "POLICY_NAME",
"groupPlacementPolicy": {
  "availabilityDomainCount": 2
},
"kind": "compute#resourcePolicy"
...

A seguir