模拟主机维护事件


本页介绍了如何测试 Compute Engine 实例的主机维护政策对应用的影响。

您可以在虚拟机上模拟维护事件,以测试以下内容:

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

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

准备工作

  • 查看 SimulateMaintenanceEventRequestsPerMinutePerProjectPerRegion区域 API 速率限制
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

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

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

限制

  • 如需正确模拟单租户节点组上主机维护政策设置为在节点组内迁移的维护事件,您需要在每个节点上按顺序触发维护事件。
  • 对于单租户节点组,如果您尝试模拟主机维护事件,并且节点组的主机维护政策设置为在节点组内迁移,则:
    • 如果指定的节点数小于或等于预留的隔离节点总数,则主机维护事件模拟会同时针对所有指定节点运行。
    • 如果指定的节点数大于预留隔离节点总数,则模拟将失败。
  • 您每分钟可在每个区域启动的维护事件模拟次数受 simulate_maintenance_event_requests_per_region 指标的 API 速率限制所限。

模拟主机维护事件以测试实时迁移

您可以使用 Google Cloud CLI 或 API 请求来模拟计算实例的维护事件。此模拟事件包含常规维护事件中发生的各种维护活动。这样,您就可以观察端到端流程,并测试您可能已实现的任何自动化操作。

在使用实时迁移的实例的主机维护事件模拟期间,实例的 maintenance-event 元数据键会发生以下变化:

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

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

gcloud

使用 compute instances simulate-maintenance-event 命令为实例模拟维护事件,并测试其配置的主机维护政策设置:

gcloud compute instances simulate-maintenance-event INSTANCE_NAME \
    --zone=ZONE --with-extended-notifications=True

替换以下内容:

  • INSTANCE_NAME:您要在其中模拟维护事件的计算实例的名称。

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

  • ZONE:实例所在的区域。

REST

构建对 compute.instances.simulateMaintenanceEvent 方法POST 请求:

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

替换以下内容:

  • PROJECT_ID:此请求的项目 ID。
  • INSTANCE_NAME:您要为其模拟维护事件的实例的名称。
  • ZONE:实例所在的区域。

针对终止的计算实例模拟主机维护

您可以使用 Google Cloud CLI 或 API 请求来模拟计算实例的维护事件。此模拟事件包含常规维护事件中发生的各种维护活动。这样,您就可以观察端到端流程,并测试您可能已实现的任何自动化操作。

此外,通过将参数 --with-extended-notifications受支持的机器类型搭配使用,您可以测试在模拟事件期间手动启动主机维护。

gcloud

  1. 使用 compute instances simulate-maintenance-event 命令为实例模拟维护事件,并测试其配置的主机维护政策设置。您可以选择性添加 --with-extended-notifications 标志。

    gcloud compute instances simulate-maintenance-event INSTANCE_NAME \
       --zone=ZONE --with-extended-notifications=True
    

    替换以下内容:

    • INSTANCE_NAME:您要在其中模拟维护事件的计算实例的名称。

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

    • ZONE:实例所在的区域。

  2. 可选:如需手动启动模拟的维护事件,请使用 compute instances perform-maintenance 命令

    gcloud compute instances perform-maintenance INSTANCE_NAME \
       --zone=ZONE
    

    替换以下内容:

    • INSTANCE_NAME:您要在其中模拟维护事件的计算实例的名称。

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

    • ZONE:实例所在的可用区。

REST

  1. 构建对 compute.instances.simulateMaintenanceEvent 方法POST 请求。您可以选择性添加查询参数 withExtendedNotifications

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/simulateMaintenanceEvent?withExtendedNotifications=True
    

    替换以下内容:

    • PROJECT_ID:此请求的项目 ID。
    • INSTANCE_NAME:您要为其模拟维护事件的实例的名称。
    • ZONE:实例所在的区域。
  2. 可选:如需手动启动模拟的维护事件,请构建对 compute.instances.performMaintenance 方法POST 请求。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/performMaintenance
    

    替换以下内容:

    • INSTANCE_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.nodeGroups.simulateMaintenanceEvent 方法POST 请求:

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"

后续步骤