您可以主动管理预留容量块上即将发生的维护宿主事件,无论虚拟机是否在这些容量块上运行。这种方法有助于最大限度减少中断并保持最佳性能。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 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
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
- 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权限- 查看预留列表
概览
如需优化预留容量块的维护,请完成以下步骤:
设置通知提醒。创建基于日志的提醒,以便在预订或预订块的维护事件已安排、已开始或已完成时收到通知。此方法有助于您主动规划活动,避免意外停机。
管理各个容量块的维护。查看并根据需要手动启动预留或预留块的维护。此流程有助于您提高工作负载对宿主机错误的弹性,防止停机,并确保应用保持可用状态。
如需详细了解 H4D 机器类型的维护频率和行为,请参阅 H4D 实例的维护体验。
为预留设置通知提醒
您可以创建基于日志的提醒政策,以便在预留或预留块的维护事件安排、开始或完成时收到通知。
如需为预留或预留块的维护事件创建提醒,请完成以下步骤。针对要创建的每项提醒重复此过程。
-
在 Google Cloud 控制台中,转到 Logs Explorer 页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
点击显示查询切换开关,将其切换到开启位置。
在查询窗格中,构建以下其中一个查询。这些查询会过滤日志条目,以识别特定的维护事件。针对要创建的每个查询重复此过程。
接收预订的维护提醒:
如需在安排维护时收到提醒,请执行以下操作:
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"
如需验证查询,请点击运行查询。如果查询有效,查询结果窗格会显示与查询匹配的日志条目。
在查询结果工具栏中,点击操作列表,然后选择 创建日志提醒。系统会显示创建基于日志的提醒政策窗格。
在提醒详情部分中,执行以下操作:
在提醒政策名称字段中,输入政策的名称。
在政策严重程度列表中,选择警告(或更严重的程度)。
点击下一步。
在选择要包含在提醒中的日志部分中,点击下一步。
在设置通知频率和自动关闭时长部分,指定以下内容:
在通知间隔时间列表中,选择您希望接收通知的频率。
在突发事件自动关闭时长列表中,选择 Cloud Logging 停止发送通知并自动关闭突发事件的时长。
点击下一步。
在应该收到通知的用户部分,为 Logging 指定通知渠道,以便向其发送通知。
点击保存。
跨预留管理维护
您可以按如下方式查看和控制预留和预留块的维护:
如需查看预留或预留块即将进行的维护的状态和安排时间,请查看维护状态。
如需在预留或预留块上手动启动维护,而不是等待预定的维护日期和时间,请参阅手动启动维护。
如需管理在虚拟机的主机因主机错误或主机故障报告而需要紧急、计划外维护时,您希望提前多久收到通知,请管理硬件紧急维护通知。
查看维护状态
您可以通过检查预留元数据中
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。否则,请选择以下选项之一:控制台
在 Google Cloud 控制台中,前往预留页面。
在维护状态列中,Compute Engine 会显示预留的维护状态。如果您在按需预留表格中没有看到此列,请点击 列显示选项,选中维护状态复选框,然后点击确定。
如需查看预留块的维护状态,请完成以下步骤:
在名称列中,点击预留的名称。系统会显示一个提供相应预留详细信息的页面。
在块表格的维护列中,Compute Engine 会显示预留中块的维护状态。
gcloud
如需查看预留的维护状态,请使用
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字段不会包含windowStartTime和windowEndTime字段。如果您的预订未安排维护,则输出类似于以下内容:
--- schedulingType: GROUPED
如果您的预留已安排维护,如需查看预留中块的维护状态,请使用
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
如需查看预留的维护状态,请向以下方法之一发出
GET请求:如需查看所有可用区中的预留,请使用
reservations.aggregatedList方法。如需查看特定可用区中的预留,请使用
reservations.list方法。
在请求网址中,添加以下查询参数:
如需仅显示预留的名称、预留的机器类型和维护状态,请添加设置为
items.name,items.specificReservation.instanceProperties.machineType,items.resourceStatus.reservationMaintenance的fields查询参数。如需仅按指定特定机器类型的预留进行过滤,请使用网址编码的值添加设置为
specificReservation.instanceProperties.machineType:MACHINE_TYPE的filter查询参数。
例如,如需查看所有可用区中的预留,请发出
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查询参数设置为其他过滤条件表达式。如果预留已安排维护,那么如需查看预留中块的维护状态,请向
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字段不会包含windowStartTime和windowEndTime字段。
手动启动维护
您可以手动开始预留或预留块的维护,而无需等待预定时间。此操作有助于您更主动地控制工作负载的中断。
根据预留或预留块的维护状态,会发生以下情况:
维护状态 说明 看到的内容 已安排 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。否则,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往预留页面。
在名称列中,点击预留的名称。系统会显示一个提供相应预留详细信息的页面。
点击运行维护,然后选择以下选项之一:
如需对所有块开始维护,请选择所有容量。
如需仅对包含正在运行的虚拟机的块启动维护,请选择使用中的容量。
如需仅对未使用的块以及包含已停止或已暂停虚拟机的块启动维护,请选择未使用的容量。
点击确定进行确认。
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
后续步骤
了解主机事件期间的本地 SSD 数据持久性
了解如何执行本地 SSD 数据备份以保留数据
了解监控主机维护事件时的维护状态定义
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-12-10。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["很难理解","hardToUnderstand","thumb-down"],["信息或示例代码不正确","incorrectInformationOrSampleCode","thumb-down"],["没有我需要的信息/示例","missingTheInformationSamplesINeed","thumb-down"],["翻译问题","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-12-10。"],[],[]] -