本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes 移除、棄用和 1.26 中的重大變更

變更是 Kubernetes 生命週期中不可或缺的一部分:隨著 Kubernetes 的成長和成熟,為了專案的健全性,功能可能會被棄用、移除或以改進功能取代。對於 Kubernetes v1.26,有幾個計畫:本文根據 v1.26 版本流程中期點可用的資訊,識別並描述其中一些變更,該流程仍在進行中,並且可能會引入其他變更。

Kubernetes API 移除和棄用流程

Kubernetes 專案針對功能制定了完善的文件化棄用策略。此策略聲明,只有在同一個 API 的較新、穩定版本可用時,才能棄用穩定的 API,並且 API 在每個穩定性層級都具有最短生命週期。已棄用的 API 是指已標記為在未來 Kubernetes 版本中移除的 API;它將繼續運作直到移除(自棄用起至少一年),但使用將導致顯示警告。已移除的 API 在目前版本中不再可用,此時您必須遷移到使用替換項目。

  • 一般可用 (GA) 或穩定 API 版本可能會被標記為已棄用,但不得在 Kubernetes 的主要版本中移除。
  • Beta 或預發行 API 版本在棄用後必須支援 3 個版本。
  • Alpha 或實驗性 API 版本可能會在任何版本中移除,恕不另行通知。

無論 API 是因為功能從 beta 升級到穩定而移除,還是因為該 API 根本沒有成功,所有移除都符合此棄用策略。每當移除 API 時,都會在文件中傳達遷移選項。

關於移除 CRI v1alpha2 API 和 containerd 1.5 支援的注意事項

在採用容器執行期介面 (CRI) 和 v1.24 中[移除 dockershim]之後,CRI 是 Kubernetes 與不同容器執行期互動的受支援且有文件記錄的方式。每個 kubelet 都會與該節點上的容器執行期協商要使用的 CRI 版本。

Kubernetes 專案建議使用 CRI 版本 v1;在 Kubernetes v1.25 中,kubelet 也可以協商使用 CRI v1alpha2(它與新增對穩定 v1 介面的支援同時被棄用)。

Kubernetes v1.26 將不支援 CRI v1alpha2移除將導致在容器執行期不支援 CRI v1 的情況下,kubelet 無法註冊節點。這表示 Kubernetes 1.26 將不支援 containerd 次要版本 1.5 和更舊版本;如果您使用 containerd,您需要在將該節點升級到 Kubernetes v1.26 之前升級到 containerd 版本 1.6.0 或更高版本。其他僅支援 v1alpha2 的容器執行期同樣受到影響:如果這影響到您,您應該聯絡容器執行期供應商以取得建議,或查看其網站以取得有關如何繼續進行的更多指示。

如果您想從 v1.26 功能中受益,並且仍然使用較舊的容器執行期,您可以執行較舊的 kubelet。kubelet 的支援偏差允許您執行 v1.25 kubelet,即使您將控制平面升級到 Kubernetes 1.26 次要版本,它仍然與 v1alpha2 CRI 支援相容。

除了容器執行期本身之外,還有像 stargz-snapshotter 這樣的工具充當 kubelet 和容器執行期之間的代理,這些工具也可能受到影響。

Kubernetes v1.26 中的棄用和移除

除了上述內容外,Kubernetes v1.26 的目標是包含幾個額外的移除和棄用。

移除 v1beta1 流程控制 API 群組

FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta1 API 版本將不再在 v1.26 中提供服務。使用者應遷移資訊清單和 API 用戶端以使用 flowcontrol.apiserver.k8s.io/v1beta2 API 版本,該版本自 v1.23 起可用。

移除 v2beta2 HorizontalPodAutoscaler API

HorizontalPodAutoscaler 的 autoscaling/v2beta2 API 版本將不再在 v1.26 中提供服務。使用者應遷移資訊清單和 API 用戶端以使用 autoscaling/v2 API 版本,該版本自 v1.23 起可用。

移除樹狀結構內憑證管理程式碼

在即將發布的版本中,作為 Kubernetes 一部分的舊版供應商特定身份驗證程式碼將從 client-gokubectl移除。現有機制支援兩個特定雲端供應商的身份驗證:Azure 和 Google Cloud。Kubernetes 已經提供供應商中立的身份驗證外掛程式機制來取代它 - 您現在就可以切換,在 v1.26 版本發布之前。如果您受到影響,您可以找到有關如何繼續進行的更多指南,適用於 AzureGoogle Cloud

移除 kube-proxy 使用者空間模式

userspace Proxy 模式已棄用一年多,不再在 Linux 或 Windows 上支援,並將在此版本中移除。使用者應在 Linux 上使用 iptablesipvs,或在 Windows 上使用 kernelspace:現在使用 --mode userspace 將會失敗。

移除樹狀結構內 OpenStack 雲端供應商

Kubernetes 正在從用於儲存整合的樹狀結構內程式碼切換到 Container Storage Interface (CSI)。作為此過程的一部分,Kubernetes v1.26 將移除已棄用的 OpenStack 樹狀結構內儲存整合(cinder 卷類型)。您應該遷移到外部雲端供應商和 CSI 驅動程式,網址為 https://github.com/kubernetes/cloud-provider-openstack。如需更多資訊,請造訪 Cinder 樹狀結構內到 CSI 驅動程式的遷移

移除 GlusterFS 樹狀結構內驅動程式

樹狀結構內 GlusterFS 驅動程式在 v1.25 中已棄用,並將從 Kubernetes v1.26 中移除。

棄用不具包容性的 kubectl 旗標

作為包容性命名倡議實施工作的一部分,--prune-whitelist 旗標將被棄用,並替換為 --prune-allowlist。強烈建議使用此旗標的使用者在未來版本中最終移除該旗標之前進行必要的變更。

移除動態 Kubelet 組態

動態 kubelet 組態允許透過 Kubernetes API 推出新的 kubelet 組態,即使在即時叢集中也是如此。叢集運營商可以透過指定包含 kubelet 應使用之組態資料的 ConfigMap 來重新組態節點上的 kubelet。動態 kubelet 組態已從 v1.24 中的 kubelet 中移除,並將在 v1.26 版本中從 API 伺服器中移除

kube-apiserver 命令列引數的棄用

kube-apiserver--master-service-namespace 命令列引數沒有任何作用,並且已經非正式地棄用。該命令列引數將在 v1.26 中正式標記為已棄用,為未來版本中的移除做準備。Kubernetes 專案預計此棄用和移除不會產生任何影響。

kubectl run 命令列引數的棄用

kubectl run 子命令的幾個未使用的選項引數將被標記為已棄用,包括

  • --cascade
  • --filename
  • --force
  • --grace-period
  • --kustomize
  • --recursive
  • --timeout
  • --wait

這些引數已被忽略,因此預計不會產生任何影響:明確的棄用設定了警告訊息,並為未來版本中移除這些引數做準備。

移除與日誌記錄相關的舊版命令列引數

Kubernetes v1.26 將移除一些與日誌記錄相關的命令列引數。這些命令列引數已被棄用。如需更多資訊,請參閱 棄用 Kubernetes 元件中的 klog 特定旗標

展望未來

計劃在 Kubernetes 1.27 中移除的 API 官方清單包括

  • CSIStorageCapacity API 的所有 beta 版本;具體而言:storage.k8s.io/v1beta1

想瞭解更多資訊嗎?

棄用會在 Kubernetes 版本說明中宣布。您可以在以下版本的版本說明中查看待處理棄用的公告

我們將在 Kubernetes 1.26 的 CHANGELOG 中正式宣布該版本附帶的棄用。