跨 H4D 虚拟机管理主机事件

本文档介绍了如何使用 H4D 虚拟机提供的主机维护功能。还介绍了如何对虚拟机 (VM) 实例监控、规划和执行预定维护。 如需管理对预留容量块的维护(无论虚拟机是否在这些容量块上运行),请改为参阅跨预留管理主机事件

主动管理虚拟机上即将发生的维护主机事件,您可以最大限度地减少中断并保持最佳性能。

准备工作

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

Console

When you use the Cloud de Confiance console to access Cloud de Confiance by S3NS services and APIs, you don't need to set up authentication.

gcloud

安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:

gcloud init

REST

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

    安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:

    gcloud init

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

所需的角色

如需获得跨虚拟机管理主机维护事件所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 针对项目的 Compute Admin (roles/compute.admin)
  • 拥有对系统事件审核日志的只读权限:针对项目的 Logs Viewer (roles/logging.viewer)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色可提供跨虚拟机管理主机维护事件所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

跨虚拟机管理主机维护事件需要以下权限:

  • 查看虚拟机的详细信息:针对项目的 compute.instances.get 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

概览

如需优化虚拟机的维护,请完成以下步骤:

  1. 了解主机维护。了解虚拟机的频率和维护行为(具体取决于其机器系列)。此信息有助于您最大限度减少对工作负载的中断。

  2. 设置通知提醒。创建基于日志的提醒,以便在安排、启动或完成虚拟机维护时收到通知。这种方法有助于您主动规划活动,避免意外停机。

  3. 跨虚拟机管理维护。查看是否已为虚拟机安排维护。如有需要,您可以跨虚拟机手动启动维护。此流程有助于您提高工作负载对主机事件的应对能力,防止停机,并最大限度地提高应用的可用性。

了解主机维护

Compute Engine 实例的生命周期内,运行实例的宿主机会经历多个主机事件。 主机事件可能包括 Compute Engine 基础设施的定期维护,或在极少数情况下出现主机错误。Compute Engine 还会在后台为 Hypervisor 和网络应用一些轻量级升级,而不会发生中断。

H4D 机器系列提供以下与主机维护相关的功能:

机器类型 典型的预定维护事件频率 维护行为 高级通知 按需维护 模拟维护
h4d-standard-192 最短 30 天 终止 7 天
h4d-highmem-192 最短 30 天 终止 7 天
h4d-highmem-192-lssd 最短 30 天 终止并具有本地 SSD 数据持久性 7 天

上表中所示的维护频率为近似值,并不保证准确。 Compute Engine 有时可能更频繁地执行维护。

为虚拟机设置通知提醒

您可以创建基于日志的提醒政策,以便在为虚拟机安排、启动或完成维护事件时收到通知。

如需为虚拟机的维护事件创建提醒,请完成以下步骤。针对要创建的每个提醒重复此过程。

  1. 在 Cloud de Confiance 控制台中,转到 Logs Explorer 页面:

    前往 Logs Explorer

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 点击显示查询切换开关以切换到开启位置。

  3. 查询窗格中,构建以下查询之一。这些查询会过滤日志条目,以识别特定的维护事件。如果您想使用多个查询,请重复此过程,为每个查询创建唯一的提醒。

    • 如需在安排虚拟机维护时收到提醒,请构建以下查询:

      protoPayload.methodName="compute.instances.upcomingMaintenance" severity>=DEFAULT
      protoPayload.status.message =~ "scheduled"
      
    • 如需在虚拟机的维护窗口开启时收到提醒,请构建以下查询:

      protoPayload.methodName="compute.instances.upcomingMaintenance" severity>=DEFAULT
      protoPayload.status.message =~ "ongoing"
      
    • 如需在虚拟机维护启动时收到提醒,请构建以下查询:

      protoPayload.methodName="compute.instance.terminateOnHostMaintenance" severity>=DEFAULT
      
    • 如需在虚拟机维护完成时收到提醒,请构建以下查询:

      protoPayload.methodName="compute.instances.upcomingMaintenance" severity>=DEFAULT
      protoPayload.status.message =~ "completed"
      
  4. 如需验证查询,请点击运行查询。如果查询有效,则查询结果窗格会显示与查询匹配的日志条目。

  5. 查询结果工具栏中,点击操作列表,然后选择 创建日志提醒。 系统会显示创建基于日志的提醒政策窗格。

  6. 提醒详情部分中,执行以下操作:

    1. 提醒政策名称字段中,输入政策的名称。

    2. 政策严重级别列表中,选择警告(或更高的严重级别)。

    3. 点击下一步

  7. 选择要包含在提醒中的日志部分中,点击下一步

  8. 设置通知频率和自动关闭时长部分中,指定以下内容:

    1. 通知间隔时间列表中,选择您希望接收通知的频率。

    2. 突发事件自动关闭时长列表中,选择 Cloud Logging 在多久后停止发送通知并自动关闭突发事件。

    3. 点击下一步

  9. 应通知的人员部分中,为 Logging 指定通知渠道,以便向其发送通知。

  10. 点击保存

如需在 Logs Explorer 中查看维护事件通知示例,请参阅 Compute Engine 文档中的维护通知示例

跨虚拟机管理维护

您可以通过执行以下一项或多项操作来查看和控制虚拟机的维护:

查看虚拟机的维护状态

您可以通过检查实例元数据中 upcomingMaintenance 字段的值,查看虚拟机即将进行的维护的状态和预定时间。如果虚拟机不包含 upcomingMaintenance 字段,则系统不会为该虚拟机安排任何主机维护事件。如需详细了解 upcomingMaintenance 中的字段,请参阅 Compute Engine 文档中的维护状态定义

此外,如果已为虚拟机安排维护,则 upcomingGroupMaintenance 字段会包含 maintenanceReasons 字段。此字段用于说明为虚拟机安排维护的原因,如下表所述:

维护类型 维护原因 虚拟机状态
计划内维护(常规维护)
  • PLANNED_UPDATE:计划内基础设施维护
  • PLANNED_NETWORK_UPDATE:计划内网络维护
适用于正在运行、已停止或已暂停的虚拟机。
计划外紧急维护
  • FAILURE_DISK:因挂接到虚拟机的磁盘出现错误而安排的计划外维护。
  • FAILURE_INFRA:因基础设施出现错误而安排的计划外维护。
  • FAILURE_INTERFACE:因 NIC 出现错误而安排的计划外维护。
  • FAILURE_MEMORY:因虚拟机的内存出现错误而安排的计划外维护。
  • FAILURE_NETWORK:因网络出现错误而安排的计划外维护。
仅适用于正在运行的虚拟机。

如需查看虚拟机中的 maintenanceReasons 字段,您必须使用 gcloud CLI 或 REST API。如需同时查看多个虚拟机的维护状态,您必须使用 Cloud de Confiance 控制台或 REST API。否则,请选择以下选项之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 维护状态列中,Compute Engine 会显示虚拟机的维护状态。如果您在虚拟机实例表中没有看到此列,请点击 view_column 列显示选项,选中维护状态复选框,然后点击确定

gcloud

如需查看虚拟机的维护状态,请将 gcloud compute instances describe 命令--flatten=resourceStatus.upcomingMaintenance 标志结合使用:

gcloud compute instances describe VM_NAME \
    --flatten=resourceStatus.upcomingMaintenance \
    --zone=ZONE

替换以下内容:

  • VM_NAME:虚拟机名称。

  • ZONE:虚拟机所在的可用区。

输出类似于以下内容之一:

  • 如果为虚拟机安排了主机维护事件,则输出类似于以下内容:

    ---
    canReschedule: true
    latestWindowStartTime: '2025-11-01T19:00:00Z'
    maintenanceReasons:
    - 'PLANNED_UPDATE'
    - 'PLANNED_NETWORK_UPDATE'
    maintenanceStatus: 'PENDING'
    type: 'SCHEDULED'
    windowEndTime: '2025-11-01T22:00:00Z'
    windowStartTime: '2025-11-01T19:00:00Z'
    
  • 如果没有为虚拟机安排主机维护事件,则输出类似于以下内容:

    ---
    null
    

REST

如需查看虚拟机的维护状态,请发出以下 GET 请求之一。发出请求时,您必须添加 fields 查询参数,以便仅显示虚拟机的名称、机器类型和即将进行的维护。您还必须添加 filter 查询参数,以便仅按特定机器类型过滤虚拟机。

  • 如需查看所有可用区中的虚拟机,请使用 instances.aggregatedList 方法

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/instances?fields=items.name,items.machineType,items.upcomingMaintenance&filter=machineType%3AMACHINE_TYPE
    
  • 如需查看特定可用区中的虚拟机,请使用 instances.list 方法

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances?fields=items.name,items.machineType,items.upcomingMaintenance&filter=machineType%3AMACHINE_TYPE
    

替换以下内容:

  • PROJECT_ID:您在其中创建虚拟机的项目的 ID。

  • ZONE:虚拟机所在的可用区。

  • MACHINE_TYPE:您要用于过滤虚拟机的机器类型。

如果为虚拟机安排了主机维护事件,则该虚拟机会包含 upcomingMaintenance 字段:

{
  "items": [
    {
      "name": "vm-01",
      "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/europe-west4-b/machineTypes/h4d-highmem-192-lssd",
      "resourceStatus": {
        "upcomingMaintenance": {
          "canReschedule": true,
          "latestWindowStartTime": "2024-11-01T19:00:00Z",
          "maintenanceStatus": "PENDING",
          "maintenanceReasons": [
            "PLANNED_UPDATE",
            "PLANNED_NETWORK_UPDATE"
          ],
          "type": "SCHEDULED",
          "windowEndTime": "2024-11-01T22:00:00Z",
          "windowStartTime": "2024-11-01T19:00:00Z"
        }
      }
    },
    ...
  ]
}

(可选)如需进一步缩小虚拟机列表的范围,请将 filter 查询参数设置为其他过滤条件表达式

元数据服务器

如需查看虚拟机的维护状态,请执行以下操作:

  1. 连接到 LinuxWindows 虚拟机(如果您尚未这样做)。

  2. 按如下所述查询元数据服务器:

    curl http://metadata.google.internal/computeMetadata/v1/instance/upcoming-maintenance?alt=json -H "Metadata-Flavor: Google"
    

    如果为虚拟机安排了主机维护事件,则输出类似于以下内容:

    "Upcoming maintenance": {
      "can_reschedule": "true",
      "latest_window_start_time": "2024-12-01T19:00:01Z",
      "maintenance_reasons": [
        "PLANNED_UPDATE",
        "PLANNED_NETWORK_UPDATE"
      ],
      "maintenance_status": "PENDING",
      "type": "SCHEDULED",
      "window_end_time": "2024-12-01T21:00:01Z",
      "window_start_time": "2024-12-01T19:00:01Z"
    }
    

    如果未安排主机维护事件,则输出类似于以下内容:

    { }
    

对虚拟机手动启动维护

您可以对虚拟机手动启动维护,而不是等待预定时间。

根据虚拟机的维护状态,会发生以下情况:

维护状态 说明 看到的内容
已安排 Compute Engine 已为虚拟机安排维护。您可以在预定时间之前手动启动维护。
  • 在 Cloud de Confiance 控制台中,维护状态显示为已可以运行 - 将于 DATE 运行
  • 在 gcloud CLI 或 REST API 中,Compute Engine 会将 maintenanceStatus 字段设置为 PENDING
进行中 维护正在进行中。您无法重新安排。
  • 在 Cloud de Confiance 控制台中,维护状态显示为正在运行
  • 在 gcloud CLI 或 REST API 中,Compute Engine 会将 maintenanceStatus 字段设置为 ONGOING
已完成 维护已完成。Compute Engine 已从虚拟机中移除所有维护通知。
  • 在 Cloud de Confiance 控制台中,维护状态显示为最新
  • 在 gcloud CLI 或 REST API 中,Compute Engine 会将 maintenanceStatus 字段设置为 COMPLETE

您可以同时为多个虚拟机或为单个虚拟机手动启动维护。对于多个虚拟机,请使用 Cloud de Confiance 控制台;对于位于同一可用区中的虚拟机,请使用 gcloud CLI。对于单个虚拟机,请选择以下任一选项:

控制台

  1. 在 Cloud de Confiance 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 选择要启动维护的虚拟机所在的行。

  3. 点击 运行维护

  4. 点击运行维护进行确认。

gcloud

如需手动为同一可用区中的一个或多个虚拟机启动维护,请使用 gcloud compute instances perform-maintenance 命令

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

替换以下内容:

  • VM_NAMES:以空格分隔的虚拟机名称列表,例如 vm-01 vm-02 vm-03

  • ZONE:虚拟机所在的可用区。

REST

如需对虚拟机手动启动维护,请向 instances.performMaintenance 方法发出 POST 请求:

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

替换以下内容:

  • PROJECT_ID:您在其中创建虚拟机的项目的 ID。

  • ZONE:虚拟机所在的可用区。

  • VM_NAME:虚拟机名称。