手動升級叢集的控制層或節點集區

本文說明如何手動要求升級或降級 Google Kubernetes Engine (GKE) 叢集的控制層或節點。GKE 會自動升級控制層和節點版本,確保叢集收到新功能、錯誤修正和安全性修補程式。不過,如本文所述,您也可以手動執行這些升級作業。

如要進一步瞭解自動和手動叢集升級的運作方式,請參閱「關於 GKE 叢集升級」。您也可以設定維護期間和排除項目,控管何時可以執行自動升級,何時不能執行。

您可以按照下列步驟手動升級版本:

如要升級叢集,GKE 會分別更新控制層和節點執行的版本。叢集會升級至較新的子版本 (例如 1.33 至 1.34),或較新的修補程式版本 (例如 1.33.4-gke.1350000 至 1.33.5-gke.1080000)。叢集的控制層和節點不一定隨時都要執行相同的版本。如要進一步瞭解版本,請參閱「GKE 版本管理和支援服務」。

如要進一步瞭解叢集升級作業的運作方式 (包括自動和手動升級),請參閱「關於 GKE 叢集升級」。

GKE 會定期發布新版本,您也可以透過叢集通知,接收各個叢集可用的新版本通知。如要找出叢集的特定自動升級目標,請取得叢集升級作業的相關資訊。

如要進一步瞭解可用版本,請參閱「版本管理」。如要進一步瞭解叢集,請參閱「叢集架構」。如需升級叢集的指引,請參閱「升級叢集的最佳做法」。

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
  • 確認您已有 Autopilot 或 Standard 叢集。如要建立新叢集,請參閱「建立 Autopilot 叢集」。

關於升級

系統會分別將叢集的控制層和節點升級。叢集的控制層和節點不一定隨時都要執行相同的版本。

無論您是否在發布版本中註冊叢集,叢集控制層和節點一律都會定期升級。

限制

Alpha 版叢集無法升級。

支援的版本

版本資訊會說明新版本何時推出,以及舊版本何時停用。您隨時可以使用下列指令,列出所有支援的叢集和節點版本:

gcloud container get-server-config \
    --location=CONTROL_PLANE_LOCATION

將 CONTROL_PLANE_LOCATION 替換為控制層的位置 (區域或可用區),例如 us-central1 或 us-central1-a。

如果叢集已註冊至發布管道,您可以升級至其他發布管道中的修補程式版本,但該版本的子版本必須與控制層相同。舉例來說,您可以將叢集從一般版的 1.33.4-gke.1350000 升級至搶鮮版的 1.33.5-gke.1162000。詳情請參閱「從較新的版本群組執行修補程式版本」。所有 Autopilot 叢集都會在發布管道註冊。

關於降級

在某些情況下,您可以將叢集版本降級至先前的版本:

除了上述情況外,您無法降級叢集。您無法將叢集控制層降級至先前的次要版本,包括單一步驟控制層次要升級後。舉例來說,如果控制層執行 GKE 1.34 版,就無法降級至 1.33 版。如果您嘗試這麼做,系統會顯示下列錯誤訊息:

ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.33.4-gke.1350000": specified version is
not newer than the current version.

當新的子版本推出,但尚未成為叢集的自動升級目標時,建議您在測試環境中測試及驗證子版本升級。如果叢集可能受到下一個子版本重大變更的影響,例如淘汰的 API 或功能遭到移除,則特別建議您這麼做。如要進一步瞭解版本適用情形,請參閱「頻道提供哪些版本」。

升級叢集的控制層

GKE 會自動升級叢集的控制層和節點。如要管理 GKE 升級叢集的方式,請參閱「控管叢集升級」。

如果是 Autopilot 叢集和區域 Standard 叢集,控制層在升級期間仍可使用。不過,當您啟動可用區叢集的控制層升級作業時,在控制層重新可供存取前,您有幾分鐘的時間無法修改叢集設定。控制層升級不會影響工作負載執行的 worker 節點可用性,因為在控制層升級期間,這些節點仍可正常運作。

管理叢集版本時,您可以在新版本推出後隨時手動升級,方法如下:

  • 一步升級:盡快將控制層直接升級至較新的子版本或修補程式版本。如果您已在新子版本中驗證叢集和工作負載效能,即可使用這種方法。
  • 兩步驟控制層次要版本升級 (可復原),確保安全:使用兩步驟程序將控制層升級至較新的次要版本,並觀察一段時間,確認新次要版本是否正常運作,必要時可復原。這個升級方法僅適用於升級至 1.33 以上版本,以及控制層子版本升級。

透過單一步驟升級手動升級控制層

您可以使用 Google Cloud 控制台或 Google Cloud CLI,手動升級 Autopilot 或 Standard 控制層。

控制台

如要手動更新叢集控制層,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下叢集名稱。

  3. 在「Cluster basics」(叢集基本資訊) 下方,按一下「Version」(版本) 旁邊的 「Upgrade Available」(可升級)。

  4. 選取新版本,然後按一下「Save Changes」(儲存變更)。

gcloud

如要查看叢集控制層的可用版本,請執行下列指令:

gcloud container get-server-config \
    --location=CONTROL_PLANE_LOCATION

如要升級至預設叢集版本,請執行下列指令:

gcloud container clusters upgrade CLUSTER_NAME \
    --master \
    --location=CONTROL_PLANE_LOCATION

如要升級至非預設的特定版本,請在下列指令中指定 --cluster-version 旗標:

gcloud container clusters upgrade CLUSTER_NAME \
    --master \
    --location=CONTROL_PLANE_LOCATION \
    --cluster-version=VERSION

將 VERSION 替換為要升級叢集的版本。您可以使用特定版本 (例如 1.32.9-gke.1072000),也可以使用版本別名 (例如 latest)。詳情請參閱「指定叢集版本」。

升級 Standard 控制層後,您可以升級節點。根據預設,使用 Google Cloud 控制台建立的標準節點會啟用自動升級功能,因此會自動執行這項操作。Autopilot 一律會自動升級節點。

控制層子版本升級作業分為兩步驟,可安全復原

您可以透過兩步驟升級,手動將 GKE Autopilot 或 Standard 叢集的控制層升級至下一個子版本。如果叢集未加入推出作業序列,GKE 在自動將控制層子版本升級至 1.33 以上版本時,也會執行這項兩步驟程序。

在這個兩步驟程序中,您可以測試叢集在新子版本 (稱為「二進位檔版本」) 的效能,同時使用前一個子版本 (稱為「模擬版本」) 的功能和 API。在這段觀察期內,控制層會以「模擬模式」運作,您可以視需要復原至先前的子版本。如要進一步瞭解 Kubernetes 如何允許這類升級,請參閱「Kubernetes 控制層元件的相容性版本」。

兩步驟升級的運作方式如下:

  1. 二進位升級:GKE 會將控制層二進位檔升級至新的子版本,但會模擬先前的子版本:

    • 模擬舊版:叢集會執行新的二進位檔,但會繼續模擬舊版次要版本 API 的行為。舉例來說,您可以呼叫新子版本中已移除的 API,但這些 API 仍可在先前的子版本中使用。
    • 測試新的二進位檔:您可以測試新的二進位檔,確認是否有迴歸、修正和效能變更,然後再開放使用新子版本提供的 Kubernetes 功能。監控應用程式指標、記錄、Pod 狀態、錯誤率和延遲時間。
    • 讓變更生效:等待 6 小時到 7 天 (自動升級為 24 小時),以便測試及監控。之後,GKE 會執行模擬版本升級。
    • 復原或完成升級:如有需要,您可以復原升級。或者,如果您對新的子版本有信心,不想等待浸泡時間完成,並準備好開始使用新功能和 API 變更,則可以進入下一個階段。
  2. 模擬版本升級:GKE 會更新模擬版本,以符合新的二進位檔版本。

    • 啟用新功能:啟用新子版本的所有新功能和 API 變更。
    • 無法復原:執行這個步驟後,就無法復原至原始子版本。升級完成。

這項作業有下列限制:

  • 您無法啟動一步到位的控制層子版本升級作業。
  • 您無法建立或升級節點至高於模擬版本的版本。
  • GKE 不會對控制層或節點執行任何類型的自動升級。

GKE 透過這個兩步驟程序,自動執行控制層子版本升級作業時,只有在沒有維護期間或排除項目阻止升級時,才會啟動二進位檔升級和模擬版本升級。

開始兩步驟升級

執行下列指令,啟動兩步驟升級:

gcloud beta container clusters upgrade CLUSTER_NAME \
  --location=CONTROL_PLANE_LOCATION \
  --cluster-version VERSION \
  --control-plane-soak-duration SOAK_DURATION \
  --master

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或可用區),例如 us-central1 或 us-central1-a。
  • VERSION:下一個子版本的特定修補程式。舉例來說,如果叢集執行 1.33,則 1.34.1-gke.1829001。
  • SOAK_DURATION:在復原安全階段的等待時間。 您可以使用絕對時間長度格式,將這個值設為最短 6 小時,最長 7 天,詳情請參閱 gcloud topic datetimes 的參考資料。舉例來說,如果浸泡時間為兩天一小時,請使用 2d1h。

在兩步驟升級期間測試新的二進位檔

在浸泡時間內,請確認叢集 (控制層執行新的二進位檔) 和工作負載是否正常運作。視您是否能確認工作負載與新二進位檔相容,您可以採取下列其中一個步驟:

  • 復原:如果發現新二進位檔執行的工作負載有問題,可以復原至先前的次要版本。
  • 完成升級:確認工作負載在新二進位檔上順利執行後,如要開始使用新版本的功能和 API,即可完成升級。
  • 等待:您也可以等待浸泡時間結束。之後,GKE 會執行模擬版本升級,改用新子版本的功能和 API。
觀察升級進度

如要取得升級作業進度的相關資訊,請使用下列其中一項資源:

在二進位檔版本升級後,復原兩步驟升級

在兩步驟升級期間,二進位檔版本升級後會進入觀察期。如有需要,您可以在這段期間復原至先前的子版本。GKE 執行模擬版本升級後,就無法復原。

回滾作業完成後,控制層會執行先前的次要版本,與您啟動兩階段升級作業前相同。

如要復原,請按照下列步驟操作:

  1. 執行「在叢集層級取得升級資訊」中的 gcloud CLI 指令,確認您仍可將控制層回復為先前的次要版本。根據指令輸出內容,判斷是否可以復原:

    • 如果輸出內容中有 rollbackSafeUpgradeStatus 區段,您就可以復原。在該部分中,請儲存 previousVersion,以便在下一個步驟中用於 VERSION 變數。請繼續執行下一個步驟。
    • 如果沒有 rollbackSafeUpgradeStatus 區段,就無法復原。這表示 GKE 已執行模擬版本升級。無法執行下一步。
  2. 如果上一步判斷可以復原,請復原至先前版本:

    gcloud container clusters upgrade CLUSTER_NAME \
      --location=CONTROL_PLANE_LOCATION \
      --cluster-version VERSION
      --master
    

    VERSION 必須是先前使用的確切修補程式版本。您在上一個步驟中儲存了這個版本。

執行這項指令並降級至先前的版本後,您可以判斷工作負載無法在新二進位檔上正常執行的原因。如有需要,您可以與 Cloud Customer Care 聯絡,並提供相關記錄、錯誤訊息,以及您遇到的驗證失敗詳細資料。詳情請參閱「取得支援」。

解決問題後,您可以再次手動升級至新的子版本。

完成兩步驟升級

在浸泡期間,如果您已確認工作負載可使用新二進位檔順利執行,即可略過其餘浸泡時間:

gcloud beta container clusters complete-control-plane-upgrade CLUSTER_NAME  \
  --location=CONTROL_PLANE_LOCATION

執行這個指令後,就無法降級至先前的子版本。

將控制層降級至先前的修補程式版本

  1. 降級前,請設定維護作業排除項目,防止 GKE 在降級後自動升級控制層。
  2. 將叢集控制層降級至先前的修補程式版本:

     gcloud container clusters upgrade CLUSTER_NAME \
         --master \
         --location=CONTROL_PLANE_LOCATION \
         --cluster-version=VERSION
    

停用叢集自動升級功能

GKE 非常重視基礎架構安全,因此會定期升級控制層,且無法停用這項功能。不過,您可以套用維護期間和排除項目,控管 GKE 升級控制層和節點的時間。

查看最近的控制層升級記錄

如要查看叢集近期自動升級記錄的快照,請取得叢集升級資訊。

或者,您也可以列出近期作業,查看控制層的升級時間:

gcloud container operations list --filter="TYPE:UPGRADE_MASTER AND TARGET:CLUSTER_NAME" \
    --location=CONTROL_PLANE_LOCATION

升級節點集區

根據預設,Standard 節點集區會啟用自動升級功能,而 Standard 叢集中所有 Autopilot 代管的節點集區,一律會啟用自動升級功能。節點自動升級功能可確保叢集的控制層和節點版本保持同步,並符合 Kubernetes 版本偏差政策,確保控制層與節點相容,且節點版本最多比控制層早兩個子版本。例如,Kubernetes 1.34 控制層與 Kubernetes 1.32 節點相容。根據預設,GKE 一次只會自動升級一個節點集區。如要同時自動升級多個節點集區,可以設定並行節點集區升級 (預先發布版)。

最佳做法:

請勿停用標準節點集區的節點自動升級功能,確保叢集能享有上段列出的升級優勢。

升級 GKE Standard 節點集區時,您可以選擇三種可設定的升級策略,包括節點數擴充升級、藍綠升級和自動調度資源藍綠升級 (預先發布版)。Standard 叢集中的 Autopilot 管理節點集區一律會使用突增升級。

如果是 Standard 節點集區,請選擇策略,並使用參數調整策略,以最符合叢集環境的需求。

節點升級的運作方式

節點升級期間,GKE 會停止將新 Pod 排程至該節點,並嘗試將執行中的 Pod 排程至其他節點。這與重新建立節點的其他事件類似,例如啟用或停用節點集區的功能。

在自動或手動升級節點期間,系統最多會尊重 1 小時的 Pod 中斷預算 (PDB) 和 Pod 終止寬限期。如果節點上執行的 Pod 在一小時後仍無法排定至新節點,GKE 仍會啟動升級程序。即使您將 PDB 設為一律提供所有副本 (將 maxUnavailable 欄位設為 0 或 0%,或將 minAvailable 欄位設為 100% 或副本數量),這項行為仍適用。在上述所有情況下,GKE 都會在 1 小時後刪除 Pod,以便刪除節點。

最佳做法:

如果標準節點集中的工作負載需要更彈性的正常終止機制,請使用藍綠升級,這項功能提供額外的浸泡時間設定,可將 PDB 檢查時間延長超過預設的一小時。

如要進一步瞭解節點終止期間的一般注意事項,請參閱「Pod」主題。

只有在所有節點都重新建立,且叢集處於新狀態時,升級作業才算完成。新升級的節點向控制層註冊後,GKE 會將節點標示為可排程。

新的節點執行個體會執行新的 Kubernetes 版本,以及下列項目:

節點集區中的所有節點都必須重新建立,節點集區升級作業才算完成。如果升級作業已開始,但未完成且處於部分升級狀態,節點集區版本可能無法反映所有節點的版本。詳情請參閱「節點集區升級作業不完整,導致部分節點版本與節點集區版本不符」。如要確認節點集區升級作業是否完成,請查看節點集區升級狀態。如果升級作業已超過保留期限,請確認每個個別節點版本是否與節點集區版本相符。

升級前,請先將資料儲存至永久磁碟

升級節點集區前,請務必使用永久磁碟區 (使用永久磁碟) 將需要保留的資料儲存在 Pod 中。升級期間,永久磁碟會取消掛接,而非清除,且資料會在 Pod 之間轉移。

永久磁碟的使用會受到以下限制:

  • 執行 Pod 的節點必須是 Compute Engine VM。
  • 這些 VM 必須與永久磁碟位於相同的 Compute Engine 專案和可用區。

如要瞭解如何將永久磁碟新增至現有節點執行個體,請參閱 Compute Engine 說明文件中的「新增或調整可用區永久磁碟大小」。

手動升級節點集區

您可以手動升級 Standard 節點集區或 Autopilot 代管節點集區 (位於 Standard 叢集) 的版本。您可以比照控制層的版本,或使用仍可用的舊版,只要與控制層相容即可。您可以手動同時升級多個節點集區,就像設定並行節點集區升級時,GKE 可以同時升級多個節點集區一樣。

當 GKE 升級節點集區時 (手動或自動), 您使用 kubectl 新增至個別節點的標籤可能不會保留。因此,標籤應在節點集區層級新增。

如果對 GKE 叢集進行其他類型的變更,導致節點重新建立,也會移除標籤。為避免標籤遺失,請改為將標籤套用至節點集區。

手動升級節點集區前,請先考量下列條件:

  • 升級節點集區可能會導致該節點集區中執行的工作負載中斷。為避免發生這種情況,您可以建立所需版本的新節點集區,然後遷移工作負載。遷移完成後,即可刪除舊的節點集區。
  • 如果您升級的節點集區含有錯誤狀態的 Ingress,執行個體群組就不會同步。如要解決這個問題,請先使用 kubectl get ing 指令檢查狀態。如果執行個體群組未同步,您可以重新套用用來建立 ingress 的資訊清單,藉此解決問題。

您可以手動將節點集區升級至與控制層相容的版本:

控制台

如要使用 Google Cloud 控制台升級標準節點集區,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下叢集名稱。

  3. 在「Cluster details」(叢集詳細資料) 頁面中,按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 區段中,按一下要升級的節點集區名稱。

  5. 按一下「Edit」(編輯)。

  6. 按一下「Node version」(節點版本) 下方的「Change」(變更)。

  7. 從「Node version」(節點版本) 下拉式清單中選取所需版本,然後按一下「Change」(變更)。

節點的版本可能需要幾分鐘的時間才能變更完畢。

gcloud

本節指令會使用下列變數:

  • CLUSTER_NAME:要升級的節點集區所在叢集的名稱。
  • NODE_POOL_NAME:要升級的節點集區名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或可用區),例如 us-central1 或 us-central1-a。
  • VERSION:節點升級後的 Kubernetes 版本。例如 --cluster-version=1.34.1-gke.1293000 或 cluster-version=latest。

升級節點集區:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION

如要在節點上指定不同版本的 GKE,請使用選用的 --cluster-version 標記:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION \
  --cluster-version VERSION

如要進一步瞭解如何指定版本,請參閱「版本管理」。

詳情請參閱 gcloud container clusters upgrade 說明文件。

降級節點集區

如果 GKE 已完成節點集區升級,您可以將節點集區降級。GKE 無法降級部分升級的節點集區,只能復原。如果您嘗試觸發部分升級節點集區的降級作業,GKE 不會透過該作業更新節點集區中的任何節點。如要確認節點集區是否未完全升級,且只能復原,請先檢查節點集區升級狀態。如果升級作業已取消或失敗,您可以檢查節點集區中的節點,確認是否仍有節點執行舊版本,藉此確認節點集區升級作業是否未完成。

如果節點集區升級作業未完成,且您想將升級的節點復原至先前的版本,請按照指示復原節點集區升級作業。如果節點集區升級完成後,您想還原升級,因為升級導致工作負載發生問題,可以按照本節的指示,將節點集區降級至較早的版本。降級節點集區前,請先詳閱限制。

最佳做法:

如需盡可能降低節點集區升級對工作負載的影響,請使用藍綠節點升級策略。如果升級失敗,您可以復原進行中的升級作業,回到原始節點。

  1. 為叢集設定維護排除項目,防止 GKE 在節點集區降級後自動升級。
  2. 如要降級至舊版,請按照手動升級節點集區的步驟操作,並指定舊版。

變更激增升級參數

如要進一步瞭解如何變更激增升級參數,請參閱「設定激增升級」。

設定並行節點集區升級

如果叢集有多個節點集區,您可以設定並行節點集區升級,縮短升級叢集所需的總時間。如要設定,請指定 GKE 可同時自動升級的節點集區數量上限。在標準叢集中,這項設定會決定標準節點集區和 Autopilot 代管節點集區的節點升級並行程度。在 Autopilot 叢集中,這項設定會決定節點群組的節點升級並行數。

使用 gcloud CLI 建立新叢集或更新現有叢集時,可以設定並行限制。請確認要同時自動升級的節點集區已啟用自動升級功能。

如果叢集已註冊推出作業序列,且包含自訂階段,則無法啟用這項功能。

如要設定並行節點集區升級,請執行下列任一指令:

  • 建立新叢集,並設定並行節點集區升級:

    gcloud beta container clusters create CLUSTER_NAME \
        --project=PROJECT_NAME
        --location CONTROL_PLANE_LOCATION \
        --node-pool-upgrade-concurrency-config=max-count=MAX_COUNT
    
  • 更新現有叢集,同時升級節點集區:

    gcloud beta container clusters update CLUSTER_NAME \
        --project=PROJECT_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --node-pool-upgrade-concurrency-config=max-count=MAX_COUNT
    

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • PROJECT_NAME:專案名稱。
  • LOCATION:叢集的運算位置。
  • MAX_COUNT:可同時升級的節點集區數量上限。值必須是介於 1 和 100 之間的整數。如要還原為預設的循序行為,請將這個值設為 1。

查看節點集區升級狀態

您可以使用 gcloud container operations 查看升級狀態。

如果叢集中的作業少於 5,000 項,您可以查看過去 12 天內所有執行中和已完成的作業清單;如果作業超過 5, 000 項,則會顯示最近 5,000 項作業:

gcloud container operations list \
    --location=CONTROL_PLANE_LOCATION

每個作業都會獲派一個「作業 ID」和作業類型,還有開始和結束時間、目標叢集和狀態。清單看起來類似以下範例:

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

如要取得特定作業的詳細資訊,請指定作業 ID,如下列指令所示:

gcloud container operations describe OPERATION_ID \
    --location=CONTROL_PLANE_LOCATION

例如:

gcloud container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

如果升級作業已取消或失敗,且部分完成,您可以繼續或復原升級作業。

查看節點集區升級設定

您可以使用 gcloud container node-pools describe 指令,查看節點集區使用的節點升級策略詳細資料。如果是藍綠升級,指令也會傳回升級的目前階段。

執行下列指令:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:要說明的節點集區名稱。
  • CLUSTER_NAME:要說明節點集區的叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或可用區),例如 us-central1 或 us-central1-a。

這個指令會輸出目前的升級設定。以下範例顯示使用藍綠升級策略時的輸出內容。

upgradeSettings:
  blueGreenSettings:
    nodePoolSoakDuration: 1800s
    standardRolloutPolicy:
      batchNodeCount: 1
      batchSoakDuration: 10s
  strategy: BLUE_GREEN

如果採用藍綠升級策略,輸出內容也會包含藍綠升級設定和目前中繼階段的詳細資料。請參考下列範例:

updateInfo:
  blueGreenInfo:
    blueInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{BLUE_INSTANCE_GROUP_NAME}
    bluePoolDeletionStartTime: {BLUE_POOL_DELETION_TIME}
    greenInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{GREEN_INSTANCE_GROUP_NAME} 
    greenPoolVersion: {GREEN_POOL_VERSION}
    phase: DRAINING_BLUE_POOL

取消節點集區升級

您可隨時取消升級。如要進一步瞭解取消節點數擴充升級的影響,請參閱「取消節點數擴充升級」。如要進一步瞭解取消藍綠升級的影響,請參閱「取消藍綠升級」。

  1. 取得升級作業 ID:

    gcloud container operations list \
          --location=CONTROL_PLANE_LOCATION
    
  2. 取消升級:

    gcloud container operations cancel OPERATION_ID \
          --location=CONTROL_PLANE_LOCATION
    

請參閱 gcloud container operations cancel 說明文件。

繼續升級節點集區

如要繼續升級,請手動再次啟動升級程序,並指定原始升級作業的目標版本。

舉例來說,如果升級失敗,或是您暫停了進行中的升級作業,可以再次啟動節點集區的相同升級作業,並指定初始升級作業的目標版本,藉此繼續已取消的升級作業。

如要進一步瞭解恢復升級時會發生什麼情況,請參閱「恢復節點數擴充升級」和「藍綠升級」。

如要繼續升級,請使用下列指令:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION \
  --cluster-version VERSION

更改下列內容:

  • NODE_POOL_NAME:要繼續升級的節點集區名稱。
  • CLUSTER_NAME:要繼續升級的節點集區所屬叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或可用區),例如 us-central1 或 us-central1-a。
  • VERSION:取消升級節點集區的目標版本。

詳情請參閱 gcloud container clusters upgrade 說明文件。

復原節點集區升級

您可以將節點集區復原,將升級的節點降級至節點集區升級前的原始狀態。

如果進行中的升級作業取消、失敗,或因維護期間逾時而未完成,請使用 rollback 指令。或者,如要指定版本,請按照操作說明降級節點集區。

如要進一步瞭解節點集區升級作業的復原程序,請參閱「復原節點數擴充升級作業」或「復原藍綠升級作業」。

如要復原升級,請執行下列指令:

gcloud container node-pools rollback NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:要復原節點集區升級的節點集區名稱。
  • CLUSTER_NAME:要復原升級的節點集區叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或地帶),例如 us-central1 或 us-central1-a。

請參閱 gcloud container node-pools rollback 說明文件。

完成節點集區升級

如果您採用藍綠升級策略,可以在浸泡階段完成節點集區升級,略過其餘浸泡時間。

如要瞭解如何完成節點集區升級,請參閱「完成節點集區升級」。

如要在使用藍綠升級策略時完成升級,請執行下列指令:

gcloud container node-pools complete-upgrade NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:要完成升級的節點集區名稱。
  • CLUSTER_NAME:要完成升級的節點集區所屬叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或可用區),例如 us-central1 或 us-central1-a。

請參閱 gcloud container node-pools complete-upgrade 說明文件。

已知問題

如果設定的 PodDisruptionBudget 物件無法容許任何額外中斷,節點升級可能會在多次嘗試後,仍無法升級至控制層版本。為避免發生這類失敗,建議您擴充 Deployment 或 HorizontalPodAutoscaler,讓節點在仍遵循 PodDisruptionBudget 設定的情況下,順利完成排空作業。

如要查看所有不允許任何中斷的 PodDisruptionBudget 物件,請按照下列步驟操作:

kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'

雖然自動升級可能會遇到問題,但自動升級程序會強制升級節點。不過,如果 istio-system 命名空間中的節點違反 PodDisruptionBudget,升級作業會多花一小時。

疑難排解

如要瞭解如何排解問題,請參閱「排解叢集升級問題」。

後續步驟