定义实例放置政策

您可以控制虚拟机实例在可用区内相对于彼此的物理位置。您可以使用以下放置政策:

  • 分散放置政策。如果您希望虚拟机之间彼此远离以减少主机系统故障的影响,请使用分散政策。
  • 紧凑放置政策。如果您希望虚拟机之间彼此靠近以缩短虚拟机之间的网络延迟时间,请使用紧凑政策。

准备工作

支持和限制

放置政策具有以下支持和限制:

  • 分散放置政策:
    • 每个政策最多支持 8 个虚拟机。
    • 应用于动态数量的虚拟机。
    • 仅支持 N1、N2、N2D、C2 机器类型
    • 支持实时迁移
  • 紧凑放置政策:
    • 每个政策最多支持 22 个虚拟机。
    • 应用于固定数量的虚拟机。
    • 仅支持 C2 机器类型
    • 不支持实时迁移
    • 应用于主机维护事件设置为 TERMINATE 的虚拟机。
    • 无法应用于现有虚拟机。
  • 分散放置和紧凑放置政策:

创建放置政策

如需控制虚拟机相对于彼此的位置,请按照以下过程操作:

  1. 使用虚拟机所需的放置配置创建分散或紧凑放置政策。
    • 分散放置政策会将虚拟机实例精确分散放置在数据中心底层基础设施上,以免虚拟机共享相同的主机或电源系统。这种方法可以减少主机或电源故障的影响。
    • 紧凑放置政策会将虚拟机实例放置在彼此靠近的位置,以缩短虚拟机之间的网络延迟时间。
  2. 将放置政策应用于一个或多个实例。系统会根据您对政策的定义,将共享同一政策的虚拟机放置在相对于彼此合适的位置。

创建分散放置政策

如需创建实例位于多个不同可用性网域的分散放置政策,请指定此政策应该用来分隔实例的可用性网域的数量。

gcloud

使用 gcloud 工具创建政策。

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

请替换以下内容:

  • POLICY_NAME:新政策的名称
  • DOMAIN_COUNT:此政策将用于分隔虚拟机的不同主机硬件和实体网络集的数量
  • REGION:您计划创建的使用此政策的虚拟机实例的区域
  • PROJECT_ID:您的项目 ID

API

通过使用 resourcePolicies.insert 方法在 Cloud Console API 和服务中创建一种分散放置政策。

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

在请求正文中,提供放置政策的详细信息:

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:您打算在其中创建使用此政策的虚拟机实例的区域。
  • POLICY_NAME:新政策的名称
  • DOMAIN_COUNT:此政策将用于分隔实例的不同主机硬件和实体网络集的数量

创建紧凑放置政策

如需创建实例位于同一网络基础架构上彼此靠近的位置的紧凑放置政策,请指定 COLLOCATED 政策以及您打算包含在该政策中的虚拟机实例数。

gcloud

使用 gcloud 工具创建政策。

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

请替换以下内容:

  • POLICY_NAME:新政策的名称
  • VM_COUNT:要包含在该政策中的虚拟机数量

    对于紧凑政策,您必须将该政策应用于此精确数量的虚拟机。

  • REGION:您计划创建的使用此政策的虚拟机实例的区域

  • PROJECT_ID:您的项目 ID

API

通过使用 resourcePolicies.insert 方法在 Cloud Console API 和服务中创建一种分散放置政策。

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

在请求正文中,提供放置政策的详细信息:

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:您打算在其中创建使用此政策的虚拟机实例的区域。
  • POLICY_NAME:新政策的名称
  • VM_COUNT:要包含在该政策中的虚拟机数量

    对于紧凑政策,您必须将该政策应用于此精确数量的虚拟机。

将放置政策应用于实例

请按照以下步骤将放置政策应用于新实例和现有实例。

将放置政策应用于新实例

创建放置政策后,请将其应用于一个或多个实例。 系统会根据您对政策的定义,将共享同一政策的虚拟机放置在相对于彼此合适的位置。

gcloud

创建新实例时,通过添加 --resource-policies 标志,将布置政策应用于实例。 如果您运行多个 instances create 命令,请使用 --async 标志,以防止 Compute Engine 在放置政策下创建虚拟机时这些命令超时。

对于紧凑放置政策,您必须添加 --maintenance-policy=TERMINATE--no-restart-on-failure 标志。

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]

替换以下内容:

  • VM_NAME:新虚拟机的名称
  • ZONE:要在其中创建新虚拟机的可用区

    此区域必须位于放置政策所在的同一地区。

  • POLICY_NAME:要应用于此虚拟机的放置政策的名称

    您可以将多个放置政策应用于一个虚拟机。

  • IMAGE_FAMILY可用映像系列之一

  • IMAGE_PROJECT:该映像所属的映像项目

  • PROJECT_ID:您的项目 ID

API

创建新虚拟机时,通过添加 resourcePolicies 属性,将放置政策应用于虚拟机。

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

在请求正文中,提供资源政策。对于紧凑放置政策,您必须添加 "onHostMaintenance": "TERMINATE""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"
  ]
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:要在其中创建新虚拟机的可用区

    此区域必须位于放置政策所在的同一地区。

  • VM_NAME:新虚拟机的名称

  • MACHINE_TYPE:虚拟机的机器类型

  • IMAGE_PROJECT:该映像所属的映像项目

  • IMAGE_FAMILY可用映像系列之一

  • REGION:创建了放置政策的区域

  • POLICY_NAME:要应用于此虚拟机的放置政策的名称

    您可以将多个放置政策应用于一个虚拟机。

将放置政策应用于现有实例

创建分散放置政策时,您可以将其应用于一个或多个现有虚拟机,而无需重启虚拟机。

gcloud

使用 add-resource-policies 命令将放置政策应用于现有实例。

对于紧凑放置政策,您必须添加 --maintenance-policy=TERMINATE--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]

替换以下内容:

  • VM_NAME:虚拟机的名称
  • ZONE:虚拟机所在的区域

    此可用区必须与放置政策位于同一区域。

  • POLICY_NAME:要应用于此虚拟机的放置政策的名称

    您可以将多个放置政策应用于一个虚拟机。

  • PROJECT_ID:您的项目 ID

API

使用 addResourcePolicies 方法将放置政策应用于现有实例。

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

在请求正文中,提供资源政策。对于紧凑放置政策,您必须添加 "onHostMaintenance": "TERMINATE""automaticRestart": false 参数。

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:要在其中创建新虚拟机的可用区

    此区域必须位于放置政策所在的同一地区。

  • VM_NAME:新虚拟机的名称

  • REGION:您计划创建的使用此政策的虚拟机实例的区域

  • POLICY_NAME:要应用于此虚拟机的放置政策的名称

    您可以将多个放置政策应用于一个虚拟机。

查看放置政策

您可以使用 gcloud 工具和 Compute Engine API 查看应用于虚拟机的放置政策以及特定放置政策的详细信息。

查看虚拟机的放置政策

gcloud

如需查看虚拟机的资源放置政策,请使用 gcloud compute instances describe 命令

gcloud compute instances describe VM_NAME

VM_NAME 替换为虚拟机名称。

如果放置政策可用,输出会包含 resourcePolicies 字段:

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

API

如需查看虚拟机的资源放置政策,请使用 instances.get 方法

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:包含虚拟机的可用区
  • VM_NAME:您的虚拟机的名称

如果放置政策可用,resourcePolicies 字段会返回虚拟机的资源政策。

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

查看放置政策的详细信息

gcloud

如需查看放置政策的详细信息,请使用 gcloud compute resource-policies describe 命令

gcloud compute resource-policies describe POLICY_NAME

POLICY_NAME 替换为放置政策的名称。

如果放置政策可用,输出会包含放置政策的详细信息:

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

API

如需查看放置政策的详细信息,请使用 resourcePolicies.get 方法

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:包含虚拟机的区域
  • POLICY_NAME:放置政策的名称

如果放置政策可用,响应正文会包含放置政策的详细信息:

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

后续步骤