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


本文档介绍了如何选择性地将配置更新应用于代管式实例组 (MIG) 中的虚拟机 (VM) 实例。

Compute Engine 会根据您使用的配置组件(实例模板、可选的所有实例配置和可选的有状态配置)来维护 MIG 中的虚拟机。

每当您通过更改这些组件来更新 MIG 的虚拟机配置时,Compute Engine 都会自动将更新后的配置应用于添加到组中的新虚拟机。

如需将更新后的配置应用于现有虚拟机,您可以设置选择性更新(也称为“寻机”更新类型)。此类更新具有以下优势:

  • 您可以选择要更新的虚拟机。
  • 您可以控制更新的时间和顺序。
  • 您可以使用 gcloud CLI 或 REST 立即更新所有虚拟机。

或者,如果您想要将新配置自动发布到 MIG 中的所有虚拟机或随机的一部分虚拟机,请参阅在 MIG 中自动应用虚拟机配置更新。 为帮助您作出决定,请参阅将新配置应用于现有虚拟机的方法

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

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

      gcloud init
    2. 设置默认区域和可用区

    REST

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

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

      gcloud init

将更新后的配置应用于选定的虚拟机

确保将组的更新政策类型设置为“寻机”,以防止 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。如果您无法承受此类中断,请将允许的最具中断性操作设置为较少的中断次数。

后续步骤