本文档介绍如何创建分散布置政策,并将其应用于一个或多个虚拟机 (VM) 实例,以提高可靠性。
分散布置政策通过将虚拟机布置在不同的可用性网域中,来指定虚拟机之间应物理隔离。使用分散布置政策确保将虚拟机放置在不同的硬件上,从而减少底层硬件故障的影响或优化实时迁移。
您可以在以下情况下应用分散布置政策:
创建或更新虚拟机
创建实例模板。然后,实例模板会在以下情况下应用分散布置政策:
创建虚拟机
创建或更新代管式实例组 (MIG)
准备工作
-
设置身份验证。
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
-
安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:
gcloud init
- 设置默认区域和可用区。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
-
所需的角色
如需获得创建分散布置政策并将其应用于虚拟机所需的权限,请让管理员向您授予虚拟机或项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1
) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限。
此预定义角色包含创建分散布置政策并将其应用于虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
若要创建分散布置政策并将其应用于虚拟机,您需要以下权限:
-
创建布置政策:针对项目的
compute.resourcePolicies.create
权限 -
将布置政策应用于现有虚拟机:针对项目的
compute.instances.addResourcePolicies
权限
限制
除了布置政策的一般限制之外,分散布置政策还具有以下限制:
您最多只能将分散布置政策应用于 8 个虚拟机。
您无法将分散布置政策应用于虚拟机预留。
您无法验证虚拟机的物理位置。
创建分散放置政策
您可以使用 gcloud CLI 和 Compute Engine API 创建分散布置政策。
gcloud
如需创建分散布置政策,请使用带有 --availability-domain-count
标志的 gcloud compute resource-policies create group-placement
命令。
gcloud compute resource-policies create group-placement POLICY_NAME \
--availability-domain-count=DOMAIN_COUNT \
--project=PROJECT_ID \
--region=REGION
替换以下内容:
POLICY_NAME
:要创建的分散布置政策的名称。DOMAIN_COUNT
:要在其中布置虚拟机的不同可用性网域数。该值必须在1
到8
(这是您可以应用分散布置政策的虚拟机数上限)之间。PROJECT_ID
:要在其中创建政策的项目的项目 ID。REGION
:要用于创建政策的区域。
REST
如需创建分散布置政策,请使用 availabilityDomainCount
字段向 resourcePolicies.insert
方法发出 POST
请求。
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
:要在其中布置虚拟机的不同可用性网域数。每个网域都有自己的独立电源、冷却和网络来源。该值必须在1
到8
(这是您可以应用分散布置政策的虚拟机数上限)之间。
应用分散布置政策
您可以将分散布置政策应用于现有虚拟机,也可以在创建虚拟机、实例模板或 MIG 时应用。
如需创建指定分散布置政策的 Compute Engine 资源,或将分散布置政策应用于现有虚拟机,请选择以下方法之一:
将分散放置政策应用于现有虚拟机
您可以使用 gcloud CLI 和 Compute Engine API 将布置政策应用于现有虚拟机。
gcloud
如需将分散布置政策应用于现有虚拟机,请使用带有 --resource-policies
标志的 gcloud compute instances add-resource-policies
命令。
gcloud compute instances add-resource-policies VM_NAME \
--project=PROJECT_ID \
--resource-policies=POLICY_NAME \
--zone=ZONE
替换以下内容:
VM_NAME
:现有虚拟机的名称。PROJECT_ID
:分散布置政策和虚拟机所在项目的项目 ID。POLICY_NAME
:现有分散布置政策的名称。ZONE
:虚拟机所在的可用区,该可用区必须在分散布置政策的区域内。
REST
如需将分散布置政策应用于现有虚拟机,请使用 resourcePolicies
字段向 instances.addResourcePolicies
方法发出 POST
请求。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addResourcePolicies
{
"resourcePolicies": [
"projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
]
}
替换以下内容:
PROJECT_ID
:分散布置政策和虚拟机所在项目的项目 ID。ZONE
:虚拟机所在的可用区,该可用区必须在分散布置政策的区域内。VM_NAME
:现有虚拟机的名称。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。
创建指定分散布置政策的虚拟机
您可以使用 gcloud CLI 和 Compute Engine API 创建指定现有分散布置政策的虚拟机。
gcloud
如需创建指定分散布置政策的虚拟机,请使用带有 --resource-policies
标志的 gcloud compute instances create
命令。
例如,如需创建具有默认属性并指定分散布置政策的虚拟机,请运行以下命令:
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--resource-policies=POLICY_NAME \
--zone=ZONE
替换以下内容:
VM_NAME
:要创建的虚拟机的名称。PROJECT_ID
:分散布置政策所在项目的项目 ID。POLICY_NAME
:现有分散布置政策的名称。ZONE
:要用于创建虚拟机的可用区。您只能在您指定的分散布置政策所在区域内的可用区中创建虚拟机。
REST
如需创建指定分散布置政策的虚拟机,请使用 resourcePolicies
字段向 instances.insert
方法发出 POST
请求。
例如,如需创建具有默认属性并指定分散布置政策的虚拟机,请发出以下 POST
请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "VM_NAME",
"resourcePolicies": [
"projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
]
}
替换以下内容:
PROJECT_ID
:分散布置政策所在项目的项目 ID。ZONE
:要用于创建虚拟机的可用区。您只能在您指定的分散布置政策所在区域内的可用区中创建虚拟机。VM_NAME
:要创建的虚拟机的名称。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。
如需详细了解配置选项和用于创建虚拟机的 IAM 角色,请参阅创建并启动虚拟机实例。
批量创建指定分散布置政策的虚拟机
您可以使用 gcloud CLI 和 Compute Engine API 批量创建指定现有分散布置政策的虚拟机。
gcloud
要批量创建指定分散布置政策的虚拟机,请使用带有 --async
和 --resource-policies
标志的 gcloud compute instances bulk create
命令。
例如,如需批量创建全都具有默认属性并指定相同分散布置政策的虚拟机,请运行以下命令:
gcloud compute instances bulk create \
--async \
--count=COUNT \
--name-pattern=NAME_PATTERN \
--project=PROJECT_ID \
--resource-policies=POLICY_NAME \
--zone=ZONE
替换以下内容:
COUNT
:要创建的虚拟机数量。NAME_PATTERN
:要创建的虚拟机的名称模式。使用井号 (#
) 将其替换为数字序列。例如,指定vm-#
可创建名为vm-1
、vm-2
等的虚拟机,最多为COUNT
中指定的虚拟机数量。PROJECT_ID
:分散布置政策所在项目的项目 ID。POLICY_NAME
:现有分散布置政策的名称。ZONE
:要用于批量创建虚拟机的可用区。您只能在指定的分散布置政策所在区域的可用区中创建虚拟机。
REST
若要批量创建指定分散布置政策的虚拟机,请使用 resourcePolicies
字段向 instances.bulkInsert
方法发出 POST
。
例如,如需批量创建全都具有默认属性并指定相同分散布置政策的虚拟机,请发出以下 POST
请求:
POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
"count": "COUNT",
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"resourcePolicies": [
"projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
]
}
}
替换以下内容:
PROJECT_ID
:分散布置政策所在项目的项目 ID。ZONE
:要用于批量创建虚拟机的可用区。您只能在指定的分散布置政策所在区域的可用区中创建虚拟机。COUNT
:要创建的虚拟机数量。NAME_PATTERN
:要创建的虚拟机的名称模式。使用井号 (#
) 将其替换为数字序列。例如,指定vm-#
将创建名称为vm-1
、vm-2
等的虚拟机,最多为COUNT
中指定的虚拟机数量。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。
如需详细了解配置选项或用于创建批量虚拟机的 IAM 角色,请参阅批量创建虚拟机。
创建用于指定分散放置政策的实例模板
您可以使用 gcloud CLI 和 Compute Engine API 创建指定现有分散布置政策的实例模板。
创建实例模板后,您可以使用该模板执行以下操作:
gcloud
如需创建指定分散布置政策的实例模板,请使用带有 --resource-policies
标志的 gcloud compute instance-templates create
命令。
例如,如需创建具有默认虚拟机属性并包含分散布置政策的实例模板,请运行以下命令:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--project=PROJECT_ID \
--resource-policies=POLICY_NAME
替换以下内容:
INSTANCE_TEMPLATE_NAME
:实例模板的名称。PROJECT_ID
:要应用于实例模板的分散布置政策所在的项目的项目 ID。POLICY_NAME
:现有分散布置政策的名称。
REST
如需创建指定分散布置政策的实例模板,请向 instanceTemplates.insert
方法发出 POST
请求。在请求正文中,指定 resourcePolicies
字段。
例如,如需创建具有默认虚拟机属性并指定分散布置政策的实例模板,请发出以下 POST
请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME",
"properties": {
"resourcePolicies": {
"POLICY_NAME"
}
}
}
替换以下内容:
PROJECT_ID
:要应用于实例模板的分散布置政策所在的项目的项目 ID。INSTANCE_TEMPLATE_NAME
:实例模板的名称。POLICY_NAME
:现有分散布置政策的名称。
如需详细了解用于创建实例模板的配置选项,请参阅创建实例模板。
将分散布置政策应用于 MIG 中的虚拟机
创建指定分散布置政策的实例模板后,您便可以使用该模板执行以下操作:
如果要将分散布置政策应用于 MIG,请创建政策或将其应用于具有任何单个可用区分布形状的区域 MIG。这样,每当区域 MIG 需要通过创建虚拟机进行横向扩容时,它会根据您的配额和硬件要求选择要在其中创建虚拟机的可用区。
创建指定分散布置政策的 MIG
您可以使用 gcloud CLI 和 Compute Engine API 通过指定分散布置政策的实例模板创建 MIG。
gcloud
如需使用指定分散布置政策的实例模板创建 MIG,请使用 gcloud compute instance-groups managed create
命令,并将 --template
标志设置为现有模板的名称。
例如,如需创建具有默认虚拟机属性和任意单个可用区分布形状的区域 MIG,请运行以下命令:
gcloud compute instance-groups managed create MIG_NAME \
--project=PROJECT_ID \
--region=REGION \
--size=SIZE \
--target-distribution-shape=any-single-zone \
--template=INSTANCE_TEMPLATE_NAME
替换以下内容:
MIG_NAME
:要创建的 MIG 的名称。PROJECT_ID
:分散布置政策以及指定布置政策的实例模板所在项目的项目 ID。REGION
:要用于创建 MIG 的区域,该区域必须与分散布置政策所在的区域一致。SIZE
:MIG 的大小。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。
REST
如需使用指定分散布置政策的实例模板创建 MIG,请向 instanceGroupManagers.insert
或 regionInstanceGroupManagers.insert
方法发出 POST
请求,并将 instanceTemplate
字段设置为现有模板的名称。
例如,如需创建具有默认虚拟机属性和任意单个可用区分布形状的区域级 MIG,请发出以下 POST
请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
{
"name": "MIG_NAME",
"instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
"targetSize": SIZE,
"distributionPolicy": {
"targetShape": "ANY_SINGLE_ZONE"
}
}
替换以下内容:
PROJECT_ID
:分散布置政策以及指定布置政策的实例模板所在项目的项目 ID。REGION
:要用于创建 MIG 的区域,该区域必须与分散布置政策所在的区域一致。MIG_NAME
:要创建的 MIG 的名称。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。SIZE
:MIG 的大小。
如需详细了解用于创建 MIG 的配置选项和 IAM 角色,请参阅创建 MIG 的基本场景。
将分散放置政策应用于现有 MIG
您可以使用 gcloud CLI 和 Compute Engine API 通过指定了相同布置政策的实例模板将分散布置政策应用于现有 MIG。
gcloud
如需更新 MIG 以使用指定分散布置政策的实例模板,请使用 gcloud compute instance-groups managed rolling-action start-update
命令。
例如,如需更新区域 MIG 以使用指定分散布置政策的实例模板,并将 MIG 中的现有虚拟机替换为指定模板属性的新虚拟机,请运行以下命令:
gcloud compute instance-groups managed rolling-action start-update MIG_NAME \
--project=PROJECT_ID \
--region=REGION \
--type=proactive \
--version=template=INSTANCE_TEMPLATE_NAME
替换以下内容:
MIG_NAME
:现有 MIG 的名称。PROJECT_ID
:MIG、分散布置政策以及指定布置政策的实例模板所在项目的项目 ID。REGION
:MIG 所在的区域。您只能将分散布置政策应用于位于同一区域的 MIG。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。
REST
如需更新 MIG 以使用指定分散布置政策的实例模板,并自动将模板和布置政策的属性应用于 MIG 中的现有虚拟机,请向 instanceGroupManagers.insert
或 regionInstanceGroupManagers.insert
发出 PATCH
请求。
例如,如需更新区域 MIG 以使用指定分散布置政策的实例模板,并将 MIG 中的现有虚拟机替换为指定模板属性的新虚拟机,请发出以下 PATCH
请求:
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
"instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
"updatePolicy": {
"type": "PROACTIVE"
}
}
替换以下内容:
PROJECT_ID
:您用于创建现有 MIG、分散布置政策以及指定分散布置政策的实例模板的项目的 ID。REGION
:MIG 所在的区域。MIG_NAME
:现有 MIG 的名称。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。
如需详细了解用于更新 MIG 中的虚拟机的配置选项和 IAM 角色,请参阅更新新配置并将其应用于 MIG 中的虚拟机。
后续步骤
了解如何查看布置政策。
了解如何替换、移除或删除布置政策。
了解如何使用指定布置政策的虚拟机执行以下操作:
详细了解维护事件期间的实时迁移过程。