管理所有預留項目的主機事件

本文說明如何使用預留容量區塊提供的主機維護功能。本文說明如何監控、規劃及執行 H4D 執行個體叢集的排定維護作業。如要管理虛擬機器 (VM) 執行個體的維護作業,請參閱「監控及規劃主機維護事件」。

您可以主動管理預留容量區塊中即將發生的維護主機事件,無論 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 管理員 (roles/compute.admin)
  • 如要以唯讀存取系統事件稽核記錄: 專案的「記錄檢視者」 (roles/logging.viewer)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備管理預訂項目主機維護事件所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要管理所有預留項目的主機維護事件,必須具備下列權限:

  • 如要啟動預留項目的主機維護作業: 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. 如要驗證查詢,請按一下「執行查詢」。如果查詢有效,「Query results」(查詢結果) 窗格會顯示符合查詢的記錄項目。

    5. 在「查詢」結果工具列中,按一下「動作」清單,然後選取 「建立記錄檔警告」。「建立記錄檔警告政策」窗格隨即顯示。

    6. 在「警報詳細資料」部分,執行下列操作:

      1. 在「快訊政策名稱」欄位中,輸入政策名稱。

      2. 在「政策嚴重性等級」清單中,選取「警告」 (或更高嚴重性)。

      3. 點選「下一步」

    7. 在「Choose logs to include in the alert」(選擇要加入快訊的記錄檔) 區段中,按一下「Next」(下一步)

    8. 在「設定通知頻率和自動關閉時間長度」部分,指定下列項目:

      1. 在「通知時間間隔」清單中,選取接收通知的頻率。

      2. 在「事件自動關閉期限」清單中,選取 Cloud Logging 停止傳送通知並自動關閉事件的時間長度。

      3. 點選「下一步」

    9. 在「誰會收到通知?」部分,指定 Logging 要傳送通知的通知管道

    10. 按一下 [儲存]

    管理預留項目的維護作業

    您可以透過下列方式查看及控管預訂和預訂區塊的維護作業:

    • 如要查看預訂或預訂區塊的近期維護狀態和排定時間,請查看維護狀態

    • 如要手動啟動預留項目或預留項目區塊的維護作業,而不等待排定的維護日期和時間,請手動啟動維護作業

    • 如要管理 VM 主機在發生主機錯誤或主機故障報告後,需要緊急、未規劃的維護作業時,您希望提早收到通知的時間,請管理硬體緊急維護通知

    查看維護狀態

    如要查看預訂或預訂區塊的近期維護狀態,請檢查預訂中繼資料的 upcomingGroupMaintenance 欄位值。如果保留項目缺少 upcomingGroupMaintenance 欄位,表示系統未排定該保留項目或保留項目區塊的維護作業。如要進一步瞭解 upcomingGroupMaintenance 中的欄位,請參閱「維護狀態定義」。

    此外,如果預訂區塊排定維護作業,upcomingGroupMaintenance 欄位會包含 maintenanceReasons 欄位。這個欄位會說明預留區塊排定維護作業的原因,如下表所示:

    維護作業類型 維護原因 VM 狀態
    定期維護的預定維護作業
    • PLANNED_UPDATE:預定的基礎架構維護作業
    • PLANNED_NETWORK_UPDATE:預定進行網路維護
    適用於執行中、已停止或已暫停的 VM。
    非預期的緊急維護
    • FAILURE_DISK:未規劃的維護作業,因 VM 連結的磁碟發生錯誤而排定。
    • FAILURE_INFRA:因基礎架構發生錯誤而安排的非預期維護作業。
    • FAILURE_INTERFACE:由於 NIC 發生錯誤,因此排定非預期的維護作業。
    • FAILURE_MEMORY:非預期,因 VM 的記憶體發生錯誤而排定維護作業。
    • FAILURE_NETWORK:網路發生錯誤,因此安排非預定的維護作業。
    僅適用於執行中的 VM。

    如要在預訂區塊或子區塊中查看 maintenanceReasons 欄位,請使用 gcloud CLI 或 REST API。否則,請選取下列其中一個選項:

    控制台

    1. 前往 Google Cloud 控制台的「Reservations」(預留項目) 頁面。

      前往「Reservations」(預留項目) 頁面

    2. 在「維護狀態」欄中,Compute Engine 會顯示預留項目的維護狀態。如果「隨選預訂」表格中未顯示這個資料欄,請按一下「資料欄顯示選項」,選取「維護狀態」核取方塊,然後按一下「確定」

    3. 如要查看預留區塊的維護狀態,請完成下列步驟:

      1. 在「Name」(名稱) 欄中,按一下預訂名稱。系統會顯示預訂詳細資料頁面。

      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 查詢參數。

      • 如要只依指定機器類型篩選預訂項目,請加入 filter 查詢參數,並使用網址編碼值將其設為 specificReservation.instanceProperties.machineType:MACHINE_TYPE

      舉例來說,如要查看所有可用區的預留項目,請發出 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"
                }
              }
            }
          },
          ...
        ]
      }
      

      如要進一步縮小 VM 清單範圍,請視需要將 filter 查詢參數設為其他篩選運算式

    2. 如果保留項目已排定維護作業,請對 reservationBlocks.list 方法發出 GET 要求,查看保留項目中區塊的維護狀態。在要求網址中,加入設為 items.name,items.reservationMaintenancefields 查詢參數:

      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 控制台中,維護狀態會顯示為「Ready to run - will run on DATE」(準備執行 - 將於 DATE 執行)。
    • 在 gcloud CLI 或 REST API 中,Compute Engine 會將 maintenanceStatus 欄位設為 PENDING
    進行中 維護作業正在進行中。你無法重新安排發布時程。
    • 在 Google Cloud 控制台中,維護狀態會顯示為「Running」(執行中)
    • 在 gcloud CLI 或 REST API 中,Compute Engine 會將 maintenanceStatus 欄位設為 ONGOING
    完成 維護作業已完成。Compute Engine 已從 VM 中移除所有維護通知。
    • 在 Google Cloud 控制台中,維護狀態會顯示為
    • 在 gcloud CLI 或 REST API 中,maintenanceStatus 欄位不存在。

    如要手動啟動預訂區塊中特定主機的維護作業,請使用 gcloud CLI 或 REST API。否則,請選取下列其中一個選項:

    控制台

    1. 前往 Google Cloud 控制台的「Reservations」(預留項目) 頁面。

      前往「Reservations」(預留項目) 頁面

    2. 在「名稱」欄中,按一下預訂名稱。系統會顯示預訂詳細資料頁面。

    3. 按一下「執行維護作業」,然後選取下列其中一個選項:

      • 如要對所有區塊啟動維護作業,請選取「所有容量」

      • 如要只對執行 VM 的區塊啟動維護作業,請選取「使用中的容量」

      • 如要只對未使用的區塊,以及含有已停止或暫停 VM 的區塊啟動維護作業,請選取「未使用的容量」

    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

      • 如要只對執行 VM 的模塊啟動維護作業,請執行下列操作:running

      • 如要只對未使用的區塊,以及已停止或暫停 VM 的區塊啟動維護作業,請按一下 unused

    • BLOCK_NAME:預留項目中的區塊名稱。

    • BLOCK_MAINTENANCE_SCOPE:預留區塊的維護範圍。請指定下列其中一個值:

      • 如要開始維護所有主機,請按照下列步驟操作:all

      • 如要只對執行 VM 的主機啟動維護作業,請執行:running

      • 如要只在閒置主機和已停止或暫停 VM 的主機上啟動維護作業,請按照下列步驟操作: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

      • 如要只對執行 VM 的模塊啟動維護作業,請執行下列操作:RUNNING

      • 如要只對未使用的區塊,以及已停止或暫停 VM 的區塊啟動維護作業,請按一下 UNUSED

    • BLOCK_NAME:預留項目中的區塊名稱。

    • SUB_BLOCK_NAME:預留區塊內的子區塊名稱。

    • BLOCK_MAINTENANCE_SCOPE:預留區塊的維護範圍。請指定下列其中一個值:

      • 如要開始維護所有主機,請按照下列步驟操作:ALL

      • 如要只對執行 VM 的主機啟動維護作業,請執行:RUNNING

      • 如要只在閒置主機和已停止或暫停 VM 的主機上啟動維護作業,請按照下列步驟操作:UNUSED

    管理硬體緊急維護通知

    如果 VM 發生主機錯誤,或您回報主機故障,VM 的主機就需要進行緊急的非計畫性維護。根據預設,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 要求。在要求網址中,加入設為 enableEmergentMaintenancepaths 查詢參數。

    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

    後續步驟