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

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

變更是 Kubernetes 生命週期中不可或缺的一部分:隨著 Kubernetes 的發展和成熟,為了專案的健康,某些功能可能會被棄用、移除或被改進版本所取代。對於 Kubernetes v1.26,有幾個計劃中的變更:本文根據 v1.26 釋出過程中期可用的資訊,識別並描述了其中的一些變更。v1.26 的釋出過程仍在進行中,可能會引入額外的變更。

Kubernetes API 移除和棄用流程

Kubernetes 專案對其功能有一份詳細的棄用策略。該策略規定,只有在同一 API 的更新、穩定版本可用時,才能棄用穩定的 API,並且 API 在每個穩定性級別都有一個最短的生命週期。被棄用的 API 是指已被標記為將在未來 Kubernetes 版本中移除的 API;它將繼續工作直到被移除(從棄用之日起至少一年),但使用時會顯示警告資訊。被移除的 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 將不會註冊該節點。這意味著 containerd 的 1.5 及更早的次要版本將不被 Kubernetes 1.26 支援;如果你使用 containerd,你需要在將該節點升級到 Kubernetes v1.26 之前,升級到 containerd 1.6.0 或更高版本。其他只支援 v1alpha2 的容器執行時同樣受到影響:如果這對你有影響,你應該聯絡容器執行時供應商尋求建議,或檢視他們的網站以獲取有關如何繼續操作的額外說明。

如果你想利用 v1.26 的功能但仍使用舊的容器執行時,你可以執行一箇舊版本的 kubelet。支援的版本偏差允許你執行 v1.25 版本的 kubelet,它仍然與 v1alpha2 CRI 支援相容,即使你將控制平面升級到 Kubernetes 的 1.26 次要版本。

除了容器執行時本身,還有一些工具,如 stargz-snapshotter,它們在 kubelet 和容器執行時之間充當代理,這些工具也可能受到影響。

Kubernetes v1.26 中的棄用和移除

除了以上內容,Kubernetes v1.26 計劃包括幾個額外的移除和棄用。

移除 v1beta1 flow control 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 模式

userspace 代理模式已被棄用超過一年,在 Linux 和 Windows 上均不再支援,並將在此版本中被移除。使用者在 Linux 上應使用 iptablesipvs,在 Windows 上應使用 kernelspace:現在使用 --mode userspace 將會導致失敗。

移除樹內 OpenStack 雲提供商

Kubernetes 正在從使用樹內程式碼進行儲存整合轉向使用容器儲存介面(CSI)。作為這一轉變的一部分,Kubernetes v1.26 將移除已棄用的 OpenStack 的樹記憶體儲整合(cinder 卷型別)。你應該遷移到使用來自 https://github.com/kubernetes/cloud-provider-openstack 的外部雲提供商和 CSI 驅動。更多資訊,請訪問Cinder in-tree to CSI driver migration

移除 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帶來的棄用,作為該版本變更日誌的一部分。