結合使用自訂映像檔系列和滾動式更新,即可在代管執行個體群組 (MIG) 上啟用單鍵 OS 映像檔升級功能。
使用單鍵 OS 映像檔升級功能有許多好處,包括:
- 適用於所有 VM 機型和執行個體群組大小。
- 支援 Windows 和 Linux 映像檔與容器。
- 系統會根據目前的執行個體範本重新建立執行個體,或視需要根據新範本重新建立,因此您可以保留自訂開機指令碼和中繼資料。
- 可搭配有狀態 MIG 使用,因此您可以選擇保留非開機磁碟上的資料。
- 系統會自動發布新版作業系統更新,讓使用者在第一次提出要求之後就不必再輸入任何設定值。
- 支援批次更新,並提供選用的健康狀態檢查。
事前準備
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 Trusted Cloud by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:
-
安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:
gcloud init
- 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
如要 回溯 至先前的映像檔,請按照下列步驟操作:
- 建立新的執行個體範本,指定所需映像檔。
- 啟動滾動式更新,套用執行個體範本。