本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes v1.27 中的移除和重大變更
隨著 Kubernetes 的發展和成熟,為了專案的整體健康,一些特性可能會被棄用、移除或替換為更好的特性。基於 v1.27 釋出流程中目前可用的資訊(該流程仍在進行中,可能會引入其他變更),本文將識別並描述 Kubernetes v1.27 版本的一些計劃變更。
關於 k8s.gcr.io 重定向到 registry.k8s.io 的說明
為了託管其容器映象,Kubernetes 專案使用一個名為 registry.k8s.io 的社群自有映象倉庫。從 3 月 20 日起,所有來自過時的 k8s.gcr.io 倉庫的流量將被重定向到 registry.k8s.io。已棄用的 k8s.gcr.io 倉庫將最終被淘汰。
這項變更意味著什麼?
如果你是子專案的維護者,你必須更新你的清單(manifests)和 Helm charts 以使用新的倉庫。
Kubernetes v1.27 版本將不會發布到舊的倉庫。
從四月起,v1.24、v1.25 和 v1.26 的補丁版本將不再發布到舊的倉庫。
我們有一篇博文,其中包含了關於此項變更的所有資訊以及如果它對你產生影響該怎麼辦。
Kubernetes API 移除和棄用流程
Kubernetes 專案對特性有明確的棄用策略。該策略規定,穩定的 API 只有在同一 API 的更新、穩定版本可用時才能被棄用,並且 API 在每個穩定性級別都有一個最短生命週期。被棄用的 API 已被標記為將在未來的 Kubernetes 版本中移除,它將繼續工作直到被移除(從棄用之日起至少一年),但使用時會顯示警告。被移除的 API 在當前版本中不再可用,此時你必須遷移到使用替代方案。
正式釋出(GA)或穩定的 API 版本可能會被標記為已棄用,但不能在 Kubernetes 的一個大版本中移除。
Beta 或預釋出 API 版本在棄用後必須支援 3 個版本。
Alpha 或實驗性 API 版本可能在任何版本中被移除,而無需事先通知。
無論一個 API 是因為特性從 Beta 階段畢業到穩定階段而被移除,還是因為該 API 就是不成功,所有的移除都遵守這個棄用策略。每當一個 API 被移除時,遷移選項都會在文件中進行溝通。
Kubernetes v1.27 的 API 移除和其他變更
從 CSIStorageCapacity
中移除 storage.k8s.io/v1beta1
CSIStorageCapacity API 支援透過 CSIStorageCapacity 物件暴露當前可用的儲存容量,並增強了使用延遲繫結(late binding)的 CSI 卷的 Pod 的排程。CSIStorageCapacity 的 storage.k8s.io/v1beta1
API 版本在 v1.24 中被棄用,並且在 v1.27 中將不再提供服務。
請將清單和 API 客戶端遷移到使用 storage.k8s.io/v1
API 版本,該版本自 v1.24 起可用。所有現有的持久化物件都可以透過新的 API 訪問。
有關更多資訊,請參閱 Pod 排程的儲存容量約束 KEP。
Kubernetes v1.27 沒有移除任何其他 API;但是,其他幾個方面將被移除。請繼續閱讀以瞭解詳情。
停止支援已棄用的 seccomp 註解
在 Kubernetes v1.19 中,seccomp(安全計算模式)支援畢業為正式釋出(GA)。該功能可用於透過限制 Pod(適用於所有容器)或單個容器的系統呼叫來提高工作負載的安全性。
對 Alpha 版本的 seccomp 註解 seccomp.security.alpha.kubernetes.io/pod
和 container.seccomp.security.alpha.kubernetes.io
的支援自 v1.19 起已被棄用,現在已完全移除。當建立帶有 seccomp 註解的 Pod 時,seccomp 欄位將不再自動填充。Pod 應改為使用相應的 Pod 或容器的 securityContext.seccompProfile
欄位。
移除幾個用於卷擴充套件的特性門控
以下用於卷擴充套件 GA 功能的特性門控將被移除,並且不得再在 --feature-gates
標誌中引用:
ExpandCSIVolumes
- 啟用 CSI 卷的擴充套件。
ExpandInUsePersistentVolumes
- 啟用擴充套件正在使用的 PVC。
ExpandPersistentVolumes
- 啟用持久卷的擴充套件。
移除 --master-service-namespace
命令列引數
kube-apiserver 接受一個已棄用的命令列引數 --master-service-namespace
,該引數指定了在哪裡建立名為 kubernetes
的 Service 來代表 API 伺服器。Kubernetes v1.27 將移除該引數,該引數自 v1.26 版本起已被棄用。
移除 ControllerManagerLeaderMigration
特性門控
領導者遷移提供了一種機制,透過該機制,高可用性(HA)叢集可以在升級複製的控制平面時,透過 kube-controller-manager
和 cloud-controller-manager
之間共享的資源鎖,安全地遷移“雲特定”的控制器。
ControllerManagerLeaderMigration
特性自 v1.24 起為 GA,現已無條件啟用,在 v1.27 版本中,該特性門控選項將被移除。如果你明確設定了此特性門控,你需要從命令列引數或配置檔案中移除它。
移除 --enable-taint-manager
命令列引數
kube-controller-manager 的命令列引數 --enable-taint-manager
已被棄用,並將在 Kubernetes v1.27 中移除。它所支援的功能,即基於汙點的驅逐,已經預設啟用,並且在該標誌被移除後將繼續被隱式啟用。
移除 --pod-eviction-timeout
命令列引數
已棄用的命令列引數 --pod-eviction-timeout
將從 kube-controller-manager 中移除。
移除 CSI Migration
特性門控
CSI 遷移計劃允許從樹內(in-tree)卷外掛遷移到樹外(out-of-tree)CSI 驅動。CSI 遷移自 Kubernetes v1.16 起普遍可用,相關的 CSIMigration
特性門控將在 v1.27 中被移除。
移除 CSIInlineVolume
特性門控
CSI 臨時卷功能允許在 Pod 規範中直接指定 CSI 卷以用於臨時場景。它們可用於透過掛載的卷直接向 Pod 內部注入任意狀態,如配置、金鑰、身份、變數或類似資訊。此功能在 v1.25 中畢業為 GA。因此,特性門控 CSIInlineVolume
將在 v1.27 版本中被移除。
移除 EphemeralContainers
特性門控
臨時容器在 v1.25 中畢業為 GA。這些是具有臨時生命週期的容器,在現有 Pod 的名稱空間內執行。臨時容器通常由使用者啟動,以便觀察其他 Pod 和容器的狀態,用於故障排除和除錯目的。對於 Kubernetes v1.27,臨時容器的 API 支援是無條件啟用的;EphemeralContainers
特性門控將被移除。
移除 LocalStorageCapacityIsolation
特性門控
本地臨時儲存容量隔離功能在 v1.25 中進入 GA 階段。該功能支援 Pod 之間的本地臨時儲存容量隔離,例如 emptyDir
卷,這樣可以硬性限制 Pod 對共享資源的消耗。如果本地臨時儲存的消耗超過配置的限制,kubelet 將驅逐 Pod。特性門控 LocalStorageCapacityIsolation
將在 v1.27 版本中被移除。
移除 NetworkPolicyEndPort
特性門控
Kubernetes v1.25 版本將 NetworkPolicy 中的 endPort
提升為 GA。支援 endPort
欄位的網路策略提供程式可以使用該欄位來指定應用網路策略的埠範圍。以前,每個 NetworkPolicy 只能針對單個埠。因此,特性門控 NetworkPolicyEndPort
將在此版本中被移除。
請注意,endPort
欄位必須得到網路策略提供程式的支援。如果你的提供程式不支援 endPort
,並且在網路策略中指定了該欄位,那麼建立的網路策略將只覆蓋 port 欄位(單個埠)。
移除 StatefulSetMinReadySeconds
特性門控
對於屬於 StatefulSet 的 Pod,只有當 Pod 在你在 minReadySeconds
中指定的週期內可用(並透過檢查)時,Kubernetes 才能將其標記為就緒。該功能在 Kubernetes v1.25 中普遍可用,StatefulSetMinReadySeconds
特性門控將被鎖定為 true 並在 v1.27 版本中被移除。
移除 IdentifyPodOS
特性門控
你可以為 Pod 指定作業系統,該功能的支援自 v1.25 版本起已穩定。IdentifyPodOS
特性門控將在 Kubernetes v1.27 中被移除。
移除 DaemonSetUpdateSurge
特性門控
Kubernetes v1.25 版本還穩定了對 DaemonSet Pod 的浪湧(surge)支援,旨在最小化 DaemonSet 在部署過程中的停機時間。DaemonSetUpdateSurge
特性門控將在 Kubernetes v1.27 中被移除。
移除 --container-runtime
命令列引數
kubelet 接受一個已棄用的命令列引數 --container-runtime
,在 dockershim 程式碼被移除後,唯一有效的值將是 remote
。Kubernetes v1.27 將移除該引數,該引數自 v1.24 版本起已被棄用。
展望未來
計劃在 Kubernetes v1.29 中移除的 API 的官方列表包括:
- FlowSchema 和 PriorityLevelConfiguration 的
flowcontrol.apiserver.k8s.io/v1beta2
API 版本將不再在 v1.29 中提供服務。
想了解更多嗎?
棄用資訊會在 Kubernetes 發行說明中公佈。你可以在以下版本的發行說明中看到待棄用功能的公告:
我們將在 Kubernetes v1.27 的釋出日誌(CHANGELOG)中正式宣佈該版本附帶的棄用項。
有關棄用和移除過程的資訊,請檢視官方的 Kubernetes 棄用策略文件。