本页面介绍如何配置代管式实例组 (MIG) 中的虚拟机实例,以及可以使用哪些方法将配置应用于组中的现有虚拟机。
您可以使用以下虚拟机配置组件为 MIG 中的虚拟机指定预期配置:
- 必需:实例模板
- 可选:所有实例配置
- 可选:有状态配置
每次使用这些组件更新预期配置时,Compute Engine 都会自动将更新后的配置应用于添加到组中的新虚拟机。
如需将更新后的配置应用于现有虚拟机,请使用本页面中介绍的方法:
- 自动发布(指定中断预算)并选择性地对新模板执行 Canary 更新
- 仅选择性地手动更新特定虚拟机,最大限度地减少中断
- 重新创建特定虚拟机
您还可以将 MIG 配置为在虚拟机修复期间将最新的可用配置应用于虚拟机。如需了解详情,请参阅在修复期间应用配置更新。
如果您只需要调整 MIG 的大小,请参阅文档以了解如何添加或移除 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.
- 自动(主动):如果您希望 MIG 自动将新配置应用于组中的所有或部分现有虚拟机,请使用此方法。正在运行的虚拟机的中断级别取决于您配置的更新政策。您可以使用此方法对新的实例模板执行 Canary 更新。如需使用此方法,请将 MIG 的更新类型设置为“主动”。
- 选择性(寻机):如果您想手动应用更新或想要一次性更新组中的所有现有虚拟机,请使用此方法。定位到要更新为最新配置的任意或所有虚拟机。如需使用此方法,请将 MIG 的更新类型设置为“寻机”。
- 重新创建虚拟机:通过重新创建特定虚拟机来应用新配置。
- 自动根据您的要求发布更新,用户在发出初始请求后无需再进行额外输入。您可以指定部署速度、服务中断级别和更新范围。
- 您可以执行部分发布来进行 Canary 测试。
- 您可以选择要更新的虚拟机。
- 您可以控制更新的时间和顺序。
- 您可以使用 gcloud CLI 或 REST 立即更新所有实例。
MIG 中的一个虚拟机发生故障,需要修复,但您不希望其配置发生更改。如果将 MIG 的更新类型设置为寻机更新,并且您没有在修复期间强制应用更新,则 Compute Engine 会使用在创建虚拟机时所用的配置修复该虚拟机,即使原始实例模板已不存在也是如此。
您有一个自动扩缩的 MIG,并且您希望在没有任何紧急情况下,应用非关键更新。为确保 Compute Engine 不会删除现有的虚拟机以应用更新,请将 MIG 的更新类型设置为寻机更新。 横向缩容时,自动扩缩器会优先终止具有旧配置的虚拟机。横向扩容时,组会使用最新配置创建虚拟机。
在 Google Cloud 控制台中,转到实例组页面。
选择要更新的 MIG。
在页面顶部,点击更新虚拟机。
如需为实例组设置不同的模板,请在新建模板下选择要使用的实例模板。
在更新配置下,选择自动更新或选择性更新。
INSTANCE_GROUP_NAME
:组的名称NEW_TEMPLATE
:该组的新模板的名称TYPE
:更新类型(opportunistic
或proactive
)PROJECT_ID
:该 MIG 所在的项目。REGION
:MIG 所在的区域。对于可用区级 MIG,请将regions/REGION
替换为zones/ZONE
。INSTANCE_GROUP_NAME
:组的名称。NEW_TEMPLATE
:该组的新模板的名称。TYPE
:更新类型(OPPORTUNISTIC
或PROACTIVE
)。- 正在运行、已暂停和已停止的虚拟机
- 状态为
SUSPENDING
或STOPPING
的虚拟机 - 删除已暂停和已停止的虚拟机。
- 使用新的实例模板创建新的虚拟机。
- 执行初始化流程。
- 暂停或停止虚拟机。
- 恢复或启动虚拟机。
- 在虚拟机运行时对其执行更新。
- 执行初始化流程。
- 暂停或停止虚拟机。
- 在
manual
待机政策模式下,MIG 仅根据您要应用更新的虚拟机数量或百分比更新运行中的虚拟机。已暂停和已停止的虚拟机仍会保留为先前版本。 - 在
scale-out-pool
备用政策模式下,您无法在 MIG 中启动 Canary 版更新。 您将这两个字段设置为相同值。
这是有效的请求。在这种情况下不会产生歧义,新的实例模板会应用于 MIG。
例如,在以下请求中,顶级
instanceTemplate
和versions
字段会指定与当前现有模板不同的同一实例模板,因此系统将根据新的实例模板更新 MIG:{ "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE", "versions": [ { "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE" } ], "updatePolicy": { "type": "PROACTIVE" } }
您将这两个字段设置为不同的值,但其中只有一个值与 MIG 中的当前实例模板不同。
这是有效的请求。系统会将与当前设置不同的字段视为预期值。例如,您可以调用
update()
方法并提供两个字段,但只有一个字段会更新:{ "instanceTemplate": "global/instanceTemplates/CURRENT_TEMPLATE", "versions": [ { "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE" } ], "updatePolicy": { "type": "PROACTIVE" } }
您将这两个字段设置为不同的值,且这两个值都与 MIG 中的当前实例模板不同。
此设置无效并且将返回错误,因为意图不明确。
{ "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE", "versions": [ { "instanceTemplate": "global/instanceTemplates/A_DIFFERENT_NEW_TEMPLATE" } ], "updatePolicy": { "type": "PROACTIVE" } }
- 详细了解如何自动将新实例模板发布到 MIG。
- 详细了解如何选择性更新 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 中虚拟机的配置组件
您可以通过以下组件配置 MIG 中的虚拟机:
组件 属性 使用场景 实例模板 机器类型、启动磁盘映像、标签、启动脚本和其他虚拟机属性 必需:使用实例模板为组中的所有虚拟机定义必需和可选实例属性。
可选:如果要对第二个虚拟机配置进行 Canary 测试,您可以向组添加第二个实例模板,并将其应用于组中的部分虚拟机组。所有实例配置 标签和元数据 可选:使用所有实例配置可快速替换组中所有虚拟机的实例模板属性。 有状态配置 有状态磁盘、IP 地址和元数据 可选:如果您需要支持有状态工作负载,请将有状态配置添加到组中的虚拟机。 如果您通过这些组件更新组的任何配置,则必须将更新后的配置应用于组中的现有虚拟机,才能使更新后的配置生效。
将新配置应用于现有虚拟机的方法
更新 MIG 的虚拟机配置后,您可以使用以下方法将新配置应用于组中的现有虚拟机:
如需详细了解如何设置 MIG 的更新类型,请参阅设置主动更新或寻机更新。
自动(主动)
自动更新类型也称为“主动”更新类型。将 MIG 的更新类型设置为主动时,MIG 会根据需要自动将更新后的配置应用于虚拟机。
将 MIG 的更新类型设置为“主动”有两个主要优势:
如需了解如何设置 MIG 的更新类型,请参阅设置主动更新或寻机更新。
如需详细了解自动发布,请参阅在 MIG 中自动应用虚拟机配置更新。
选择性(寻机)
选择性更新类型也称为“寻机”更新类型。将 MIG 的更新类型设置为寻机更新时,只有当您选择性地定位到要更新的特定虚拟机时,MIG 才会对新虚拟机应用新配置。
将 MIG 的更新类型设置为“寻机”具有以下优势:
在某些情况下,选择性更新类型非常有用,因为如果能避免,您肯定不希望导致系统不稳定。例如,应该考虑以下事项:
如需了解如何设置 MIG 的更新类型,请参阅设置主动更新或寻机更新。
如需详细了解如何选择性更新虚拟机,请参阅选择性地在 MIG 中应用虚拟机配置更新。
重新创建虚拟机
您可以在 MIG 中重新创建任何虚拟机。执行此操作时,MIG 会应用尚未应用于该虚拟机的所有已更新配置。如需了解详情,请参阅在 MIG 中重新创建虚拟机。
设置主动更新或寻机更新
如需自动将新配置应用到现有虚拟机,请将 MIG 的更新类型设置为“主动”。如需仅在选择要更新的虚拟机时对现有虚拟机应用新配置,请将 MIG 的更新类型设置为“寻机”。
使用 Google Cloud 控制台、Google Cloud CLI 或 REST。
控制台
gcloud
使用
rolling-action start-update
命令并将--type
标志设置为opportunistic
或proactive
。gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \ --version=template=NEW_TEMPLATE \ --type=TYPE
还可以使用 Beta 版
update
命令并添加--update-policy-type
标志。gcloud beta compute instance-groups managed update INSTANCE_GROUP_NAME \ --update-policy-type=TYPE
请替换以下内容:
REST
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME { "updatePolicy": { "type": "TYPE" # Choose an opportunistic or proactive update }, "versions": [{ "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE", }] }
请替换以下内容:
如需详细了解如何设置新模板然后将该模板应用于 MIG 中的新虚拟机和现有虚拟机,请参阅以下页面:
检查组的更新政策类型
您可以使用 gcloud CLI 或 REST 查看当前配置的 MIG 更新政策类型(“寻机”或“主动”)和其他更新政策设置。
gcloud
使用
describe
命令并添加--format
标志以仅列出updatePolicy
设置。gcloud beta compute instance-groups managed describe INSTANCE_GROUP_NAME \ --format="(updatePolicy)"
REST
对可用区级或区域级 MIG 发出
GET
请求并检查updatePolicy
字段。GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME
如需更改政策类型,请参阅设置主动更新或寻机更新。
已暂停和已停止的虚拟机的更新
如果您在 MIG 中暂停和停止了虚拟机池,则可以像更新其他正在运行的虚拟机一样,选择性(机会性)更新已暂停或已停止的虚拟机。如果您配置了自动(主动)更新,MIG 会按以下顺序更新虚拟机:
对于自动更新,MIG 仅根据正在运行的虚拟机目标数量计算超额配置数量上限和不可用数量上限,并且不会考虑备用池中的虚拟机。
如果自动更新需要替换实例组中的虚拟机,则 MIG 会执行以下操作:
如果自动更新仅需要刷新或重启组中的虚拟机,则 MIG 会执行以下操作:
Canary 版更新
如果您要在具有已暂停或已停止虚拟机的 MIG 中启动 Canary 版更新,则需遵守以下规则:
versions
和instanceTemplate
字段之间的关系如果您使用 REST,我们建议您使用
instanceGroupManagers.versions
和regionInstanceGroupManagers.versions
字段来为可用区级和区域级 MIG 配置实例模板。旧版
instanceTemplate
字段在功能上与versions
字段有所重叠,因为这两个字段都可让您指定 MIG 用于创建虚拟机的实例模板。但是,只有versions
字段可让您指定高级双模板 (Canary) 配置。为了实现向后兼容性,MIG 会继续支持设置顶级
instanceTemplate
字段,但我们建议您只使用versions
字段。同时使用顶级instanceTemplate
字段和versions
字段可能会导致歧义和混淆。如果您在调用
update()
或patch()
方法时同时指定instanceTemplate
字段和versions
字段,则可能会出现以下三种结果:versions
字段、instanceTemplate
字段和get()
方法如果您仅指定一个实例模板,无论是通过顶级
instanceTemplate
字段、versions
字段还是通过两者,则get()
方法都会在其响应中返回这两个字段。这可使新的versions
字段向后兼容。只要您在这两个字段的任何一个中指定一个实例模板,get()
方法在instanceTemplate
字段中返回的内容就不会改变。如果您在
versions
字段中指定了两个实例模板,则get()
方法将返回空的顶级instanceTemplate
字段。目前无法在顶级instanceTemplate
字段中明确表示双实例模板 (Canary) 配置,因此在 Canary 更新期间不使用该字段。versions
字段和setInstanceTemplate()
方法为了向后兼容,
setInstanceTemplate()
方法的行为会保持不变,让您能够更改 MIG 用于创建虚拟机的模板。在您调用此方法时,系统将使用setInstanceTemplate()
方法指定的实例模板来替换versions
字段。此外,
setInstanceTemplate()
方法还会将updatePolicy
设置为OPPORTUNISTIC
。这样可防止 MIG 主动部署versions
字段中未明确指定的实例模板。后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-11-22。
-