跨预留管理主机事件

本文档介绍了如何使用预留容量块提供的宿主机维护功能。本文介绍了如何监控、规划和执行 H4D 实例集群的定期维护。如需改为管理虚拟机 (VM) 实例上的维护,请参阅监控和规划主机维护事件

您可以主动管理预留容量块上即将发生的维护宿主事件,无论虚拟机是否在这些容量块上运行。这种方法有助于最大限度减少中断并保持最佳性能。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 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

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

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

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

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

所需的角色

如需获得管理整个预留过程中的宿主机维护事件所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 针对项目的 Compute Admin (roles/compute.admin)
  • 如需对系统事件审核日志拥有只读权限,请使用以下角色: Logs Viewer (roles/logging.viewer) (针对相应项目)

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

这些预定义角色包含管理预留中的主机维护事件所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需跨预留管理主机维护事件,您需要具备以下权限:

  • 启动预留的主机维护:项目的 compute.reservations.performMaintenance 权限
  • 启动预留块的主机维护:针对项目的 compute.reservationBlocks.performMaintenance 权限

    • 查看预留列表

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

    概览

    如需优化预留容量块的维护,请完成以下步骤:

    1. 设置通知提醒。创建基于日志的提醒,以便在预订或预订块的维护事件已安排、已开始或已完成时收到通知。此方法有助于您主动规划活动,避免意外停机。

    2. 管理各个容量块的维护。查看并根据需要手动启动预留或预留块的维护。此流程有助于您提高工作负载对宿主机错误的弹性,防止停机,并确保应用保持可用状态。

    如需详细了解 H4D 机器类型的维护频率和行为,请参阅 H4D 实例的维护体验

    为预留设置通知提醒

    您可以创建基于日志的提醒政策,以便在预留或预留块的维护事件安排、开始或完成时收到通知。

    如需为预留或预留块的维护事件创建提醒,请完成以下步骤。针对要创建的每项提醒重复此过程。

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

      前往 Logs Explorer

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

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

    3. 查询窗格中,构建以下其中一个查询。这些查询会过滤日志条目,以识别特定的维护事件。针对要创建的每个查询重复此过程。

      • 接收预订的维护提醒

        • 如需在安排维护时收到提醒,请执行以下操作:

          protoPayload.methodName="compute.reservations.upcomingGroupMaintenance" severity>=DEFAULT
          protoPayload.status.message =~ "scheduled"
          
        • 如需在维护完成后接收提醒,请执行以下操作:

          protoPayload.methodName="compute.reservations.completedGroupMaintenance" severity>=DEFAULT
          protoPayload.status.message =~ "completed"
          
      • 接收预留块的维护提醒

        • 如需在安排维护时收到提醒,请执行以下操作:

          protoPayload.methodName="compute.reservations.block.upcomingGroupMaintenance" severity>=DEFAULT
          protoPayload.status.message =~ "scheduled"
          
        • 如需在维护开始时接收提醒,请执行以下操作:

          protoPayload.methodName="compute.reservations.block.startGroupMaintenance" severity>=DEFAULT
          protoPayload.status.message =~ "started"
          
        • 如需在维护完成后接收提醒,请执行以下操作:

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

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

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

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

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

      3. 点击下一步

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

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

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

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

      3. 点击下一步

    9. 应该收到通知的用户部分,为 Logging 指定通知渠道,以便向其发送通知。

    10. 点击保存

    跨预留管理维护

    您可以按如下方式查看和控制预留和预留块的维护:

    • 如需查看预留或预留块即将进行的维护的状态和安排时间,请查看维护状态

    • 如需在预留或预留块上手动启动维护,而不是等待预定的维护日期和时间,请参阅手动启动维护

    • 如需管理在虚拟机的主机因主机错误或主机故障报告而需要紧急、计划外维护时,您希望提前多久收到通知,请管理硬件紧急维护通知

    查看维护状态

    您可以通过检查预留元数据中 upcomingGroupMaintenance 字段的值,查看预留或预留块的即将进行的维护状态。如果预留缺少 upcomingGroupMaintenance 字段,则表示未为相应预留或预留块安排维护。如需详细了解 upcomingGroupMaintenance 中的字段,请参阅维护状态定义

    此外,如果预订块已安排维护,则 upcomingGroupMaintenance 字段会包含 maintenanceReasons 字段。此字段用于说明为何为预留块安排了维护,如下表所示:

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

    如需查看预留块或子块中的 maintenanceReasons 字段,您必须使用 gcloud CLI 或 REST API。否则,请选择以下选项之一:

    控制台

    1. 在 Google Cloud 控制台中,前往预留页面。

      转到“预留”

    2. 维护状态列中,Compute Engine 会显示预留的维护状态。如果您在按需预留表格中没有看到此列,请点击 列显示选项,选中维护状态复选框,然后点击确定

    3. 如需查看预留块的维护状态,请完成以下步骤:

      1. 名称列中,点击预留的名称。系统会显示一个提供相应预留详细信息的页面。

      2. 表格的维护列中,Compute Engine 会显示预留中块的维护状态。

    gcloud

    1. 如需查看预留的维护状态,请使用 gcloud compute reservations describe 命令,并将 --flatten 标志设置为 resourceStatus.reservationMaintenance

      gcloud compute reservations describe RESERVATION_NAME \
          --flatten=resourceStatus.reservationMaintenance \
          --zone=ZONE
      

      替换以下内容:

      • RESERVATION_NAME:预留的名称。

      • ZONE:预留所在的可用区。

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

      • 如果预留已安排维护,则输出类似于以下内容:

        ---
        maintenanceOngoingCount: 0
        maintenancePendingCount: 6
        schedulingType: GROUPED
        upcomingGroupMaintenance:
          canReschedule: true
          maintenanceStatus: PENDING
          type: UNSCHEDULED
          windowEndTime: '2025-11-13T14:00:00.000-08:00'
          windowStartTime: '2025-11-13T12:00:00.000-08:00'
        

        如果 schedulingType 字段设置为 INDEPENDENT,则 upcomingGroupMaintenance 字段不会包含 windowStartTimewindowEndTime 字段。

      • 如果您的预订未安排维护,则输出类似于以下内容:

        ---
        schedulingType: GROUPED
        
    2. 如果您的预留已安排维护,如需查看预留中块的维护状态,请使用 gcloud compute reservations blocks list 命令

      gcloud compute reservations blocks list RESERVATION_NAME \
          --zone=ZONE
      

      如果预留块已安排维护或正在进行维护,则输出类似于以下内容:

      ---
      ...
      name: example-fr-h4d-dense-1-block-0001
      ...
      reservationBlockMaintenance:
        maintenanceOngoingCount: 0
        maintenancePendingCount: 6
        schedulingType: GROUPED
        upcomingGroupMaintenance:
          canReschedule: true
          maintenanceReasons:
          - PLANNED_UPDATE
          - PLANNED_NETWORK_UPDATE
          maintenanceStatus: PENDING
          type: UNSCHEDULED
          windowEndTime: '2025-11-13T14:00:00.000-08:00'
          windowStartTime: '2025-11-13T12:00:00.000-08:00'
      ...
      ---
      ...
      name: example-fr-h4d-dense-1-block-0002
      ...
      schedulingType: GROUPED
      ...
      

    REST

    1. 如需查看预留的维护状态,请向以下方法之一发出 GET 请求:

      在请求网址中,添加以下查询参数:

      • 如需仅显示预留的名称、预留的机器类型和维护状态,请添加设置为 items.name,items.specificReservation.instanceProperties.machineType,items.resourceStatus.reservationMaintenancefields 查询参数。

      • 如需仅按指定特定机器类型的预留进行过滤,请使用网址编码的值添加设置为 specificReservation.instanceProperties.machineType:MACHINE_TYPEfilter 查询参数。

      例如,如需查看所有可用区中的预留,请发出 GET 请求,如下所示:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/reservations?fields=items.name,items.specificReservation.instanceProperties.machineType,items.resourceStatus.reservationMaintenance&filter=specificReservation.instanceProperties.machineType%3AMACHINE_TYPE
      

      替换以下内容:

      • PROJECT_ID:预留所在项目的 ID。

      • MACHINE_TYPE:您要用于过滤预留的预留机器类型。

      如果预留已安排维护或正在进行维护,则输出内容类似于以下内容:

      {
        "items": [
          {
            "specificReservation": {
              "instanceProperties": {
                "machineType": "MACHINE_TYPE"
              }
            },
            "name": "example-reservation",
            "resourceStatus": {
              "reservationMaintenance": {
                maintenanceOngoingCount: 0,
                maintenancePendingCount: 6,
                "schedulingType": "GROUPED",
                "upcomingGroupMaintenance": {
                  "type": "SCHEDULED",
                  "canReschedule": true,
                  "windowStartTime": "2025-11-13T12:00:00.000-08:00",
                  "windowEndTime": "2025-11-13T14:00:00.000-08:00",
                  "maintenanceStatus": "PENDING"
                }
              }
            }
          },
          ...
        ]
      }
      

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

    2. 如果预留已安排维护,那么如需查看预留中块的维护状态,请向 reservationBlocks.list 方法发出 GET 请求。在请求网址中添加 fields 查询参数并设置为 items.name,items.reservationMaintenance

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks?fields=items.name,items.reservationMaintenance
      

      RESERVATION_NAME 替换为预留的名称。

      如果预留块已安排维护或正在进行维护,则输出类似于以下内容:

      {
        "items": [
          {
            "name": "example-fr-h4d-dense-1-block-0001",
            "reservationBlockMaintenance": {
              "maintenanceOngoingCount": 0,
              "maintenancePendingCount": 6,
              "schedulingType": "GROUPED",
              "upcomingGroupMaintenance": {
                "type": "SCHEDULED",
                "canReschedule": true,
                "windowStartTime": "2025-11-13T12:00:00.000-08:00",
                "windowEndTime": "2025-11-13T14:00:00.000-08:00",
                "maintenanceStatus": "PENDING",
                "maintenanceReasons": [
                  "PLANNED_UPDATE",
                  "PLANNED_NETWORK_UPDATE"
                ]
              }
            }
          },
          ...
        ]
      }
      

      如果某个块的 schedulingType 字段设置为 INDEPENDENT,则 upcomingGroupMaintenance 字段不会包含 windowStartTimewindowEndTime 字段。

    手动启动维护

    您可以手动开始预留或预留块的维护,而无需等待预定时间。此操作有助于您更主动地控制工作负载的中断。

    根据预留或预留块的维护状态,会发生以下情况:

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

    如需手动启动预留块内特定宿主的维护,请使用 gcloud CLI 或 REST API。否则,请选择以下选项之一:

    控制台

    1. 在 Google Cloud 控制台中,前往预留页面。

      转到“预留”

    2. 名称列中,点击预留的名称。系统会显示一个提供相应预留详细信息的页面。

    3. 点击运行维护,然后选择以下选项之一:

      • 如需对所有块开始维护,请选择所有容量

      • 如需仅对包含正在运行的虚拟机的块启动维护,请选择使用中的容量

      • 如需仅对未使用的块以及包含已停止或已暂停虚拟机的块启动维护,请选择未使用的容量

    4. 点击确定进行确认。

    gcloud

    • 如需开始维护预留,请使用 gcloud compute reservations perform-maintenance 命令

      gcloud compute reservations perform-maintenance RESERVATION_NAME \
          --scope=RESERVATION_MAINTENANCE_SCOPE \
          --zone=ZONE
      
    • 如需在预留块上开始维护,请使用 gcloud compute reservations blocks perform-maintenance 命令

      gcloud compute reservations blocks perform-maintenance RESERVATION_NAME \
          --block-name=BLOCK_NAME \
          --scope=BLOCK_MAINTENANCE_SCOPE \
          --zone=ZONE
      

      替换以下内容:

    • RESERVATION_NAME:预留的名称。

    • RESERVATION_MAINTENANCE_SCOPE:预留的维护范围。请指定以下某个值:

      • 如需为所有区块启动维护,请执行以下操作:all

      • 如需仅对运行虚拟机的区块启动维护,请执行以下操作:running

      • 如需仅对未使用的块以及包含已停止或已暂停虚拟机的块启动维护,请运行以下命令:unused

    • BLOCK_NAME:预留中存在的块的名称。

    • BLOCK_MAINTENANCE_SCOPE:预留块的维护范围。请指定以下某个值:

      • 如需在所有主机上启动维护,请执行以下操作:all

      • 仅对运行虚拟机的宿主机启动维护:running

      • 如需仅在未使用的主机以及已停止或已暂停虚拟机的主机上开始维护,请运行以下命令:unused

    • ZONE:预留所在的可用区。

    REST

    • 如需开始对预留进行维护,请向 reservations.performMaintenance 方法发出 POST 请求:

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/performMaintenance
      
      {
        "maintenanceScope": "RESERVATION_MAINTENANCE_SCOPE"
      }
      
    • 如需开始对预留块进行维护,请向 reservationBlocks.performMaintenance 方法发出 POST 请求:

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/performMaintenance
      
      {
        "maintenanceScope": "BLOCK_MAINTENANCE_SCOPE"
      }
      

    替换以下内容:

    • PROJECT_ID:Compute Engine 自动创建预留的项目 ID。

    • ZONE:预留所在的可用区。

    • RESERVATION_NAME:预留的名称。

    • RESERVATION_MAINTENANCE_SCOPE:预留的维护范围。请指定以下某个值:

      • 如需为所有区块启动维护,请执行以下操作:ALL

      • 如需仅对运行虚拟机的区块启动维护,请执行以下操作:RUNNING

      • 如需仅对未使用的块以及包含已停止或已暂停虚拟机的块启动维护,请运行以下命令:UNUSED

    • BLOCK_NAME:预留中存在的块的名称。

    • SUB_BLOCK_NAME:预留块中存在的子块的名称。

    • BLOCK_MAINTENANCE_SCOPE:预留块的维护范围。请指定以下某个值:

      • 如需在所有主机上启动维护,请执行以下操作:ALL

      • 仅对运行虚拟机的宿主机启动维护:RUNNING

      • 如需仅在未使用的主机以及已停止或已暂停虚拟机的主机上开始维护,请运行以下命令:UNUSED

    管理硬件紧急维护通知

    当虚拟机遇到主机错误或您报告其主机出现故障后,该虚拟机的主机需要进行紧急的临时维护。默认情况下,Compute Engine 在安排此类维护时会提前数小时发出通知。对于预留主机,您可以启用紧急维护通知,将此通知期延长至至少七天。此方法有助于您更主动地控制工作负载中断。

    如需为预留启用或停用硬件紧急维护通知,请选择以下选项之一:

    gcloud

    • 如需为预留启用硬件紧急维护通知,请使用 gcloud compute reservations update 命令,并添加 --enable-emergent-maintenance 标志:

      gcloud compute reservations update RESERVATION_NAME \
          --enable-emergent-maintenance \
          --zone=ZONE
      
    • 如需针对预留停用硬件紧急维护通知,请使用 gcloud compute reservations update 命令并带上 --no-enable-emergent-maintenance 标志:

      gcloud compute reservations update RESERVATION_NAME \
          --no-enable-emergent-maintenance \
          --zone=ZONE
      

    替换以下内容:

    • RESERVATION_NAME:预留的名称。

    • ZONE:预留所在的可用区。

    REST

    如需为预留启用或停用硬件紧急维护通知,请向 reservations.update 方法发出 PATCH 请求。在请求网址中添加 paths 查询参数并设置为 enableEmergentMaintenance

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=enableEmergentMaintenance
    
    {
      "name": "RESERVATION_NAME",
      "enableEmergentMaintenance": EMERGENCY_MAINTENANCE_NOTIFICATIONS
    }
    

    替换以下内容:

    • PROJECT_ID:预留所在项目的 ID。

    • ZONE:预留所在的可用区。

    • RESERVATION_NAME:预留的名称。

    • EMERGENCY_MAINTENANCE_NOTIFICATIONS:请指定以下某个值:

      • 如需启用通知,请执行以下操作:true

      • 如需停用通知,请执行以下操作:false

    后续步骤