在 MIG 中執行單鍵 OS 映像檔升級


您可以結合使用自訂映像檔系列滾動式更新,在代管執行個體群組 (MIG) 中啟用單鍵 OS 映像檔升級功能。

使用單鍵 OS 映像檔升級功能可享有許多優勢,包括:

  • 適用於所有 VM 機器類型和所有執行個體群組大小。
  • 支援 Windows 和 Linux 映像檔和容器。
  • 系統會根據目前的執行個體範本重新建立執行個體,或視需要根據新範本重新建立,以便保留自訂的啟動指令碼和中繼資料。
  • 可搭配有狀態 MIG 使用,因此您可以選擇保留非開機磁碟上的資料。
  • 系統會自動發布更新至新版 OS,讓使用者在第一次提出要求之後就不必再輸入任何設定值。
  • 支援使用選用健康狀態檢查的批次更新。

事前準備

  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:
    1. 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.

    2. 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 更新為自訂映像檔系列中的最新映像檔,請完成下列步驟:

  1. 使用下列指令啟動滾動式取代作業

    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 無法使用時停止後續更新,藉此結合健康狀態檢查。

  2. 監控更新:使用 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 就會是最新且穩定的狀態。

  3. 如果需要回溯至先前的 OS 映像檔,您必須建立執行個體範本,並指定要使用的映像檔。接著,啟動輪動式更新,更新所有代管執行個體,以便使用該範本。詳情請參閱「回復更新」。

範例

本範例涵蓋下列工作:

  1. 建立執行個體範本,方便更新 OS 映像檔:
  2. 依據範本建立 MIG。
  3. 設定健康狀態檢查,以限制映像檔更新造成的服務中斷。
  4. 為圖片系列新增圖片。
  5. 使用單一指令叫用 OS 更新。
  6. 監控更新。

請按照下列步驟在 MIG 上啟用並執行單鍵 OS 升級:

  1. 建立指定自訂映像檔系列的執行個體範本。圖片系列應包含經過測試且可信任的圖片。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
    
  2. 根據執行個體範本建立 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
    
  3. 選用步驟:設定並啟用以應用程式為基礎的健康狀態檢查。如果應用程式在映像檔更新後沒有回應,您可以使用健康狀態檢查狀態搭配 maxUnavailable 設定,停止 MIG 的後續發布作業。

    1. 建立健康狀態檢查,在要求路徑 /health 中查看 HTTP 200 回應。每個執行個體上的 GitHub 應用程式都會提供該路徑。

      gcloud compute health-checks create http example-autohealer-check \
          --check-interval 10 \
          --timeout 5 \
          --healthy-threshold 2 \
          --unhealthy-threshold 3 \
          --request-path "/health"
      
    2. 建立防火牆規則,允許健康狀態檢查探測器存取執行個體。健康檢查器探測器的來源位址範圍為 130.211.0.0/2235.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
      
    3. 將健康狀態檢查新增至 MIG。

      gcloud compute instance-groups managed update example-group \
          --zone us-east1-b --health-check example-autohealer-check
      
  4. 當可用的更新經過測試,且已確定與您的應用程式相容時,請建立新的映像檔,並使用 --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

  5. 請叫用滾動式取代功能,取代 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
    
  6. 如要監控更新狀態,請使用 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
    
  7. 如果您需要回溯至先前的映像檔,請按照下列步驟操作:

    1. 建立新的執行個體範本,指定所需映像檔。
    2. 啟動滾動式更新,套用執行個體範本。

後續步驟