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

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

您可以主動管理預留容量區塊中即將發生的維護主機事件,無論 VM 是否在這些區塊上執行。這種做法有助於將中斷情況降到最低,並維持最佳效能。 <

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上的分頁,瞭解如何使用範例:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  • 設定預設地區和區域
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。

      若您採用的是外部識別資訊提供者 (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. 在「Who should be notified?」(應該通知誰?) 部分,指定 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 控制台中,維護狀態會顯示為「執行中」
    • 在 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. 在「Name」(名稱) 欄中,按一下預訂名稱。系統會顯示預訂詳細資料頁面。

    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

    後續步驟