您可以結合使用自訂映像檔系列和滾動式更新,在代管執行個體群組 (MIG) 中啟用單鍵 OS 映像檔升級功能。
使用單鍵 OS 映像檔升級功能可享有許多優勢,包括:
- 適用於所有 VM 機器類型和所有執行個體群組大小。
- 支援 Windows 和 Linux 映像檔和容器。
- 系統會根據目前的執行個體範本重新建立執行個體,或視需要根據新範本重新建立,以便保留自訂的啟動指令碼和中繼資料。
- 可搭配有狀態 MIG 使用,因此您可以選擇保留非開機磁碟上的資料。
- 系統會自動發布更新至新版 OS,讓使用者在第一次提出要求之後就不必再輸入任何設定值。
- 支援使用選用健康狀態檢查的批次更新。
事前準備
-
如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
-
單鍵 OS 映像檔升級功能的運作方式為何?
當您叫用更新時,MIG 會將群組中所有 VM 的開機磁碟,替換為自訂映像檔系列中最新的 OS 映像檔版本。MIG 會保留您為群組中每個 VM 在執行個體範本中設定的中繼資料和開機指令碼。系統會根據執行個體範本中的規格重新建立非開機磁碟。如要瞭解如何保留資料,請參閱「在 MIG 中設定有狀態磁碟」。
為限制應用程式中斷情形,您可以分批執行更新,在更新期間讓特定百分比的 VM 持續執行。為提高可靠性,您可以為 MIG 設定以應用程式為準的健康狀態檢查:群組會等待更新後 VM 上的應用程式傳回正常回應,再繼續更新其他 VM。
事前準備
安裝或更新至最新版 Google Cloud CLI。
請確認您已建立指向映像檔系列的執行個體範本。Google 建議您使用自訂圖片系列,以降低推出與應用程式不相容的圖片版本的風險。您可以確保只推出相容的圖片版本,方法是在應用程式完成相容性測試後,再將圖片新增至自訂圖片系列。
當執行個體範本指向映像檔系列時,MIG 一律會使用系列中的最新映像檔建立執行個體,例如:
- 當 MIG 新增執行個體,因為您或 MIG 的自動配置器已增加 MIG 的大小。
- MIG 重新建立執行個體時,無論是手動觸發或由自動修復功能觸發,都會發生這類事件。
請先使用應用程式測試新映像檔,再將其加入映像檔系列並推出。
您可以選擇為 MIG建立以應用程式為準的健康狀態檢查。以應用程式為準的健康狀態檢查會驗證應用程式在 MIG 中的每個 VM 上是否如預期回應。您可以設定更新,讓系統最多只允許一個 VM 無法使用。如果應用程式未如預期回應,MIG 就會將該 VM 標示為無法使用,且推出作業不會繼續進行。
為 MIG 執行單鍵 OS 映像檔升級
如要將 MIG 中的所有 VM 更新為自訂映像檔系列中的最新映像檔,請完成下列步驟:
使用下列指令啟動滾動式取代作業。
gcloud compute instance-groups managed rolling-action replace instance-group-name \ [--max-surge=max-surge ] [--max-unavailable=max-unavailable]
更改下列內容:
instance-group-name
:要操作的 MIG 名稱。max-surge
:更新程序中可暫時建立的額外 VM 數量上限。這可以是固定數字 (例如5
),或是 MIG 大小的百分比 (例如10%
)。max-unavailable
:更新程序期間最多可停用的 VM 數量。這可以是固定數字 (5
),或 MIG 大小的百分比 (10%
)。
您可以使用
--max-unavailable
和--max-surge
選項,在更新導致 VM 無法使用時停止後續更新,藉此結合健康狀態檢查。監控更新:使用
wait-until
子命令,檢查 MIG 的status.versionTarget.isReached
欄位是否設為true
。gcloud compute instance-groups managed wait-until instance-group-name --version-target-reached
更改下列內容:
instance-group-name
:要操作的 MIG 名稱。
指令會在群組更新時傳回。
您也可以列出執行個體,查看每個執行個體的狀態。
gcloud compute instance-groups managed list-instances instance-group-name
這個指令會傳回執行個體清單及其詳細資料,包括每個 VM 的狀態、健康狀態和目前動作。當所有 VM 都為
RUNNING
且沒有目前的動作時,MIG 就會是最新且穩定的狀態。如果需要回溯至先前的 OS 映像檔,您必須建立執行個體範本,並指定要使用的映像檔。接著,啟動輪動式更新,更新所有代管執行個體,以便使用該範本。詳情請參閱「回復更新」。
範例
本範例涵蓋下列工作:
- 建立執行個體範本,方便更新 OS 映像檔:
- 在執行個體範本中指定自訂映像檔系列。
- 依據範本建立 MIG。
- 設定健康狀態檢查,以限制映像檔更新造成的服務中斷。
- 為圖片系列新增圖片。
- 使用單一指令叫用 OS 更新。
- 監控更新。
請按照下列步驟在 MIG 上啟用並執行單鍵 OS 升級:
建立指定自訂映像檔系列的執行個體範本。圖片系列應包含經過測試且可信任的圖片。MIG 從範本建立的每個 VM 都會使用這個系列中最新的映像檔。
gcloud compute instance-templates create example-template \ --machine-type n1-standard-4 \ --image-family my-image-family \ --image-project my-project \ --tags=http-server
根據執行個體範本建立 MIG。這個範例會以
example-template
為基礎,使用三個例項啟動 MIG。由於執行個體範本指定了映像檔系列,MIG 會使用該系列中的最新映像檔建立每個 VM。gcloud compute instance-groups managed create example-group \ --base-instance-name example \ --size 3 \ --zone us-east1-b \ --template example-template
選用步驟:設定並啟用以應用程式為基礎的健康狀態檢查。如果應用程式在映像檔更新後沒有回應,您可以使用健康狀態檢查狀態搭配 maxUnavailable 設定,停止 MIG 的後續發布作業。
建立健康狀態檢查,在要求路徑
/health
中查看 HTTP200
回應。每個執行個體上的 GitHub 應用程式都會提供該路徑。gcloud compute health-checks create http example-autohealer-check \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
建立防火牆規則,允許健康狀態檢查探測器存取執行個體。健康檢查器探測器的來源位址範圍為
130.211.0.0/22
和35.191.0.0/16
gcloud compute firewall-rules create default-allow-http-health-check \ --network default \ --allow tcp:80 \ --source-ranges 130.211.0.0/22,35.191.0.0/16
將健康狀態檢查新增至 MIG。
gcloud compute instance-groups managed update example-group \ --zone us-east1-b --health-check example-autohealer-check
當可用的更新經過測試,且已確定與您的應用程式相容時,請建立新的映像檔,並使用
--family
標記將該映像檔納入自訂映像檔系列。gcloud compute images my-image-v2 \ --source-disk boot-disk-1 \ --source-disk-zone us-central1-f \ --family my-image-family
在這個範例中,
my-image-family
中的最新映像檔現在是my-image-v2
,其依據來源磁碟boot-disk-1
。請叫用滾動式取代功能,取代 MIG 中的所有 VM。MIG 會根據群組的執行個體範本取代每個 VM。執行個體範本會指定
my-image-family
,因此每個 VM 都會取得系列中的最新映像檔 (my-image-v2
)。您可以設定更新作業造成的干擾程度。在這個範例中,MIG 會在群組的目標大小之上建立一個額外的 VM,且在該 VM 啟動及執行前,不會移除任何現有 VM。
gcloud compute instance-groups managed rolling-action replace example-group \ --max-surge 1 --max-unavailable 0
如要監控更新狀態,請使用
wait-until
指令,並加上--version-target-reached
旗標。指令會在群組更新時傳回。gcloud compute instance-groups managed wait-until --version-target-reached example-group \ --zone us-east1- Waiting for group to reach version target ... Version target is reached
您也可以使用
list-instances
指令查看每個 VM 的狀態、健康狀態、目前的動作、執行個體範本和版本。gcloud compute instance-groups managed list-instances example-group \ --zone us-east1-b NAME ZONE STATUS HEALTH_STATE ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR test-211p us-east1-b RUNNING HEALTHY NONE example-template 0/2020-01-30 13:34:28.843377+00:00 test-t5qb us-east1-b RUNNING UNKNOWN VERIFYING example-template 0/2020-01-30 13:34:28.843377+00:00 test-x331 us-east1-b RUNNING HEALTHY NONE example-template 0/2020-01-20 20:39:51.819399+00:00
如果您需要回溯至先前的映像檔,請按照下列步驟操作:
- 建立新的執行個體範本,指定所需映像檔。
- 啟動滾動式更新,套用執行個體範本。