本文档介绍如何创建分散布置政策,并将其应用于一个或多个虚拟机 (VM) 实例,以提高可靠性。
分散布置政策通过将虚拟机布置在不同的可用性网域中,来指定虚拟机之间应物理隔离。可用度网域是指数据中心内具有独立电源、冷却和网络来源的独立硬件。使用分散布置政策有助于减少底层硬件故障或维护事件影响所有虚拟机。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
gcloud
-
安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:
gcloud init
- Set a default region and zone.
- 创建布置政策:针对项目的
compute.resourcePolicies.create
权限 -
将布置政策应用于现有虚拟机:针对项目的
compute.instances.addResourcePolicies
权限 -
创建虚拟机:
- 针对项目的
compute.instances.create
权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly
权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly
权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly
权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use
权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use
权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp
权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use
权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp
权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata
权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags
权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels
权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount
权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create
权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use
权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly
权限
- 针对项目的
- 如需创建实例模板:针对项目的
compute.instanceTemplates.create
权限 -
创建区域级或可用区级托管式实例组 (MIG):针对项目的
compute.instanceGroupManagers.create
权限 POLICY_NAME
:要创建的分散布置政策的名称。DOMAIN_COUNT
:要在其中布置虚拟机的不同可用性网域数。该值必须在1
到8
之间。REGION
:要用于创建政策的区域。PROJECT_ID
:要在其中创建政策的项目的 ID。REGION
:要用于创建政策的区域。POLICY_NAME
:要创建的分散布置政策的名称。DOMAIN_COUNT
:要在其中布置虚拟机的不同可用性网域数。该值必须在1
到8
之间。如果分散布置政策具有两个或更多可用性网域,您可以在不停止虚拟机的情况下将其添加到虚拟机。否则,如果您的分散布置政策仅指定了一个网域,则您必须先停止虚拟机,然后才能将布置政策应用于该虚拟机。
虚拟机和分散布置政策必须位于同一区域。例如,如果布置政策位于区域
us-central1
,则虚拟机必须位于us-central1
的可用区中。如果您需要将虚拟机迁移到其他区域,请参阅在可用区或区域之间移动虚拟机。VM_NAME
:现有虚拟机的名称。POLICY_NAME
:现有分散布置政策的名称。ZONE
:虚拟机所在的可用区,该可用区必须在分散布置政策的区域内。PROJECT_ID
:分散布置政策和虚拟机所在项目的 ID。ZONE
:虚拟机所在的可用区,该可用区必须在分散布置政策的区域内。VM_NAME
:现有虚拟机的名称。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。VM_NAME
:要创建的虚拟机的名称。MACHINE_TYPE
:虚拟机的机器类型。POLICY_NAME
:现有分散布置政策的名称。ZONE
:要用于创建虚拟机的可用区。PROJECT_ID
:分散布置政策所在项目的 ID。ZONE
:要用于创建虚拟机以及机器类型所在的可用区。您只能指定与分散布置政策位于同一区域的机器类型。VM_NAME
:要创建的虚拟机的名称。MACHINE_TYPE
:虚拟机的机器类型。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。COUNT
:要创建的虚拟机数量。MACHINE_TYPE
:虚拟机的机器类型。NAME_PATTERN
:要创建的虚拟机的名称格式。使用井号 (#
) 将其替换为数字序列。例如,如果指定vm-#
,就可以创建名为vm-1
、vm-2
等的虚拟机,最多可创建COUNT
中指定的虚拟机数量。POLICY_NAME
:现有分散布置政策的名称。ZONE
:要用于批量创建虚拟机的可用区。PROJECT_ID
:分散布置政策所在项目的 ID。ZONE
:要用于批量创建虚拟机的可用区。COUNT
:要创建的虚拟机数量。MACHINE_TYPE
:虚拟机的机器类型。NAME_PATTERN
:要创建的虚拟机的名称格式。使用井号 (#
) 将其替换为数字序列。例如,指定vm-#
将创建名称为vm-1
、vm-2
等的虚拟机,最多为COUNT
中指定的虚拟机数量。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。INSTANCE_TEMPLATE_NAME
:实例模板的名称。MACHINE_TYPE
:使用实例模板创建的虚拟机的机器类型。POLICY_NAME
:现有分散布置政策的名称。如需创建全球实例模板:
instanceTemplates.insert
方法。如需创建区域级实例模板:
regionInstanceTemplates.insert
方法。PROJECT_ID
:分散布置政策所在项目的 ID。INSTANCE_TEMPLATE_NAME
:实例模板的名称。IMAGE
或IMAGE_FAMILY
:指定以下其中一项:MACHINE_TYPE
:使用实例模板创建的虚拟机的机器类型。POLICY_NAME
:现有分散布置政策的名称。MIG_NAME
:要创建的 MIG 的名称。REGION
:要用于创建 MIG 的区域,该区域必须与分散布置政策所在的区域一致。SIZE
:MIG 的大小。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。PROJECT_ID
:分散布置政策以及指定布置政策的实例模板所在项目的 ID。REGION
:要用于创建 MIG 的区域,该区域必须与分散布置政策所在的区域一致。MIG_NAME
:要创建的 MIG 的名称。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。SIZE
:MIG 的大小。MIG_NAME
:现有 MIG 的名称。REGION
:MIG 所在的区域。您只能将分散布置政策应用于位于同一区域的 MIG。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。PROJECT_ID
:您用于创建现有 MIG、分散布置政策以及指定分散布置政策的实例模板的项目的 ID。REGION
:MIG 所在的区域。您只能将分散布置政策应用于位于同一区域的 MIG。MIG_NAME
:现有 MIG 的名称。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有实例模板的名称。了解如何查看布置政策。
了解如何替换、移除或删除布置政策。
了解如何使用指定布置政策的虚拟机执行以下操作:
详细了解维护事件期间的实时迁移过程。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得创建分散布置政策并将其应用于虚拟机所需的权限,请让管理员向您授予针对项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限。此预定义角色包含创建分散布置政策并将其应用于虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
若要创建分散布置政策并将其应用于虚拟机,您需要以下权限:
创建分散布置政策
创建分散布置政策时,您最多可以指定 8 个可用性网域来放置虚拟机。除非您想测试将分散布置政策应用于虚拟机的效果,否则 Google Cloud 建议您指定两个或更多可用性网域。这样可以降低所有虚拟机都受到单个硬件故障或维护事件影响的风险。
如需创建分散布置政策,请选择以下选项之一:
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 \ --region=REGION
替换以下内容:
REST
如需创建分散布置政策,请向
resourcePolicies.insert
方法发出POST
请求。在请求正文中,包含availabilityDomainCount
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies { "name": "POLICY_NAME", "groupPlacementPolicy": { "availabilityDomainCount": DOMAIN_COUNT } }
替换以下内容:
应用分散布置政策
您可以将分散布置政策应用于现有虚拟机,也可以在创建虚拟机、实例模板或 MIG 时应用。
如需创建指定分散布置政策的 Compute Engine 资源,或将分散布置政策应用于现有虚拟机,请选择以下方法之一:
将分散布置政策应用于现有虚拟机
在将分散布置政策应用于现有虚拟机之前,请查看以下内容:
否则,将分散布置政策应用于虚拟机将失败。如果虚拟机已指定布置政策,并且您想要替换该政策,请改为参阅替换虚拟机中的布置政策。
如需将分散布置政策应用于现有虚拟机,请选择以下选项之一:
gcloud
如需将分散布置政策应用于现有虚拟机,请使用带有
--resource-policies
标志的gcloud compute instances add-resource-policies
命令。gcloud compute instances add-resource-policies VM_NAME \ --resource-policies=POLICY_NAME \ --zone=ZONE
替换以下内容:
REST
如需将分散布置政策应用于现有虚拟机,请向
instances.addResourcePolicies
方法发出POST
请求。在请求正文中,包含resourcePolicies
字段。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" ] }
替换以下内容:
使用分散布置政策创建虚拟机
您只能在与布置政策位于同一区域的可用区中使用分散布置政策创建虚拟机。
如需创建指定分散布置政策的虚拟机,请选择以下选项之一:
gcloud
如需创建指定分散布置政策的虚拟机,请使用带有
--resource-policies
标志的gcloud compute instances create
命令。gcloud compute instances create VM_NAME \ --machine-type=MACHINE_TYPE \ --resource-policies=POLICY_NAME \ --zone=ZONE
请替换以下内容:
REST
如需创建指定分散布置政策的虚拟机,请向
instances.insert
方法发出POST
请求。在请求正文中,包含resourcePolicies
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "resourcePolicies": [ "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME" ] }
请替换以下内容:
如需详细了解用于创建虚拟机的配置选项,请参阅创建和启动虚拟机实例。
使用分散布置政策批量创建虚拟机
您只能在与分散布置政策相同的区域中使用分散布置政策批量创建虚拟机。
如需批量创建指定分散布置政策的虚拟机,请选择以下选项之一:
gcloud
若要批量创建指定分散布置政策的虚拟机,请使用带有
--resource-policies
标志的gcloud compute instances bulk create
命令。例如,如需在单个可用区中批量创建虚拟机并为虚拟机指定名称模式,请运行以下命令:
gcloud compute instances bulk create \ --count=COUNT \ --machine-type=MACHINE_TYPE \ --name-pattern=NAME_PATTERN \ --resource-policies=POLICY_NAME \ --zone=ZONE
请替换以下内容:
REST
如需批量创建指定分散布置政策的虚拟机,请向
instances.bulkInsert
方法发出POST
。在请求正文中,包含resourcePolicies
字段。例如,如需在单个可用区中批量创建虚拟机并为虚拟机指定名称模式,请发出
POST
请求,如下所示:POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": "COUNT", "machineType": "MACHINE_TYPE", "namePattern": "NAME_PATTERN", "instanceProperties": { "resourcePolicies": [ "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME" ] } }
替换以下内容:
如需详细了解批量创建虚拟机的配置选项,请参阅批量创建虚拟机。
使用分散布置政策创建实例模板
如果您要创建区域实例模板,则必须在与分散布置政策相同的区域内创建该模板。否则,创建实例模板的操作将失败。
创建实例模板后,您可以使用该模板执行以下操作:
如需创建用于指定分散布置政策的实例模板,请选择以下选项之一:
gcloud
如需创建指定紧凑布置政策的实例模板,请使用带有
--resource-policies
标志的gcloud compute instance-templates create
命令。例如,如需创建指定分散布置政策的全局实例模板,请运行以下命令:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --machine-type=MACHINE_TYPE \ --resource-policies=POLICY_NAME
请替换以下内容:
REST
如需创建指定分散布置政策的实例模板,请向以下方法之一发出
POST
请求:在请求正文中,指定
resourcePolicies
字段。例如,如需创建指定分散布置政策的全球实例模板,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/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" ] } }
替换以下内容:
如需详细了解用于创建实例模板的配置选项,请参阅创建实例模板。
将分散布置政策应用于 MIG 中的虚拟机
创建指定分散布置政策的实例模板后,您便可以使用该模板执行以下操作:
如果要将分散布置政策应用于 MIG,请创建政策或将其应用于具有任何单个可用区分布形状的区域 MIG。这样,每当区域 MIG 需要通过创建虚拟机进行横向扩容时,它会根据您的配额和硬件要求选择要在其中创建虚拟机的可用区。
使用分散布置政策创建 MIG
仅当虚拟机与布置政策位于同一区域时,才能创建指定分散布置政策的虚拟机。
如需使用指定分散布置政策的实例模板创建 MIG,请选择以下选项之一:
gcloud
如需使用指定分散布置政策的实例模板创建 MIG,请使用
gcloud compute instance-groups managed create
命令。例如,如需创建具有默认虚拟机属性和任意单个可用区分布形状的区域 MIG,请运行以下命令:
gcloud compute instance-groups managed create MIG_NAME \ --region=REGION \ --size=SIZE \ --target-distribution-shape=any-single-zone \ --template=INSTANCE_TEMPLATE_NAME
替换以下内容:
REST
如需使用指定分散布置政策的实例模板创建 MIG,请向
instanceGroupManagers.insert
或regionInstanceGroupManagers.insert
方法发出POST
请求。例如,如需创建具有默认虚拟机属性和任意单个可用区分布形状的区域级 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" } }
替换以下内容:
如需详细了解用于创建 MIG 的配置选项,请参阅创建 MIG 的基本场景。
将分散布置政策应用于现有 MIG
仅当现有 MIG 与布置政策位于同一区域或者位于布置政策所在区域中的某个可用区(对于可用区级 MIG)时,您才能将紧凑布置政策应用于该 MIG。
如需更新 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 \ --region=REGION \ --type=proactive \ --version=template=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" } }
替换以下内容:
如需详细了解用于更新 MIG 中虚拟机的配置选项,请参阅更新 MIG 中的虚拟机配置并将新配置应用于虚拟机。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-07-12。
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻译问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }] -