Usar políticas de posição de instância de VM


Cada instância de máquina virtual (VM) é executada em um servidor físico, ou host, em um rack colocado em um cluster em um data center. É possível usar as seguintes políticas de posicionamento para controlar a localização física das suas VMs em relação a cada uma das outras em uma zona:

  • Políticas de posicionamento distribuído. Use políticas de propagação quando quiser que as VMs sejam distribuídas entre si. Isso pode ajudar a reduzir o impacto das falhas do sistema host ou otimizar a migração em tempo real das VMs.
  • 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

Restrições

As políticas de colocação têm as seguintes restrições:

  • Políticas de posicionamento distribuído:
    • Suporte para até oito VMs por política.
    • Suporte apenas aos tipos de máquina C2, G2, N1, N2 e N2D.
    • Não pode ser usado com a API de topologia de posicionamento da VM.
    • Não podem ser usadas com reservas de VMs.
  • Políticas de posicionamento compacto:

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 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 compactas aproximam as VMs para diminuir a latência de rede entre elas.
  2. Aplique a política de colocação a uma ou mais VMs. As VMs que compartilham a mesma política são posicionadas dependendo de comocomo você definiu a política. É possível aplicar a política a VMs novas e atuais ou especificar a política em um modelo de instância, que pode ser usado para criar em VMs independentes, grupos gerenciados de instâncias (MIGs, na sigla em inglês) e reservas de VM.

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

Para criar uma política de colocação de extensão em que as VMs 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 VMs.

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 VMs que usam essa política
  • PROJECT_ID: 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 Google 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: ID do projeto
  • REGION: a região em que você planeja criar VMs 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 VMs.

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

Para criar uma política de colocação de compactação em que as VMs 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 VMs que usam essa política
  • PROJECT_ID: 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 Google 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: ID do projeto
  • REGION: a região em que você planeja criar VMs que usam essa política
  • POLICY_NAME: o nome da nova política

Aplicar políticas de colocação a VMs

Depois de criar uma política de colocação, você pode aplicá-la a VMs novas ou existentes. O suporte às políticas de canal depende do seu cenário.

Cenário Suporte para posicionamento compacto Suporte para posicionamento de extensão
Como aplicar uma política de posicionamento a uma nova VM
Como aplicar uma política de posicionamento em uma VM existente
Especificar uma política de colocação em um modelo de instância que pode ser usada para criar VMs
Especificar uma política de colocação em um modelo de instância que pode ser usada para criar ou atualizar um MIG
Especificar uma política de colocação em um modelo de instância que pode ser usada para criar reservas de VM

Como aplicar uma política de posicionamento a uma nova VM

Depois de criar uma política de colocação, aplique-a a uma ou mais VMs. 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: o 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: o 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 colocação

  • 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.

Aplicar uma política de colocação de extensão a uma VM existente

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

gcloud

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

gcloud compute instances add-resource-policies VM_NAME \
    --zone=ZONE \
    --resource-policies=SPREAD_PLACEMENT_POLICY_NAME \
    --project=PROJECT_ID

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.

  • SPREAD_PLACEMENT_POLICY_NAME: o nome de uma política de posicionamento de propagação que você quer aplicar a essa VM.

  • PROJECT_ID: o 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, informe a política de posicionamento de propagação.

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

Substitua:

  • PROJECT_ID: o 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

  • SPREAD_PLACEMENT_POLICY_NAME: o nome de uma política de posicionamento de propagação que você quer aplicar a essa VM.

Criar um modelo de instância que especifica uma política de colocação

É possível especificar uma política de posicionamento ao criar um modelo de instância. Especificamente:

  • Se você especificar uma política de posicionamento compacta em um modelo de instância, poderá usar o modelo para criar MIGs, VMs e reservas de VM.

  • Se você especificar uma política de colocação de extensão em um modelo de instância, só poderá usar o modelo para criar MIGs e VMs.

gcloud

Para criar um modelo de instância que especifique uma política de recursos, use o comando gcloud compute instance-templates create com a sinalização --resource-policies. Para especificar uma política de posicionamento compacta, também é preciso especificar as sinalizações --maintenance-policy=TERMINATE e --no-restart-on-failure.

Por exemplo, para criar um modelo de instância que tenha propriedades de VM padrão e inclua uma política de posicionamento compacta, use o seguinte comando:

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --resource-policies=COMPACT_PLACEMENT_POLICY_NAME \
    --maintenance-policy=TERMINATE \
    --no-restart-on-failure

Substitua:

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

  • COMPACT_PLACEMENT_POLICY_NAME: o nome de uma política de posicionamento compacta.

API

Para criar um modelo de instância que especifique uma política de recursos, faça uma solicitação POST para o método instanceTemplates.insert. No corpo da solicitação, especifique as políticas de posicionamento no campo resourcePolicies. Para especificar uma política de posicionamento compacta, você também precisa especificar os campos "onHostMaintenance": "TERMINATE" e "automaticRestart": false.

Por exemplo, para criar um modelo de instância que tenha propriedades de VM padrão e inclua uma política de posicionamento compacta, use o seguinte comando:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "resourcePolicies": {
      "COMPACT_PLACEMENT_POLICY_NAME"
    },
    "scheduling": {
      "onHostMaintenance": "TERMINATE",
      "automaticRestart": false
    },
    ...
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto atual.

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

  • COMPACT_PLACEMENT_POLICY_NAME: o nome de uma política de posicionamento compacta.

Se você quiser usar o modelo para criar uma reserva de VM, MIG ou VM, consulte os seguintes documentos:

Aplicar uma política de colocação a VMs em um grupo de instâncias gerenciadas

Depois de criar uma política de colocação, crie um modelo de instância que especifique a política. Em seguida, crie um MIG ou atualize um MIG atual com esse modelo de instância. A política de posicionamento será aplicada às VMs no grupo que usam esse modelo de instância.

Se você tiver uma carga de trabalho que exija comunicação extensa entre VMs, recomendamos criar uma política de posicionamento compacto e usar um MIG regional com o formato de distribuição de qualquer zona. Com o formato de zona única, sempre que um MIG regional não tiver VMs e precisar escalonar horizontalmente, o grupo escolherá a zona ideal com base nas suas reservas, cotas e requisitos de hardware.

Como aplicar uma política de posicionamento a um novo MIG

Você pode usar a CLI gcloud ou a API Compute Engine.

gcloud

Para criar um MIG com VMs baseadas no modelo criado anteriormente, use o comando instance-groups managed create. Por exemplo, para criar um MIG regional com o formato de distribuição de qualquer zona única, use o seguinte comando:

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template TEMPLATE_NAME \
    --size SIZE \
    --region REGION \
    --zones ZONES \
    --target-distribution-shape=any-single-zone

Substitua:

  • INSTANCE_GROUP_NAME: o nome desse grupo de instâncias.
  • TEMPLATE_NAME: o nome do modelo de instância a ser usado para este grupo.
  • SIZE: o tamanho do grupo de instâncias
  • REGION: a região desse grupo de instâncias.

  • ZONES (opcional): uma lista de zonas na região em que o MIG pode implantar instâncias de VM. Por padrão, o Compute Engine seleciona três zonas para você.

    • Se você quiser que seu MIG use todas as zonas da região, especifique todas as zonas disponíveis. É possível conseguir uma lista de zonas na região com o seguinte comando:

      gcloud compute zones list --filter=region:REGION --format='list(NAME)'
    • Não é possível atualizar um MIG regional para usar zonas diferentes após a criação.

API

Para criar um MIG com VMs baseadas no modelo criado anteriormente, chame o método instanceGroupManagers.insert ou regionInstanceGroupManagers.insert e especifique esse modelo. Por exemplo, para criar um MIG regional com o formato de distribuição de qualquer zona única, use o seguinte método:

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

{
  "name": "INSTANCE_GROUP_NAME",
  "instanceTemplate": "global/instanceTemplates/TEMPLATE_NAME",
  "targetSize": SIZE,
  "distributionPolicy": {
      "zones": [
          {"zone": "zones/ZONE1"},
          {"zone": "zones/ZONE2"},
          {"zone": "zones/ZONE3"},
      ],
      "targetShape": "ANY_SINGLE_ZONE"
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação
  • REGION: a região do grupo.
  • INSTANCE_GROUP_NAME: o nome do MIG.
  • TEMPLATE_NAME: o modelo de instância a ser usado.
  • SIZE: o número pretendido de VMs para o grupo.
  • ZONES: o nome de uma zona na região em que o MIG pode implantar instâncias de VM.
    • Se você quiser que seu MIG use todas as zonas da região, especifique todas as zonas disponíveis. Para receber uma lista de zonas na região, chame o método regions.get.
    • Não é possível atualizar um MIG regional para usar zonas diferentes após a criação.

Para saber mais sobre a criação de MIGs, consulte Cenários básicos para a criação de grupos de instâncias gerenciadas (MIGs, na sigla em inglês).

Como aplicar uma política de posicionamento em um MIG existente

Depois de criar uma política de colocação, crie um modelo de instância que especifique a política. Em seguida, aplique o modelo a um MIG existente. É possível usar a CLI da gcloud ou a API Compute Engine.

gcloud

Para atualizar um MIG para usar o novo modelo e implantá-lo automaticamente nas VMs atuais, use o comando instance-groups managed rolling-action start-update. Por exemplo:

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --template TEMPLATE_NAME \
    --type=proactive

API

Para atualizar um MIG para usar o novo modelo, chame o método patch em um MIG regional ou zonal.

Por exemplo, no caso de um MIG regional, a solicitação a seguir mostra a configuração mínima necessária para atualizar automaticamente 100% de instâncias para o novo modelo de instância.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
  "instanceTemplate": "global/instanceTemplates/TEMPLATE_NAME",
  "updatePolicy": {
    "type": "PROACTIVE"
   }
}

Para saber mais sobre outras maneiras de atualizar VMs em MIGs, consulte Atualizar e aplicar novas configurações a VMs em um MIG.

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"
...

Ver topologia de posicionamento da VM

É possível visualizar informações sobre onde uma VM está localizada em relação a outra VM. Essas informações ajudam você a criar uma topologia para suas VMs em um projeto, ao determinar quais VMs estão mais próximas umas das outras e quais compartilham a menor quantidade de hardware.

É possível comparar as informações de topologia de posicionamento de VM somente com as VMs que usam a mesma política de posicionamento.

gcloud

Veja as propriedades resource de uma VM criada com uma política de posicionamento :

gcloud compute instances describe VM_NAME \
    --format="table[box,title=VM-Topology](resourcePolicies.scope():sort=1,resourceStatus.physicalHost:label=location)"

Substitua VM_NAME pelo nome da instância de VM que usa uma política de posicionamento.

A saída será semelhante a esta:

VM-Topology

RESOURCE_POLICIES: us-central1/resourcePolicies/policy_name']
PHYSICAL_HOST: /xxxxxxxx/xxxxxx/xxxxx

O valor de PHYSICAL_HOST é composto por três campos. Eles contêm valores com hash que representam o cluster, o rack do servidor e a máquina host em que a VM está localizada. Ao comparar esse valor com outras VMs, quanto mais campos tiverem a mesma string, mais próximas as VMs vão estar localizadas umas das outras. Por exemplo, duas VMs que pertencem ao mesmo projeto, cluster e são executadas no mesmo rack têm o mesmo valor para as duas primeiras partes do campo PHYSICAL_HOST.

API

Veja os detalhes de uma VM criada com uma política de posicionamento compacta. Faça uma solicitação GET ao método instances.get.

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

Substitua:

  • PROJECT_ID: o ID do projeto para esta consulta.
  • ZONE: a zona da instância que você quer consultar.
  • VM_NAME: o nome da VM que usa uma política de posição.

O corpo da resposta contém um snippet semelhante ao seguinte:

{
  ...
  resourcePolicies:
  - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/ZONE/resourcePolicies/POLICY_NAME
  resourceStatus:
      physical_host: /xxxxxxxx/xxxxxx/xxxxx
  ...
}

O valor de physical_host é composto por três campos, que contêm valores com hash que representam o cluster, o rack do servidor e a máquina host em que a VM está localizada. Ao comparar esse valor com outras VMs, quanto mais campos tiverem a mesma string, mais próximas as VMs vão estar localizadas umas das outras. Por exemplo, duas VMs que pertencem ao mesmo projeto, cluster e são executadas no mesmo rack têm o mesmo valor para as duas primeiras partes do campo physicalHost.

Se a VM não usar uma política de posicionamento compacta, o valor da propriedade vai aparecer na saída como:

resourceStatus: {}

Excluir uma política de posicionamento

É possível excluir uma política de posicionamento desnecessária.

gcloud

Use a CLI gcloud para criar a política.

gcloud compute resource-policies delete POLICY_NAME \
    --region REGION \
    --project PROJECT_ID

Substitua:

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

API

Para criar uma política de posicionamento de propagação, use o método resourcePolicies.insert nas APIs e serviços do console do Google 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

A seguir