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

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 移除、棄用和其他變更

如何應對

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

kubectlkubectl 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 棄用策略文件。