选择性地在 MIG 中应用虚拟机配置更新


本文档介绍了如何选择性地将配置更新应用于代管式实例组 (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

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

        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

请替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称
  • INSTANCE_TEMPLATE:新实例模板
  • INSTANCE_NAMES:要应用模板的虚拟机列表
  • DISRUPTION_LEVEL:最低或最高中断级别nonerefreshrestartreplace
    • 最少操作默认为 none
    • 允许的最具中断性的操作默认为 replace

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
}

请替换以下内容:

  • INSTANCE_GROUP_NAME:组的名称
  • NEW_TEMPLATE:新模板的名称
  • ZONE:要更新的实例所在的地区。
  • INSTANCE_NAME_1INSTANCE_NAME_2:要更新的虚拟机的名称
  • DISRUPTION_LEVEL:最低或最高中断级别NONEREFRESHRESTARTREPLACE
    • minimalAction 的默认值为 NONE
    • mostDisruptiveAllowedAction 的默认值为 REPLACE

与其他托管实例组方法类似,applyUpdatesToInstances 也是基于意图,这意味着该方法会返回操作响应。操作可能需要一些时间才能完成。

发出请求后,您可以检查状态以验证更新是否已完成。

在选择性更新期间控制中断级别

根据更新的具体性质,它可能造成实例状态中断。例如,如果要更改某实例的启动磁盘,则必须替换该实例。选择性更新期间,您可以通过设置以下选项来控制中断级别:

  • 最少操作:使用此选项可尽可能减少中断,或应用超出必要中断次数的操作。

    • 如需尽可能避免中断,请将最少操作设置为 NONE。如果您的更新需要中断次数更多的操作,Compute Engine 将执行必要的操作来执行更新。
    • 如需应用比严格需要更多的中断操作,请将最少操作设置为 RESTARTREPLACE。例如,Compute Engine 不需要重启虚拟机即可更改其元数据。但是,如果您的应用仅在虚拟机重启时读取实例元数据,您可以将最少操作设置为 RESTART,以选择元数据更改。
  • 允许的最具中断性的操作:使用此选项可在中断次数超出承受范围时阻止更新。如果您的更新需要执行中断程度高于此标志设置的操作,则更新请求将失败。例如,如果您将允许的最具中断性的操作设置为 RESTART,则更新启动磁盘映像的尝试将失败,因为该更新需要重新创建实例,此操作比重启更具中断性。

更新选定的虚拟机时,这两个选项接受以下值:

说明可更新哪些实例属性?
NONE完全不中断实例。
REFRESH不停止实例。其他磁盘、实例元数据、标签、标记
RESTART停止实例并重启。其他磁盘、实例元数据、标签、标记、机器类型
REPLACE删除实例并重新创建。存储在实例模板或实例配置中的所有实例属性

对于系统允许的最具中断性的操作,其造成的中断性不能比最低要求的操作更低。

当您有选择地更新虚拟机时,系统将应用以下默认值:

  • 默认最少操作是 NONE,它用于尽可能限制中断。
  • 允许的最具中断性的操作默认为 REPLACE。如果您无法承受此类中断,请将允许的最具中断性操作设置为较少的中断次数。

后续步骤