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

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

使用單鍵 OS 映像檔升級功能有許多好處,包括:

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

事前準備

  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Trusted Cloud by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:
    1. 安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:

      gcloud init
    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. 啟動滾動式更新,套用執行個體範本。

後續步驟