本文档介绍了如何选择性地将配置更新应用于代管式实例组 (MIG) 中的虚拟机 (VM) 实例。
Compute Engine 会根据您使用的配置组件(实例模板、可选的所有实例配置和可选的有状态配置)来维护 MIG 中的虚拟机。
每当您通过更改这些组件来更新 MIG 的虚拟机配置时,Compute Engine 都会自动将更新后的配置应用于添加到组中的新虚拟机。
如需将更新后的配置应用于现有虚拟机,您可以设置选择性更新(也称为“寻机”更新类型)。此类更新具有以下优势:
- 您可以选择要更新的虚拟机。
- 您可以控制更新的时间和顺序。
- 您可以使用 gcloud CLI 或 REST 立即更新所有虚拟机。
或者,如果您想要将新配置自动发布到 MIG 中的所有虚拟机或随机的一部分虚拟机,请参阅在 MIG 中自动应用虚拟机配置更新。 为帮助您作出决定,请参阅将新配置应用于现有虚拟机的方法。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
INSTANCE_GROUP_NAME
:MIG 的名称INSTANCE_TEMPLATE
:新实例模板INSTANCE_NAMES
:要应用模板的虚拟机列表DISRUPTION_LEVEL
:最低或最高中断级别:none
、refresh
、restart
或replace
- 最少操作默认为
none
。 - 允许的最具中断性的操作默认为
replace
。
- 最少操作默认为
INSTANCE_GROUP_NAME
:组的名称NEW_TEMPLATE
:新模板的名称ZONE
:要更新的实例所在的可用区。INSTANCE_NAME_1
和INSTANCE_NAME_2
:要更新的虚拟机的名称DISRUPTION_LEVEL
:最低或最高中断级别:NONE
、REFRESH
、RESTART
或REPLACE
minimalAction
的默认值为NONE
。mostDisruptiveAllowedAction
的默认值为REPLACE
。
最少操作:使用此选项可尽可能减少中断,或应用超出必要中断次数的操作。
- 如需尽可能避免中断,请将最少操作设置为
NONE
。如果您的更新需要中断次数更多的操作,Compute Engine 将执行必要的操作来执行更新。 - 如需应用比严格需要更多的中断操作,请将最少操作设置为
RESTART
或REPLACE
。例如,Compute Engine 不需要重启虚拟机即可更改其元数据。但是,如果您的应用仅在虚拟机重启时读取实例元数据,您可以将最少操作设置为RESTART
,以选择元数据更改。
- 如需尽可能避免中断,请将最少操作设置为
允许的最具中断性的操作:使用此选项可在中断次数超出承受范围时阻止更新。如果您的更新需要执行中断程度高于此标志设置的操作,则更新请求将失败。例如,如果您将允许的最具中断性的操作设置为
RESTART
,则更新启动磁盘映像的尝试将失败,因为该更新需要重新创建实例,此操作比重启更具中断性。- 默认最少操作是
NONE
,它用于尽可能限制中断。 - 允许的最具中断性的操作默认为
REPLACE
。如果您无法承受此类中断,请将允许的最具中断性操作设置为较少的中断次数。 - 了解如何查看 MIG 和代管式虚拟机的相关信息。
- 了解如何创建实例模板。
- 了解如何使用映像系列和滚动替换来更新 MIG 中所有虚拟机上的操作系统映像。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
将更新后的配置应用于选定的虚拟机
确保将组的更新政策类型设置为“寻机”,以防止 MIG 自动将新的虚拟机配置应用到现有虚拟机。如需了解详情,请参阅检查组的更新政策类型。
然后,使用 gcloud CLI 或 REST 更新 MIG 的配置,并将最新配置应用于组中的特定虚拟机或组中的所有虚拟机。
gcloud
如需为组设置新的实例模板,您可以使用
set-instance-template
命令。gcloud compute instance-groups managed set-instance-template INSTANCE_GROUP_NAME \ --template=INSTANCE_TEMPLATE
将配置应用于特定虚拟机
如需将更新后的配置应用于特定虚拟机,请使用带有
--instances
标志的update-instances
命令。gcloud compute instance-groups managed update-instances INSTANCE_GROUP_NAME \ --instances INSTANCE_NAMES \ --most-disruptive-allowed-action DISRUPTION_LEVEL \ --minimal-action DISRUPTION_LEVEL
将配置应用于所有虚拟机
如需将更新后的配置应用于所有虚拟机,请使用带有
--all-instances
标志的update-instances
命令。gcloud compute instance-groups managed update-instances INSTANCE_GROUP_NAME \ --all-instances \ --most-disruptive-allowed-action DISRUPTION_LEVEL \ --minimal-action DISRUPTION_LEVEL
请替换以下内容:
REST
如需为组设置新的实例模板,请对可用区级或区域级的 MIG 调用
patch
方法并更新versions.instanceTemplate
字段。为避免将新模板自动发布到组中的所有虚拟机,请将updatePolicy.type
字段设置为OPPORTUNISTIC
。PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME { "updatePolicy": { "type": "OPPORTUNISTIC" }, "versions": [{ "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE", }] }
将配置应用于特定虚拟机
如需将更新后的配置应用于特定虚拟机,请为可用区级或区域级的 MIG 调用
applyUpdatesToInstances
方法并在请求中指定虚拟机列表。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/applyUpdatesToInstances { "instances": [ "zones/ZONE/instances/INSTANCE_NAME_1", "zones/ZONE/instances/INSTANCE_NAME_2" ], "minimalAction": DISRUPTION_LEVEL, "mostDisruptiveAllowedAction": DISRUPTION_LEVEL }
将配置应用于所有虚拟机
如需将更新后的配置应用于所有现有虚拟机,请将
allInstances
字段设置为true
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/applyUpdatesToInstances { "allInstances": true, "minimalAction": DISRUPTION_LEVEL, "mostDisruptiveAllowedAction": DISRUPTION_LEVEL }
请替换以下内容:
与其他托管式实例组方法类似,
applyUpdatesToInstances
也是基于意图,这意味着该方法会返回操作响应。操作可能需要一些时间才能完成。发出请求后,您可以检查状态以验证更新是否已完成。
在选择性更新期间控制中断级别
根据更新的具体性质,它可能造成实例状态中断。例如,如果要更改某实例的启动磁盘,则必须替换该实例。选择性更新期间,您可以通过设置以下选项来控制中断级别:
更新选定的虚拟机时,这两个选项接受以下值:
值 说明 可更新哪些实例属性? NONE
完全不中断实例。 无 REFRESH
不停止实例。 其他磁盘、实例元数据、标签、标记 RESTART
停止实例并重启。 其他磁盘、实例元数据、标签、标记、机器类型 REPLACE
删除实例并重新创建。 存储在实例模板或实例配置中的所有实例属性 对于系统允许的最具中断性的操作,其造成的中断性不能比最低要求的操作更低。
当您有选择地更新虚拟机时,系统将应用以下默认值:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-18。
-