本文說明如何手動要求升級或降級 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.33.5-gke.1080000,您可以將控制層降級為 1.33.4-gke.1350000,前提是該版本仍可使用。
- 在兩階段控制平面次要升級期間回溯(預先發布版):只有在完成兩階段控制平面次要升級並確保回溯安全後,才能將 Kubernetes 叢集控制平面降級至先前的次要版本。如果 GKE 已完成兩階段升級的第二個步驟 (模擬版本升級),您就無法還原至先前的子版本。
- 節點集區降級:為避免節點集區升級失敗,您可以將節點集區降級至先前的修補程式版本或次要版本。請勿將節點降級至比叢集控制層版本落後超過兩個子版本的版本。
除了前幾點所述情況外,您無法降級叢集。您無法將叢集控制層降級至先前的次要版本,包括單一步驟控制層次要升級後。舉例來說,如果控制層執行的是 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 控制平面。
控制台
如要手動更新叢集控制層,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下叢集名稱。
在「Cluster basics」(叢集基本資訊) 下方,按一下「Version」(版本) 旁邊的 edit「Upgrade Available」(可升級)。
選取新版本,然後按一下「儲存變更」。
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。詳情請參閱「指定叢集版本」。
升級標準控制層後,即可升級節點。根據預設,使用 Google Cloud 控制台建立的標準節點會啟用自動升級,因此系統會自動執行這項作業。Autopilot 一律會自動升級節點。
分兩階段進行控制層子版本升級,確保回溯安全
您可以透過兩步驟升級,手動將 GKE Autopilot 或 Standard 叢集的控制層升級至下一個子版本。在這個兩步驟程序中,您可以使用前一個子版本的特徵和 API (稱為「模擬版本」),測試叢集在新子版本 (稱為「二進位版本」) 中的效能。在這段浸泡期間,控制平面會以所謂的「模擬模式」執行,您可以在必要時回復至先前的次要版本。如要進一步瞭解 Kubernetes 如何允許這類升級,請參閱Kubernetes 控制平面元件的相容版本。
兩階段升級的運作方式如下:
二進位升級:GKE 會將控制層二進位檔升級至新的次要版本,但會模擬先前的次要版本:
- 模擬舊版:叢集會執行新的二進位檔,但會繼續模擬舊版次要版本 API 的行為。舉例來說,您可以呼叫新次要版本中已移除的 API,但這些 API 仍可在先前的次要版本中使用。
- 測試新二進位檔:您可以先測試新二進位檔是否有回歸、修正和效能變更,再開放使用新次要版本提供的 Kubernetes 功能。監控應用程式指標、記錄、Pod 狀態、錯誤率和延遲時間。
- 讓變更生效:等待六小時到七天,讓自己有時間測試及監控。之後,GKE 會執行模擬版本升級。
- 復原或完成升級:您可以視需要復原升級。或者,如果您對新次要版本有信心,不想等待浸泡時間完成,且已準備好開始使用新功能和 API 變更,即可進入下一個階段。
模擬版本升級:GKE 會更新模擬版本,使其與新的二進位版本相符。
- 啟用新功能:啟用新次要版本的所有新功能和 API 變更。
- 無法復原:完成這個步驟後,您就無法復原至原始的次要版本。升級完成。
這項作業有下列限制:
- 您無法啟動控制層的單一步驟微幅升級。
- 您無法建立節點,也無法將節點升級為比模擬版本更新的版本。
- 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 會傳送
UpgradeEvent通知;二進位檔升級完成且過渡期開始時,則會傳送UpgradeInfoEvent類型的「升級作業完成」通知。 - 如要查看叢集的詳細資料 (包括升級進度),請執行
gcloud container clusters describe指令。 - 在 Cloud Logging 中查看相關記錄。
在二進位檔版本升級後,復原兩階段升級
在兩階段升級期間,二進位版本升級後會進入浸泡期。在此期間,您可以視需要復原到先前的次要版本。GKE 執行模擬版本升級後,就無法復原。
回溯作業完成後,控制層會執行先前的次要版本,與您啟動兩階段升級作業前相同。
如要還原,請按照下列步驟操作:
執行「在叢集層級取得升級資訊」一節中的 gcloud CLI 指令,確認您仍可將控制層回復至先前的次要版本。根據指令輸出內容,判斷是否可以復原:
- 如果輸出內容中有
rollbackSafeUpgradeStatus區段,您可以復原。請在該區段中儲存previousVersion,以供下一個步驟的VERSION變數使用。繼續執行下一個步驟。 - 如果沒有
rollbackSafeUpgradeStatus區段,就無法復原。 這表示 GKE 已執行模擬版本升級。你無法執行下一個步驟。
- 如果輸出內容中有
如果上一個步驟判斷可以復原,請復原至先前版本:
gcloud container clusters upgrade CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version VERSION --masterVERSION必須是先前使用的確切修補程式版本。您在上一個步驟中儲存了這個版本。
執行這項指令並降級至舊版後,您就能判斷工作負載在新版二進位檔中無法正常執行的原因。如有需要,您可以聯絡 Cloud 客戶服務,並提供相關記錄、錯誤訊息,以及您遇到的驗證失敗詳細資料。詳情請參閱「取得支援」。
解決問題後,您可以再次手動升級至新的次要版本。
完成兩步驟升級程序
在浸泡期間,如果您已確認工作負載可使用新二進位檔順利執行,即可跳過其餘浸泡時間:
gcloud beta container clusters clusters complete-control-plane-upgrade CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
執行這項指令後,您就無法再降級至先前的次要版本。
將控制層降級至較早的修補程式版本
- 降級前請先設定維護作業排除項目,避免 GKE 在降級後自動升級控制層。
將叢集控制層降級至先前的修補程式版本:
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=VERSION
停用叢集自動升級功能
GKE 非常重視基礎架構安全,因此會定期升級控制層,且無法停用這項功能。不過,您可以套用維護期間和排除時段,暫時停止升級控制層和節點。
雖然不建議,但您可以停用標準節點集區的節點自動升級功能。
查看最近的控制層升級記錄
如要查看叢集近期的自動升級記錄快照,請取得叢集升級資訊。
或者,您也可以列出近期作業,查看控制層的升級時間:
gcloud container operations list --filter="TYPE:UPGRADE_MASTER AND TARGET:CLUSTER_NAME" \
--location=CONTROL_PLANE_LOCATION
升級節點集區
根據預設,標準節點集區會啟用自動升級功能,且標準叢集中的所有 Autopilot 管理節點集區一律會啟用自動升級功能。節點自動升級功能可確保叢集的控制層和節點版本保持同步,並符合 Kubernetes 版本偏差政策,確保控制層與節點相容,且節點版本最多比控制層早兩個子版本。舉例來說,Kubernetes 1.34 控制層與 Kubernetes 1.32 節點相容。
請避免使用標準節點集區停用節點自動升級功能,確保叢集能享有上段列出的升級優勢。
使用 GKE Standard 節點集區升級時,您可以選擇三種可設定的升級策略,包括節點數擴充升級、藍綠升級和自動調度藍綠升級 (搶先版)。Standard 叢集中的 Autopilot 管理節點集區一律會使用突增升級。
如果是標準節點集區,請選擇策略,並使用參數調整策略,以充分滿足叢集環境的需求。
節點升級的運作方式
節點升級期間,GKE 會停止將新的 Pod 排定到該節點上,並嘗試將該節點上執行的 Pod 排定到其他節點上。這與重新建立節點的其他事件類似,例如啟用或停用節點集區的功能。
在節點的自動或手動升級期間,可接受的 PodDisruptionBudgets (PDB) 和 Pod 終止寬限期 最多為 1 小時。如果系統無法在 1 小時內把在節點上執行的 Pod 排定到新的節點上,GKE 仍會啟動升級作業。即使您將 PDB 設定為一律提供所有副本 (將 maxUnavailable 欄位設為 0 或 0%,或將 minAvailable 欄位設為 100% 或副本數量),這項行為仍會套用。在上述所有情況中,GKE 會在一小時後刪除 Pod,以便刪除節點。
如果在標準節點集區中執行的工作負載需要更彈性的正常終止機制,請使用藍綠升級,這項功能提供額外的浸泡時間設定,可將 PDB 檢查時間延長超過預設的一小時。
如要進一步瞭解在節點停止運作期間通常會發生什麼事,請參閱關於 Pod 的文章。
只有在所有節點都重新建立完畢且叢集處於新狀態的情況下,升級作業才算完成。當剛升級的節點向控制層註冊之後,GKE 就會將該節點標記為可排定。
新的節點執行個體會執行新的 Kubernetes 版本,以及:
如要視為完成節點集區升級,節點集區中的所有節點都必須重建。如果升級作業已開始,但未完成且處於部分升級狀態,節點集區版本可能無法反映所有節點的版本。詳情請參閱「節點集區升級作業不完整,導致部分節點版本與節點集區版本不符」。如要判斷節點集區升級是否完成,請檢查節點集區升級狀態。如果升級作業超出保留期限,請檢查每個節點版本是否與節點集區版本相符。
升級前請先將資料儲存到永久磁碟
請在升級節點集區之前,確保您要保留的資料都已經儲存在 Pod 中,且該 Pod 必須要使用位於永久磁碟中的永久磁碟區。因為在升級期間,永久磁碟只會遭到卸載,而不是遭到清除,且裡面的資料會在不同的 Pod 之間傳遞。
永久磁碟的使用會受到以下限制:
- 執行 Pod 的節點必須是 Compute Engine VM。
- 這些 VM 所屬的 Compute Engine 專案和區域,必須與永久磁碟的相同。
如要瞭解如何將永久磁碟新增到現有的節點執行個體,請參閱 Compute Engine 說明文件中的「新增或調整區域性永久磁碟大小」。
手動升級節點集區
您可以手動升級標準叢集中標準節點集區或 Autopilot 管理的節點集區版本。您可以比照控制層的版本,或是使用仍可用的舊版,但必須與控制層相容。您可以平行手動升級多個節點集區,但 GKE 一次只會自動升級一個節點集區。
手動升級節點集區時,GKE 會移除您使用 kubectl 新增至個別節點的所有標籤。為避免這種情況,請改為將標籤套用至節點集區。
手動升級節點集區前,請先考量下列條件:
- 當節點集區升級時,在該節點集區中執行的工作負載可能會受到干擾。如要避免這種情況發生,請建立採用所需版本的新節點集區,並把工作負載遷移過去,遷移完成後,即可刪除舊節點集區。
- 如果升級的節點集區含有處於錯誤狀態的 Ingress,執行個體群組就不會進行同步處理。如要解決此問題,請先使用
kubectl get ing指令檢查狀態。如果執行個體群組並未同步,則可將用於建立輸入的資訊清單重新套用,以解決此問題。
您可以手動將節點集區升級至與控制層相容的版本:
- 如為標準節點集區,可以使用 Google Cloud 控制台或 Google Cloud CLI。
如為 Autopilot 管理的節點集區,則只能使用 Google Cloud CLI。
控制台
如要使用 Google Cloud 控制台升級標準節點集區,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下叢集名稱。
在「Cluster details」(叢集詳細資料) 頁面中,按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 區段中,按一下要升級的節點集區名稱。
按一下「Edit」(編輯)edit。
按一下「Node version」(節點版本) 下方的「Change」(變更)。
從「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 說明文件。
降級節點集區
您可以降級節點集區,例如為了減輕節點集區升級失敗的影響。降級節點集區前,請先查看限制。
如果需要針對影響工作負載的節點集區升級作業,盡量降低風險,請使用藍綠節點升級策略。如果升級失敗,您可以使用這項策略復原原始節點的升級作業。
變更節點數擴充升級參數
如要進一步瞭解如何變更大量升級參數,請參閱「設定大量升級」。
檢查節點集區升級狀態
您可以使用 gcloud container operations 查看升級作業的狀態。
查看叢集中所有執行中和已完成的作業清單,最多可顯示過去 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
取消節點集區升級
您可隨時取消升級。如要進一步瞭解取消節點數擴充升級的影響,請參閱「取消節點數擴充升級」。如要進一步瞭解取消藍綠升級的影響,請參閱「取消藍綠升級」。
取得升級作業的 ID:
gcloud container operations list \ --location=CONTROL_PLANE_LOCATION取消升級:
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,升級作業就會額外耗費一小時。
疑難排解
如要瞭解如何排解問題,請參閱「排解叢集升級問題」。