TKG 服務 叢集支援輪流更新模型。可以透過變更叢集規格來起始輪流更新。某些系統作業可能會起始輪流更新。更新環境之前,您應自行熟悉輪流更新程序。

TKG 服務 3.0 之後 TKGS 叢集的輪流更新模型

TKG 服務 3.0 開始,TKG 控制器獨立於 vCenter Server主管。請參閱使用 TKG 服務。升級這些元件將不會起始 TKGS 叢集的輪流更新。

升級 TKG 服務 版本可能會觸發對 TKGS 叢集進行輪流更新。

TKG 服務 3.0 之前 TKGS 叢集的輪流更新模型

TKG 控制器在 主管 上執行。更新 主管 時,如果有可用更新,則會自動更新 TKG 控制器。每個 TKG 控制器更新可以包括支援服務 (如 CNI、CSI、CPI) 的更新以及叢集的組態更新。為了支援相容性,系統將執行預先檢查並強制執行合規性。

vSphere IaaS control plane 使用輪流更新模型來更新 主管 上的 TKG 叢集。輪流更新模型可確保將叢集更新過程的停機時間降至最低。輪流更新包括對 Kubernetes 軟體版本以及支援叢集的基礎結構和服務進行升級,例如虛擬機器組態和資源、服務和命名空間,以及自訂資源。若要成功更新,您的組態必須符合多個相容性需求,因此系統會強制執行重新檢查條件以確保叢集已準備好進行更新,並且在叢集升級失敗時支援復原。

可以透過變更叢集資訊清單的某些方面來起始 TKG 叢集的輪流更新。系統也可以起始輪流叢集更新。例如,執行 vSphere 命名空間 更新時,系統會立即將更新的組態散佈到所有工作負載叢集。這些更新可以觸發叢集節點的輪流更新。此外,對任何組態元素進行變更也可以起始輪流更新。例如,重新命名或取代與發行版本相對應的 VirtualMachineImage,會在系統嘗試取得在新映像上執行的所有節點時起始輪流更新。此外,更新 主管 可能會對在此部署的工作負載叢集觸發輪流更新。例如,如果 vmware-system-tkg-controller-manager 已更新,則系統會將新值引入資訊清單產生器,並且控制器會起始輪流更新來部署這些值。

在 Kubernetes 部署中,用於取代叢集節點的輪流更新程序與網繭的輪流更新類似。有兩個不同的控制器負責執行工作負載叢集的輪流更新:附加元件控制器和叢集控制器。在這兩個控制器內,輪流更新包括三個關鍵階段:更新附加元件、更新控制平面以及更新工作節點。這些階段按順序進行,並執行預先檢查,以防止某個步驟在上一步驟徹底完成之前開始。如果判定這些步驟是不必要的,則可將其略過。例如,更新可能僅會影響工作節點,因此不需要任何附加元件或控制平面更新。

在更新程序期間,系統會新增一個叢集節點,並等待該節點與目標 Kubernetes 版本一起上線。然後,系統會將舊節點標記為待刪除,移至下一個節點,然後重複此程序。將在所有網繭都移除後才會刪除舊節點。例如,如果為網繭定義 PodDisruptionBudgets 以阻止完全清空某個節點,則該節點會遭封鎖,但在這些網繭可收回之前不會將其移除。系統會先升級所有控制平面節點,再升級工作節點。在更新期間, 叢集狀態會變更為「正在更新」。完成輪流更新程序後, 叢集狀態會變更為「正在執行」。

在 Kubernetes 版本升級期間,在叢集上執行之不受複寫控制站管理的網繭將在叢集更新期間,於 worker 節點清空時刪除。如果已手動或透過 vSphere 命名空間或 主管 更新自動觸發叢集更新,則會出現此情況。不受複寫控制站管理的網繭包括不是做為 Deployment 或 ReplicaSet 規格一部分建立的網繭。如需詳細資訊,請參閱 Kubernetes 說明文件中的〈網繭生命週期:網繭存留時間〉

使用者起始的輪流更新

透過更新 Tanzu Kubernetes 版本 版本、更新虛擬機器類別以及更新儲存區類別,可以在 主管 上起始 TKG 叢集的輪流更新。如需詳細資訊,請參閱以下主題之一。

系統起始的輪流更新

在每個 主管 版本中,可能會對以下一或多個物件進行變更:
  • kubeadmcontrolplanetemplate/kubeadmcontrolplane
  • kubeadmconfigtemplate/kubeadmconfig
  • vspheremachinetemplate/vspheremachine (對於 vSphere 8.x)
  • wcpmachinetemplate/wcpmachine (對於 vSphere 7.x)
升級 主管 時,核心叢集 API (CAPI) 控制器將觸發對 TKG 工作負載叢集的更新首度發行,以將上述物件中的所需狀態與正在執行的工作負載叢集相配對。

vSphere IaaS control plane 中,在 主管 中執行的 TKG 控制器將產生這些物件,並使這些物件與系統代碼保持同步。這意味著,當控制器更新到較新的代碼時,對上述任何一個物件進行變更都會導致現有 TKG 叢集執行輪流更新。總之,影響 主管 的系統代碼變更會導致 TKG 叢集進行輪流更新。

下表介紹了在哪些條件下,每當升級 主管 時,都會導致工作負載叢集自動進行輪流更新。
升級案例 說明
從任何 vCenter Server 7.x 版本升級到任何 vCenter Server 版本

可能會觸發所有 Tanzu Kubernetes 叢集進行輪流更新。

vCenter Server 升級後首次升級 主管 會觸發輪流更新。同一 vCenter Server 上的 主管 升級通常不會觸發輪流更新。

如需具體詳細資料,請查看版本說明

從任何 vCenter Server 版本升級到任何 vCenter Server 8.x 版本 將觸發所有 TKG 叢集進行輪流更新,因為需要傳播以下代碼變更:
  • 基礎 CAPI 提供者需要從 CAPW 移至 CAPV
  • 將叢集從無類別 CAPI 叢集移轉到類別 CAPI 叢集
vCenter Server 8.0 GA 版本 (8.0.0) 升級到 vCenter Server 8.0.0b 或 8.0.0c 版本 如果出現以下任一情況,將觸發指定的 TKG 叢集進行輪流更新:
  • 使用具有非空 noProxy 清單的 Proxy 設定的任何 TKG 叢集。
  • 所有 TKG 叢集 (如果在 主管 上啟用了內嵌式 Habor 登錄服務)。
從 vSphere 8.0.0b 版本升級到 vSphere 8.0.0c 版本 不會自動推出工作負載叢集
從 vSphere 8.0.0c 版本升級到 vSphere 8.0 Update 1 版本 (8.0.1) 不會自動推出工作負載叢集
從任何 vSphere 8.x 版本升級到 8.0 U2 版本 (8.0.2) 這將對所有 TKC 進行輪流升級,因為需要進行以下變更:
  • vSphere 8.0 U2 包含 GCM 中 TKG 1.0 和 TKG 2.0 TKR 的 Kubernetes 層級 STIG 變更,作為 ClusterClass 的一部分。
  • 由於 1.23 及更高版本的 TKC 與 8.0 U2 相容,因此所有叢集都將進行輪流升級。
從低於 8.0 U2 (8.0.2) 的任何 vSphere 8.x 版本升級到 8.0 U2c 版本 這將對所有 TKC 進行輪流升級,因為需要進行以下變更:
  • 8.0U2 包含 GCM 中 TKG1.0 和 TKG2.0 TKR 的 k8s 層級 STIG 變更,作為 clusterclass 的一部分。
  • 由於 1.23 及更高版本的 TKC 與 8.0 P03 相容,因此所有叢集都將進行輪流升級。
此外,變更託管 TKR 映像的內容程式庫可能會觸發 TKG 叢集進行輪流更新。透過訂閱或手動新增映像不會觸發 TKG 叢集進行輪流更新。但是,變更內容程式庫並新增具有不同名稱的映像將觸發所有 TKG 叢集進行輪流更新。

例如,假設您正在使用自動使用系統定義的 OVA 名稱的已訂閱內容程式庫。然後,切換到本機內容程式庫,並在其中填入相同的 OVA,但為其指定不同的名稱。這將觸發所有 TKG 叢集進行輪流更新,因為取代內容程式庫具有相同的 OVA,但具有使用者定義的不同名稱。

具有多個節點集區的叢集的輪流更新考量事項

如果使用的是具有多個節點集區的 TKG 叢集,請考慮以下關於輪流更新的資訊。
worker 節點集區

worker 節點集區是隨 vSphere 7 U3 一起發行的 TKGS v1alpha2 API 引入的。叢集 API MachineDeployments 是 worker 節點集區的底層 Kubernetes 原語。

ClusterClass 是在 TKGS vSphere 8 版本中引入的。v1alpha3 和 v1beta1 API 均以 ClusterClass 為基礎。(v1alpha3 是 ClusterClass 上的抽象層。)

如何在輪流更新期間更新多個節點集區
更新使用多個節點集區佈建的 TKGS 工作負載叢集時,輪流更新模型因使用的 vSphere 版本而異。
vSphere TKGS API 升級行為
vSphere 7 TKGS v1alpha2 API 同一叢集中的多個節點集區將同時更新
vSphere 8 TKGS v1alpha3 API 和 v1beta1 API 同一叢集中的多個節點集區按照邏輯順序 (依序) 更新
最佳做法考量事項

佈建具有多個相同節點集區的 vSphere 8 TKGS 叢集在大小調整方面沒有任何作用。節點集區應用於不同的大小、虛擬機器類別、TKr 版本等。避免使用多個相同的節點集區來操縱系統並更快地升級叢集,因為這不起作用。

網繭中斷預算是確保升級不會干擾正在執行的應用程式的正確方法。處理此問題的最佳方法是在工作負載上設定 PodDisruptionBudgets (請參閱 https://kubernetes.io/docs/tasks/run-application/configure-pdb/)。叢集 API 遵守這些限制,如果超出臨界值,將不會終止機器。

vSphere 8 TKGS 叢集的輪流更新詳細資料
在 vSphere 8 TKGS 叢集版本更新期間:
  • 先更新控制平面節點,然後從區域 A 節點集區開始,一次輪流一個 worker 節點。如果使用兩個節點集區,則一次只能推出 1 個 worker 節點。
在叢集組態變數更新期間:
  • 先更新控制平面節點,然後每個節點集區輪流一個 worker 節點。例如,如果使用兩個節點集區,將一次推出 2 個 worker 節點。