本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 1.24 中的移除和棄用
隨著 Kubernetes 的發展,特性和 API 會被定期重新審視和移除。新的特性可能會為解決現有問題提供替代或改進的方法,從而促使團隊移除舊方法。
我們希望確保您瞭解 Kubernetes 1.24 版本中即將發生的變化。該版本將**棄用**幾個(beta)API,以支援相同 API 的穩定版本。Kubernetes 1.24 版本中即將發生的主要變化是移除 Dockershim。下文將對此進行討論,並將在釋出時進行更深入的探討。要提前瞭解 Kubernetes 1.24 中即將發生的變化,請檢視進行中的變更日誌。
關於 Dockershim 的說明
可以說,在 Kubernetes 1.24 版本中最受關注的移除是 Dockershim。Dockershim 在 v1.20 中被棄用。正如Kubernetes 1.20 變更日誌中所述:“kubelet 中的 Docker 支援現已棄用,並將在未來的版本中移除。kubelet 使用一個名為‘dockershim’的模組,該模組為 Docker 實現了 CRI 支援,但在 Kubernetes 社群中遇到了維護問題。” 隨著 Kubernetes 1.24 的即將釋出,Dockershim 將最終被移除。
在文章《不要恐慌:Kubernetes 和 Docker》中,作者簡潔地概括了這一變化的影響,並鼓勵使用者保持冷靜
作為底層執行時的 Docker 正在被棄用,取而代之的是使用為 Kubernetes 建立的容器執行時介面(CRI)的執行時。Docker 生成的映象將繼續在您的叢集中與所有執行時一起工作,一如既往。
已經建立了幾個指南,其中包含有關從 dockershim 遷移到與 Kubernetes 直接相容的容器執行時的有用資訊。您可以在 Kubernetes 文件的從 dockershim 遷移頁面上找到它們。
有關 Kubernetes 為何要放棄 dockershim 的更多資訊,請檢視恰如其名的《Kubernetes 正在告別 Dockershim》以及更新的 dockershim 移除常見問題解答。
請檢視《您的叢集準備好迎接 v1.24 了嗎?》一文,瞭解如何確保您的叢集在從 v1.23 升級到 v1.24 後繼續正常工作。
Kubernetes API 移除和棄用流程
Kubernetes 包含大量隨時間演進的元件。在某些情況下,這種演進會導致 API、標誌或整個特性被移除。為了防止使用者面臨破壞性更改,Kubernetes 貢獻者採納了特性棄用策略。該策略確保穩定的 API 只有在同一 API 的更新穩定版本可用時才可被棄用,並且 API 具有由以下穩定性級別指示的最低生命週期
- 正式釋出(GA)或穩定的 API 版本可能會被標記為已棄用,但不能在 Kubernetes 的一個大版本中移除。
- Beta 或預釋出 API 版本在棄用後必須再支援 3 個版本。
- Alpha 或實驗性 API 版本可能在任何版本中被移除,而無需事先通知。
無論 API 是因為 beta 特性升級為穩定版而被移除,還是因為該 API 未被證明是成功的,移除都遵循相同的棄用策略。Kubernetes 將繼續確保在移除 API 時記錄遷移選項。
已棄用的 API 是指那些已被標記為將在未來的 Kubernetes 版本中移除的 API。已移除的 API 是指在被棄用後,在當前支援的 Kubernetes 版本中不再可用的 API。這些移除已被更新的、穩定/正式釋出(GA)的 API 所取代。
Kubernetes 1.24 的 API 移除、棄用和其他變更
- 動態 kubelet 配置:
DynamicKubeletConfig
用於啟用 kubelet 的動態配置。DynamicKubeletConfig
標誌在 Kubernetes 1.22 中被棄用。在 v1.24 中,此特性門控將從 kubelet 中移除。有關更多資訊,請參閱“動態 kubelet 配置被移除” KEP。 - 動態日誌清理:實驗性的動態日誌清理功能已被棄用,並將在 v1.24 中移除。該功能引入了一個日誌過濾器,可以應用於所有 Kubernetes 系統元件的日誌,以防止各種型別的敏感資訊透過日誌洩露。有關更多資訊和替代方法,請參閱KEP-1753:Kubernetes 系統元件日誌清理。
- 從 kubelet 中移除 Dockershim:Docker 的容器執行時介面(CRI)(即 Dockershim)目前是 kubelet 程式碼庫中的一個內建容器執行時。它在 v1.20 中被棄用。從 v1.24 開始,kubelet 將不再包含 dockershim。請檢視這篇關於為 v1.24 做好準備需要做什麼的部落格文章。
- 用於 Pod 排程的儲存容量跟蹤:CSIStorageCapacity API 支援透過 CSIStorageCapacity 物件暴露當前可用的儲存容量,並增強了使用延遲繫結的 CSI 卷的 Pod 的排程。在 v1.24 中,CSIStorageCapacity API 將達到穩定。該 API 升級為穩定版將啟動 v1beta1 CSIStorageCapacity API 的棄用過程。有關更多資訊,請參閱用於 Pod 排程的儲存容量約束 KEP。
master
標籤不再出現在 kubeadm 控制平面節點上。對於新叢集,標籤 'node-role.kubernetes.io/master' 將不再新增到控制平面節點,只會新增標籤 'node-role.kubernetes.io/control-plane'。有關更多資訊,請參閱 KEP-2067:重新命名 kubeadm 的 "master" 標籤和汙點。- VolumeSnapshot v1beta1 CRD 將被移除。用於 Kubernetes 和容器儲存介面 (CSI) 的卷快照和恢復功能在 v1.20 中進入 GA 階段,該功能提供了標準化的 API 設計(CRD)併為 CSI 卷驅動程式添加了 PV 快照/恢復支援。VolumeSnapshot v1beta1 在 v1.20 中被棄用,並將在 v1.24 版本中變得不受支援。有關更多資訊,請參閱 KEP-177:CSI 快照和卷快照 GA 部落格文章。
如何應對
Dockershim 移除
如前所述,有幾個關於從 dockershim 遷移的指南。您可以從查詢節點上的容器執行時開始。如果您的節點正在使用 dockershim,可能還存在其他 Docker Engine 依賴項,例如執行 Docker 命令的 Pod 或第三方工具,或 Docker 配置檔案中的私有倉庫。您可以按照檢查 Dockershim 移除是否影響您的指南來審查可能的 Docker Engine 依賴項。在升級到 v1.24 之前,您可以決定是繼續使用 Docker Engine 並將 Docker Engine 節點從 dockershim 遷移到 cri-dockerd,還是遷移到一個 CRI 相容的執行時。這裡有一個指南,介紹如何將節點上的容器執行時從 Docker Engine 更改為 containerd。
kubectl convert
kubectl
的 kubectl convert
外掛可以幫助解決遷移已棄用 API 的問題。該外掛有助於在不同 API 版本之間轉換清單檔案,例如,從一個已棄用的 API 版本轉換到一個未棄用的 API 版本。有關 API 遷移過程的更多一般資訊,請參閱已棄用 API 遷移指南。請按照安裝 kubectl convert
外掛的文件下載並安裝 kubectl-convert
二進位制檔案。
展望未來
計劃於今年晚些時候釋出的 Kubernetes 1.25 和 1.26 版本將停止提供幾個當前已穩定的 Kubernetes API 的 beta 版本。v1.25 版本還將移除 PodSecurityPolicy,該策略在 Kubernetes 1.21 中被棄用,並且不會升級為穩定版。有關更多資訊,請參閱PodSecurityPolicy 棄用:過去、現在和未來。
計劃在 Kubernetes 1.25 中移除的 API 的官方列表是
- beta CronJob API (batch/v1beta1)
- beta EndpointSlice API (discovery.k8s.io/v1beta1)
- beta Event API (events.k8s.io/v1beta1)
- beta HorizontalPodAutoscaler API (autoscaling/v2beta1)
- beta PodDisruptionBudget API (policy/v1beta1)
- beta PodSecurityPolicy API (policy/v1beta1)
- beta RuntimeClass API (node.k8s.io/v1beta1)
計劃在 Kubernetes 1.26 中移除的 API 的官方列表是
- beta FlowSchema 和 PriorityLevelConfiguration API (flowcontrol.apiserver.k8s.io/v1beta1)
- beta HorizontalPodAutoscaler API (autoscaling/v2beta2)
想了解更多嗎?
棄用資訊會在 Kubernetes 發行說明中公佈。你可以在以下版本的發行說明中看到待棄用功能的公告:
- Kubernetes 1.21
- Kubernetes 1.22
- Kubernetes 1.23
- 我們將作為 Kubernetes 1.24 該版本的變更日誌的一部分,正式宣佈隨之而來的棄用。
有關棄用和移除過程的資訊,請檢視官方的 Kubernetes 棄用策略文件。