模拟主机维护事件


本页面介绍如何测试虚拟机 (VM) 实例的主机维护政策对应用的影响。

在以下情况下,您可以模拟虚拟机上的维护事件:

  • 您的虚拟机被配置为在维护期间进行实时迁移,并且您需要测试实时迁移对应用的影响。
  • 您要在抢占式虚拟机实例上运行批处理作业,并且您需要测试应用如何处理一个或多个实例的抢占和关闭。
  • 您的实例被配置为在维护期间停止并重启(而非实时迁移),并且您需要测试应用如何处理此关闭和重启过程。
  • 您希望测试在主机维护事件期间在单租户节点上运行的工作负载的情况,并查看单租户虚拟机的主机维护政策对虚拟机上运行的应用的效果。

准备工作

  • 查看 simulate_maintenance_event_requests 指标的 API 速率限制
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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 时进行身份验证

限制

  • 如果您尝试在不支持实时迁移的虚拟机上模拟主机维护事件,则虚拟机会被终止或重新启动,具体取决于所配置的主机维护政策

  • 尝试模拟节点组上主机维护政策设置为在节点组内迁移的主机维护事件时,如果指定的节点数小于或等于预留的隔离节点总数,则会同时为所有指定节点运行主机维护事件模拟。相反,如果指定的节点数大于预留隔离节点总数,则模拟将失败。

  • 如需正确模拟节点组上主机维护政策设置为在节点组内迁移的维护事件,您需要在每个节点上按顺序触发维护事件。

模拟主机维护事件

您可以使用 Google Cloud CLI 或 API 请求来模拟虚拟机上的维护事件。

在主机维护事件模拟期间,虚拟机的 maintenance-event 元数据键会进行以下更改:

  1. 在模拟开始时,maintenance-event 元数据键的值会从 NONE 更改为 MIGRATE_ON_HOST_MAINTENANCE
  2. 在整个模拟事件的持续时间内,该值保持为 MIGRATE_ON_HOST_MAINTENANCE
  3. 模拟结束后,该值会恢复为 NONE

如需查询维护事件键,请参阅查询维护事件元数据键

gcloud

运行 instances simulate-maintenance-event 命令强制实例激活为其配置的维护政策操作:

gcloud compute instances simulate-maintenance-event VM_NAME \
    --zone ZONE

请替换以下内容:

  • VM_NAME:您要在其中模拟维护事件的虚拟机的名称。

    您可以指定由单一空格分隔的多个虚拟机名称,以模拟同一区域中多个虚拟机上的维护事件。例如 instance-1 instance-2 instance-3

  • ZONE:实例所在的区域。

REST

在 Compute Engine API 中,向 compute.instances.simulateMaintenanceEvent 方法发出请求:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/simulateMaintenanceEvent

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID。
  • VM_NAME:您要在其中模拟维护事件的实例的名称。

    您可以指定由单一空格分隔的多个实例名称,以模拟同一区域中多个实例上的维护事件。例如 instance-1 instance-2 instance-3

  • ZONE:实例所在的区域。

模拟单租户节点上的主机维护事件

您可以使用 Google Cloud CLI 或 API 请求来模拟单租户节点上的主机维护事件。在模拟单租户虚拟机上的主机维护事件期间,maintenance-event 元数据键值对不会更改,并且在模拟过程中保持为 NONE

gcloud

运行 sole-tenancy node-groups simulate-maintenance-event 命令以强制单租户节点激活其配置的维护政策:

 gcloud compute sole-tenancy node-groups simulate-maintenance-event NODE_GROUP \
    --nodes=NODE_NAMES \
    --zone=ZONE \
    --async

请替换以下内容:

  • NODE_GROUP:您要在其中模拟维护事件的节点组的名称。

  • NODE_NAMES:您要在其中模拟维护事件的节点的名称。指定多个节点名称时,请使用以英文逗号分隔的值,例如 node-1,node-2,node-3

  • ZONE:节点所在的可用区。

REST

在 Compute Engine API 中,向 compute.nodeGroups.simulateMaintenanceEvent 方法发出请求:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/nodeGroups/NODE_GROUP/simulateMaintenanceEvent

{
  "nodes": [NODE_NAMES]
}

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID。

  • ZONE:节点所在的可用区。

  • NODE_GROUP:您要在其中模拟维护事件的节点组的名称。

  • NODE_NAMES:您要在其中模拟维护事件的节点的名称。将节点名称括在英文双引号中,例如 "node-1"。此外,在指定多个节点名称时,请使用以逗号分隔的值,例如 "node-1","node-2","node-3"

后续步骤