設定執行個體可用性政策

Compute Engine 會定期維護其基礎架構。本頁面說明這些維護事件的類型與約略的執行頻率,以及您可以如何設定執行個體可用性選項,以設定 VM 執行個體在這些維護事件發生時的行為。本頁面也將說明如何設定執行個體,讓執行個體在維護作業進行時即時遷移

事前準備

維護作業

Compute Engine 維護作業需要硬體與軟體更新。其中有些維護作業需要 Google 將 VM 從正在進行維護的主機移出,且 Compute Engine 會自動管理這些執行個體的排程行為。如果您將執行個體的可用性政策設為即時遷移,Compute Engine 就會即時遷移您的 VM 執行個體。這麼做可避免您的應用程式在維護作業期間遭遇服務中斷情形。此外,您也可以選擇在維護作業期間終止您的執行個體,而不要進行即時遷移。

下表將 Compute Engine 維護作業大致分為兩類,每一個分類都以範例說明,並會指出哪個維護作業需要將 VM 即時遷移至其他主機。

維護作業類型 範例 大概頻率 * 是否需要即時遷移至新主機
主機維護 主機核心升級、硬體修復或升級 每月一次
輕量級 管理程序層級升級、網路堆疊升級 每週 1-2 次

* 請注意,這些頻率是概略值,而不是保證值。Compute Engine 有時執行維護的頻率可能會比這裡提到的更高一些。

選擇可用性政策

VM 執行個體的可用性政策決定了當發生 Google 必須將您的 VM 執行個體移至其他主機的維護作業時,該執行個體的行為方式為何。您可以將 VM 執行個體設定為當 Compute Engine 將執行個體即時遷移至其他主機時繼續執行,或者也可以選擇終止執行個體。您隨時可以更新執行個體的可用性政策,藉此控管 VM 執行個體的運作方式。

只要設定以下兩項設定,即可變更執行個體的可用性政策:

  • VM 執行個體的維護行為:決定執行個體在維護作業期間要即時遷移或終止。
  • 執行個體的重新啟動行為:決定執行個體遇到當機情形或遭到終止時是否自動重新啟動。

執行個體的維護行為預設為即時遷移,但您可以進行變更,在維護作業期間終止執行個體。

即時遷移

根據預設,標準執行個體會設為即時遷移。因此,Compute Engine 會自動遷移執行個體,使其不受基礎架構維護作業的影響,而且執行個體在遷移過程中會繼續執行。雖然執行個體可能會遭遇效能下降的情況,不過多數執行個體的效能通常不會有任何差異。這項設定非常適合需要持續運作且容許短期間內效能降低的執行個體。

當 Compute Engine 遷移執行個體時,會回報系統事件並發布至區域作業清單。您可查看特定區域的 Compute Engine 作業以審視這個事件。即時遷移事件具有下列作業類型:

compute.instances.migrateOnHostMaintenance

終止及 (視需要) 重新啟動

如果您不要讓執行個體即時遷移,可以選擇終止並視需要重新啟動執行個體。採用這個選項後,Compute Engine 會發出訊號讓您的執行個體關閉,在等候一小段時間讓執行個體正確完成關閉後,終止執行個體,然後再於維護活動以外的時間重新啟動。如果執行個體需要維持穩定一致的最大效能,以及您的整體應用程式專門用於處理執行個體故障或重新啟動情形,就相當適合使用這個選項。

當 Compute Engine 終止並重新啟動您的執行個體時,會回報系統事件並發布至區域作業清單。您可查看特定區域的 Compute Engine 作業以審視這個事件。終止事件具有下列作業類型:

compute.instances.terminateOnHostMaintenance

執行個體重新啟動時,會使用相同的永久開機磁碟,並重新連接至您所設定的任何次要永久磁碟。系統在遷移及重新啟動執行個體後,仍會保留這些磁碟上的資料。

如果執行個體遭到終止,則系統不會保留本機 SSD 資料。執行個體重新啟動時,會建立新的本機 SSD,而您必須格式化並掛接該本機 SSD。

自動重新啟動

如果您的執行個體已設定為在維護作業期間終止,或者您的執行個體因基礎硬體問題而當機,您可以將 automaticRestart 欄位設為 true,以便設定讓 Compute Engine 自動重新啟動執行個體。執行個體因使用者動作 (例如呼叫 sudo shutdown) 或區域服務中斷情形而終止運作時,則不適用這項設定。

當 Compute Engine 自動重新啟動執行個體時,會回報系統事件並發布至區域作業清單。您可查看特定區域的 Compute Engine 作業以審視這個事件。自動重新啟動事件具有下列作業類型:

compute.instances.automaticRestart

查看 Compute Engine 作業

您可以使用 Google Cloud Platform Consolegcloud指令列工具Compute Engine API,查看已完成的作業清單。

主控台

如要查看專案的作業清單,請前往「Operations」(作業) 頁面。

  1. 前往「Operations」(作業) 頁面

  2. 如要進一步瞭解作業,請按一下作業摘要。比方說,如要查看 my-instance 執行個體的遷移詳細資料,請按一下 [Automatically migrate an instance] (自動遷移執行個體) 作業。顯示即時遷移的「Operations」(作業) 頁面螢幕截圖 即時遷移詳細資料的螢幕截圖

gcloud

如要使用 gcloud compute 查看專案的作業清單,請使用 operations list 子指令。

如要查看指定區域中的作業清單,請新增 --filter 旗標。

gcloud compute operations list --filter="zone:(ZONE)"

比方說,如要查看 us-cental1-c 中的作業清單,請執行以下指令:

gcloud compute operations list --filter="zone:(us-central1-c)"

NAME                            TYPE                                        TARGET                                HTTP_STATUS  STATUS  TIMESTAMP
systemevent-1543845145000...    compute.instances.migrateOnHostMaintenance  us-central1-c/instances/my-instance   200          DONE    2018-12-03T05:52:25.000-08:00

API

您必須在全域地區區域層級指定作業的 API 要求。即時遷移、執行個體終止和自動重新啟動都是區域層級作業。

如果是區域作業,請向 zoneOperations.list 方法發出 GET 要求。

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations

其中:

  • [PROJECT_ID] 是這項要求的專案 ID。
  • [ZONE] 是這項要求的區域名稱。

    將要求主體保留空白。

以下是區域作業要求的輸出範例。在此輸出中,會顯示主機遷移的詳細資料。

{
 "kind": "compute#operation",
 "id": "3216798767364213712",
 "name": "systemevent-1543845145000-57c1e7574b840-a195b637-5ff74d9b",
 "zone": "https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c",
 "operationType": "compute.instances.migrateOnHostMaintenance",
 "targetLink": "https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c/instances/my-instance",
 "targetId": "3070988523247098025",
 "status": "DONE",
 "statusMessage": "Instance migrated during Compute Engine maintenance.",
 "user": "system",
 "progress": 100,
 "insertTime": "2018-12-03T05:52:25.000-08:00",
 "startTime": "2018-12-03T05:52:25.000-08:00",
 "endTime": "2018-12-03T05:52:25.000-08:00",
 "selfLink": "https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c/operations/systemevent-1543845145000-57c1e7574b840-a195b637-5ff74d9b"
}

設定可用性政策

您可以使用 onHostMaintenanceautomaticRestart 屬性,藉此調整執行個體的維護行為和自動重新啟動設定。除非您明確指定,否則系統會將預設值套用至所有的執行個體。

  • onHostMaintenance:在可能導致執行個體重新啟動的維護作業期間,決定執行個體的行為。

    • [預設值] migrate:讓 Compute Engine 在維護作業期間即時遷移執行個體。
    • terminate:終止執行個體,而不進行遷移。
  • automaticRestart:決定執行個體在發生當機情形或遭到系統終止時的行為。

    • [預設值] true:如果執行個體當機或遭到終止,Compute Engine 會重新啟動執行個體。
    • false:如果執行個體當機或遭到終止,Compute Engine 不會重新啟動執行個體。

無論您是首次建立執行個體已完成執行個體建立作業,都可以使用 setScheduling 方法變更執行個體的可用性政策。

執行個體建立期間的設定選項

主控台

  1. 前往 GCP 主控台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體頁面

  2. 按一下 [建立執行個體]
  3. 在「Create a new instance」(建立新執行個體) 頁面,填寫執行個體的屬性。
  4. 展開 [Management, security, disks, networking, sole tenancy] (管理、安全性、磁碟、網路、單獨租用) 選項。
  5. 在「Availability policy」(可用性政策) 底下,設定 [Automatic restart] (自動重新啟動) 和 [On host maintenance] (在主機維護期間) 選項。
  6. 按一下 [Create] (建立) 來建立執行個體。

gcloud

如要指定 gcloud compute 中新執行個體的可用性政策,請使用 --maintenance-policy 旗標指定要讓執行個體遷移或終止。根據預設,除非您提供 --no-restart-on-failure 旗標,否則系統會自動將執行個體設為重新啟動。

gcloud compute instances create INSTANCE .. \
    [--maintenance-policy MAINTENANCE_POLICY] \
    [--no-restart-on-failure]

API

在 API 中,向下列網址發出 POST 要求,將專案和區域分別替換成您的專案 ID 和執行個體所在區域:

https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances

onHostMaintenanceautomaticRestart 參數做為要求內文的一部分:

{
  "name": "example-instance",
  "description": "Front-end for real-time ingest; don't migrate.",
  ...
  // User options for influencing this Instance’s life cycle.
  "scheduling": {
    "onHostMaintenance": "migrate",
    "automaticRestart": "true" # specifies that Compute Engine should automatically restart your instance
  }
}

詳情請參閱執行個體參考說明文件。

更新執行個體的選項

Console

  1. 前往 Google Cloud Platform Console 中的「VM instances」(VM 執行個體) 頁面。

    前往「VM Instances」(VM 執行個體) 頁面

  2. 按一下您要更新設定的執行個體。執行個體詳細資料頁面會隨即顯示。
  3. 在執行個體詳細資料頁面上,完成以下步驟:
    1. 按一下頁面頂端的 [Edit] (編輯) 按鈕。
    2. 在「Availability policies」(可用性政策) 底下,視需要更新政策。您可在「Availability policies」(可用性政策) 區段中,設定 [Automatic restart] (自動重新啟動) 和 [On host maintenance] (在主機維護期間) 選項。
    3. 按一下 [Save] (儲存)

gcloud

如要更新執行個體的可用性政策,請使用 instances set-scheduling 指令,並指定上述執行個體建立指令中相同的參數和旗標:

gcloud compute instances set-scheduling INSTANCE \
    [--maintenance-policy BEHAVIOR] \
    [--no-restart-on-failure | --restart-on-failure]

API

在 API 中,向下列網址發出要求,將專案和區域分別替換成您自己的專案 ID 和執行個體所在區域:

https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/setScheduling

您的要求本文必須包含可用性政策的新值:

{
  "onHostMaintenance": "migrate"
  "automaticRestart": "true" # specifies that Compute Engine should automatically restart your instance
}

詳情請參閱 instances().setScheduling 參考說明文件。

測試您的可用性政策

您可以在設定可用性政策後模擬維護作業,測試這些可用性政策對應用程式的影響。舉例來說,您可以模擬維護作業在下列其中一項情境中對執行個體的影響:

  • 您已設定讓執行個體在維護作業期間即時遷移,並且需要測試即時遷移作業對應用程式的影響。
  • 您有在先占 VM 執行個體上執行的批次作業,並且需要測試應用程式如何執行一或多個執行個體的先占和關閉作業。
  • 您已設定讓執行個體在維護作業期間終止並重新啟動,而不進行即時遷移作業,並且需要測試應用程式如何執行這個關閉和重新啟動程序。

模擬維護作業有特定 API 頻率限制

您可以透過 gcloud 指令列工具或 API 要求,在執行個體上模擬維護作業。

gcloud

執行 instances simulate-maintenance-event 指令,強制執行個體啟用所設定的維護政策動作:

gcloud compute instances simulate-maintenance-event [INSTANCE_NAME] \
    --zone [ZONE]

其中:

  • [INSTANCE_NAME] 是您要模擬維護作業的執行個體名稱。您可以指定多個執行個體名稱,在位於相同區域的多個執行個體上模擬維護作業。
  • [ZONE] 是執行個體所在的區域。

API

在 API 中,向 Compute Engine API 的 compute.instances.simulateMaintenanceEvent 方法發出要求:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/simulateMaintenanceEvent

其中:

  • [INSTANCE_NAME] 是您要模擬維護作業的執行個體名稱。
  • [ZONE] 是執行個體所在的區域。

    如要進一步瞭解這個方法,請參閱 instances().simulateMaintenanceEvent 說明文件。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件