Kubernetes v1.35:Timbernetes(世界樹發佈)

新聞
HongKong
4
11:10 AM · Dec 18 ,2025

Kubernetes v1.35(Timbernetes)現已發佈,本次發佈包含 60 項改進,其中 17 項為穩定功能,19 項 Beta 功能,22 項 Alpha 功能,也有一些廢棄和移除內容。

發佈主題與 logo

2025 年始於 Octarine(魔法之色,v1.33)的光輝,經歷了風與意志的洗禮(v1.34)。年終之際,我們雙手觸摸着世界樹,靈感源自連接眾多領域的生命之樹 Yggdrasil。像任何一棵偉大的樹一樣,Kubernetes 一圈一圈地生長,一版一版地發展,由全球社區的關愛塑造。

樹的中心是環繞地球的 Kubernetes 輪,基石是那些始終堅守的維護者、貢獻者和用户。他們在日常工作、生活變遷和穩定的開源管理之間,修剪舊 API,嫁接新功能,保持這個全球最大開源項目的健康。

三隻松鼠守護着這棵樹:持有 LGTM 卷軸的法師代表審查者,揮舞戰斧和 Kubernetes 盾牌的戰士代表發佈團隊,提燈的盜賊代表問題分類者,為黑暗的問題隊列帶來光明。

他們象徵着龐大的冒險團隊。Kubernetes v1.35 為世界樹增添了新的一圈年輪,眾多雙手和多條道路共同塑造,讓樹枝更高,根基更深。

重點更新

Kubernetes v1.35 集成了豐富的新功能和改進。以下是發佈團隊特別推薦的部分更新:

穩定功能:Pod 資源就地更新

Pod 資源就地更新功能現已畢業為穩定版(GA),允許用户調整 CPU 和內存資源,無需重啓 Pod 或容器。過去必須重新創建 Pod,可能影響狀態應用或批處理工作負載。以前只能更改 Pod 的請求和限制等基礎設施資源設置。新功能支持無中斷的垂直擴縮,提升效率,也簡化了開發流程。

Beta 功能:Pod 證書實現工作負載身份和安全

以前,為 Pod 配發證書需要外部控制器(cert-manager、SPIFFE/SPIRE)、CRD 協調和 Secret 管理,證書輪換依賴 sidecar 或初始化容器。Kubernetes v1.35 原生支持工作負載身份並自動輪換證書,大幅簡化了服務網格和零信任架構。

現在,kubelet 生成密鑰,通過 PodCertificateRequest 請求證書,並將憑據直接寫入 Pod 文件系統。kube-apiserver 在准入時強制節點限定,避免第三方簽名器常見的節點隔離邊界問題,從而支持純 mTLS 流程,無需發行路徑中攜帶令牌。

Alpha 功能:調度前節點聲明特性

當控制平面啓用新特性但節點版本滯後(根據 Kubernetes 版本跳躍策略允許)時,調度器可能會將需要新特性的 Pod 調度到不兼容的舊節點上。節點聲明特性框架讓節點能夠聲明支持的 Kubernetes 特性。啓用該 Alpha 功能後,節點通過新字段 .status.declaredFeatures 報告支持的特性,控制平面調度器、准入控制器及第三方組件可以據此做調度和 API 校驗,保證 Pod 只運行在兼容節點上。

穩定功能精選

以下是 v1.35 發佈後部分功能正式穩定的介紹:

PreferSameNode 流量分發

Service 的 trafficDistribution 字段更新,新增 PreferSameNode 選項,優先使用本地節點的端點,若無則回退到遠程端點。

同時,舊的 PreferClose 選項改名為 PreferSameZone,更加明確表示優先使用同可用區內的端點。PreferClose 仍保留以兼容舊版本,但 PreferSameZone 現為區域級路由的標準,節點級和區域級偏好區分清楚。

Job API 的 managed-by 機制

Job API 增加 managedBy 字段,允許外部控制器同步 Job 狀態。此功能在 v1.35 正式穩定,主要由 MultiKueue 驅動——一個多集羣調度系統,管理集羣創建 Job,工作集羣執行並同步狀態。內置 Job 控制器將不再處理帶有 managedBy 字段的 Job,改由 Kueue 控制器管理狀態同步。

該功能旨在實現 Job 同步的清晰委託,不用於傳遞自定義參數或修改 CronJob 併發策略。

通過 .metadata.generation 可靠跟蹤 Pod 更新

Pod API 過去缺少 .metadata.generation 字段,導致控制器和用户無法準確判斷 kubelet 是否已處理最新的 Pod 規格修改,尤其影響 In-Place Pod 垂直擴縮功能。

Kubernetes v1.33 已引入該字段的 Alpha 支持,v1.35 使其穩定。每次更新 Pod 規格,.metadata.generation 數值遞增。Pod API 還新增 .status.observedGeneration 字段,報告 kubelet 已處理的版本。Pod 條件中也包含各自的 observedGeneration,方便客户端報告和觀察。

拓撲管理器支持可配置 NUMA 節點限制

拓撲管理器之前硬編碼支持最多 8 個 NUMA 節點,防止親和計算時狀態爆炸。(NUMA 節點和 Kubernetes API 中的 Node 不同。)這一限制阻礙了對現代多 NUMA 節點高端服務器的充分利用。

v1.31 引入 max-allowable-numa-nodes 選項(Beta),v1.35 該選項穩定。開啓後,集羣管理員可使用超過 8 個 NUMA 節點的服務器。

儘管該配置穩定,社區仍關注大 NUMA 主機性能問題,計劃通過 KEP-5726 進一步優化。詳情參見節點上的拓撲管理策略控制。

Beta 中的新功能

以下是 v1.35 版本發佈後進入 Beta 階段的一些改進。

通過 Downward API 暴露節點拓撲標籤

以前,Pod 內訪問節點拓撲信息(如區域和可用區)通常需要調用 Kubernetes API 服務器。這雖可用,但增加了複雜性和安全風險,因為需要較寬權限或 sidecar 容器來獲取基礎設施元數據。Kubernetes v1.35 將通過 Downward API 直接暴露節點拓撲標籤的功能升級為 Beta。

kubelet 現在可以將標準拓撲標籤(如 topology.kubernetes.io/zone 和 topology.kubernetes.io/region)注入 Pod,作為環境變量或投影卷文件。這樣,應用可以更安全、高效地感知拓撲,無需依賴 API 服務器,遵循最小權限原則,簡化集羣配置。

注意:Kubernetes 現在會把可用拓撲標籤注入到每個 Pod,v1.35 升級後,集羣管理員會看到每個 Pod 多了幾個新標籤,這是設計行為。

原生支持存儲版本遷移

v1.35 中,存儲版本遷移原生支持升級為 Beta,默認啓用。遷移邏輯集成進核心控制平面,擺脱了對外部工具的依賴。

過去管理員通常通過手工“讀寫循環”更新 schema 或重新加密數據,效率低且易衝突。新版內置控制器自動處理衝突和一致性令牌,安全可靠,運維負擔更輕。

可變的卷掛載限制

CSI 驅動是 Kubernetes 插件,提供統一的存儲訪問方式。CSINode 對象記錄節點上安裝的所有 CSI 驅動信息。但實際掛載容量和報告容量可能不匹配,導致調度時出現問題,Pod 可能卡在 ContainerCreating 狀態。

v1.35 允許動態修改 CSINode.spec.drivers[*].allocatable.count,支持通過 CSIDriver 對象配置刷新間隔。遇到容量不足導致的掛載失敗時,會自動更新。該功能在 v1.34 已 Beta(默認關閉),v1.35 默認啓用,繼續收集反饋。

機會批處理調度

過去,調度器按順序處理 Pod,複雜度為 O(節點數 ×Pod 數),兼容 Pod 之間存在冗餘計算。該 KEP 引入機會批處理機制,通過 Pod 調度簽名識別兼容 Pod,將它們批量處理,共享過濾和評分結果。

調度簽名不僅考慮 Pod 和節點屬性,還會考慮系統中其他 Pod 及全局放置數據。具有相同簽名的 Pod 會獲得相同的調度結果。

批處理機制包括 create 和 nominate 兩個操作,分別用於創建批處理信息和基於簽名設置被提名節點。

StatefulSets 的 maxUnavailable 支持

StatefulSet 管理一組有粘性身份的 Pod,適合有狀態應用。RollingUpdate 策略下,Pod 按序逐個刪除和重建。

v1.24 引入了 rollingUpdate 的 alpha 字段 maxUnavailable,用於定義更新時最大不可用 Pod 數,需管理員手動啓用。v1.35 將其升級為 Beta 並默認啓用,支持數字或百分比形式。默認值為 1,保持之前行為。配合 podManagementPolicy 設為 Parallel,能加速更新。

kuberc 中可配置的憑證插件策略

kuberc 文件允許將服務器配置和集羣憑證與用户偏好分離,避免破壞已有 CI 流水線。

v1.35 新增憑證插件策略配置,支持 credentialPluginPolicy 字段(允許或拒絕所有插件),及 credentialPluginAllowlist(允許插件列表)。

KYAML

YAML 是人類可讀的數據序列化格式,Kubernetes 使用 YAML 定義資源,但複雜 YAML 難讀,縮進敏感且字符串引用不穩定。

KYAML 是 Kubernetes 專用的更安全、無歧義的 YAML 子集。v1.34 作為 alpha 引入,v1.35 升級為 Beta 並默認啓用,可通過環境變量關閉。

KYAML 兼容 YAML 和 JSON,所有 KYAML 文件也是有效的 YAML,可用於任意版本 kubectl。

HorizontalPodAutoscalers 可配置容差

HPA 之前使用固定的 10% 容差,敏感負載難以精細調整,導致擴縮容不理想。

v1.35 將可配置容差升級為 Beta,默認啓用。可在 HPA 行為字段中針對單資源定義自定義容差(如 5%),實現精準控制,避免集羣範圍調整。

Pod 支持用户命名空間

Kubernetes 新增用户命名空間支持,Pod 內用户和組 ID 與宿主隔離,容器內可用 root 權限,映射為宿主的非特權用户,降低權限提升風險。此功能提升 Pod 級別安全,支持無狀態和有狀態 Pod 的 id 映射掛載。

VolumeSource:OCI artifact 和/或 image 支持

創建 Pod 時常需提供數據、二進制或配置文件,傳統做法是放入鏡像或用 init 容器下載。v1.31 支持 image 類型卷,可聲明式拉取並解包 OCI 鏡像製品,用於傳遞配置、模型等數據。

v1.35 默認啓用 image 卷 Beta 功能,需兼容容器運行時(如 containerd v2.1+)。

強制 kubelet 驗證緩存鏡像憑證

imagePullPolicy: IfNotPresent 允許 Pod 使用節點緩存鏡像,即使 Pod 無拉取憑證。多租户環境下,可能導致憑證泄露風險。

v1.35 引入 kubelet 對緩存鏡像強制憑證驗證,確保 Pod 有有效憑證才能使用緩存鏡像,強化安全。支持關閉該功能和配置策略等級。

細粒度容器重啓規則

過去,restartPolicy 只在 Pod 級別配置,限制複雜工作負載控制。AI/ML 等任務常需 Pod 不重啓,但單個容器可重啓特定錯誤。

v1.35 支持在容器級別定義 restartPolicy 和 restartPolicyRules,實現更靈活的重啓策略。Beta 默認啓用。

CSI 驅動通過 secrets 字段選擇性使用 ServiceAccount 令牌

之前通過 volume_context 注入 ServiceAccount 令牌,存在安全風險,因為 volume_context 常被明文日誌記錄。

v1.35 引入 CSI 驅動可選通過 NodePublishVolume 請求的 secrets 字段安全傳遞令牌。驅動通過 CSIDriver 對象開啓此功能。

此功能防止憑證泄露,符合最佳實踐,同時保持兼容性。

Deployment 狀態新增終止副本計數

Deployment 狀態以前只顯示可用和更新副本,無法看到正在終止的 Pod,影響判斷部署穩定性。

v1.35 將 terminatingReplicas 字段升級為 Beta,顯示已設置刪除時間戳但未刪除的 Pod 數量,提升生命週期管理可觀察性。

Alpha 新特性

以下是 v1.35 版本發佈後部分進入 Alpha 階段的改進。

Kubernetes 中的 Gang 調度支持

調度相互依賴的任務(如 AI/ML 訓練、HPC 模擬)一直很難,因為 Kubernetes 默認調度器是單個 Pod 逐個調度。常導致部分 Pod 啓動,其他 Pod 無期限等待資源,形成死鎖,浪費集羣容量。

Kubernetes v1.35 通過新的 Workload API 和 PodGroup 概念,原生支持“gang 調度”。該特性採用“要麼全部調度,要麼全部不調度”的策略,保證一組 Pod 只有在集羣有足夠資源時才同時啓動。

主要好處是提升批處理和並行任務的可靠性與效率,避免資源死鎖,確保集羣容量只有在完整任務能運行時才被佔用,極大優化大規模數據處理的調度。

受限模擬(Constrained Impersonation)

過去,Kubernetes RBAC 中的 impersonate 權限是全有或全無:授權後即可擁有所有目標身份的權限,違背最小權限原則,無法限制只能執行特定操作。

v1.35 引入 Alpha 級別的受限模擬,可在模擬流程中增加二次授權檢查。開啓 ConstrainedImpersonation 功能門後,API Server 不僅驗證基礎模擬權限,還會檢查模擬者是否有執行特定操作的權限(通過新動詞前綴如 impersonate-on:<mode>:<verb> 實現)。

管理員可以制定細粒度策略,例如允許支持工程師模擬集羣管理員身份僅查看日誌,無需完全管理權限。

Kubernetes 組件的 Flagz

以前要查看 Kubernetes 組件(API Server、kubelet 等)的運行時配置,必須有節點權限或看進程參數。為簡化,該版本引入了 /flagz 端點,用 HTTP 返回命令行參數,最初僅支持純文本格式,不便自動化解析。

v1.35 中,/flagz 支持結構化、機器可讀的 JSON 格式。授權用户可用 HTTP 內容協商請求版本化 JSON,純文本格式仍保留供人工查看。此更新顯著提升監控和合規流程,方便外部系統審計配置,無需脆弱的文本解析或直接訪問底層。

Kubernetes 組件的 Statusz

排查 kube-apiserver、kubelet 等組件問題,之前依賴非結構化日誌和文本,難以自動化。雖然已有 /statusz 端點,但無標準機器可讀格式,限制了其監控作用。

v1.35 中,/statusz 端點同樣支持結構化 JSON 輸出。授權用户可通過 HTTP 協商獲取精確狀態數據(版本、健康指標等),避免脆弱文本解析。為自動化調試和可觀測工具提供穩定接口。

CCM:基於 Watch 的路由控制器同步(Informer)

雲環境中,路由管理傳統上依賴 Cloud Controller Manager(CCM)定時輪詢雲廠商 API,效率低且會產生大量冗餘調用,導致節點狀態變更與路由更新間存在延遲。

v1.35 的 cloud-controller-manager 庫引入了基於 watch 的路由控制器同步策略。控制器通過 informer 監聽節點的新增、刪除及字段變更事件,只有發生變更時才同步路由。

主要好處是顯著減少雲 API 調用,降低限流風險和運維負擔,同時提升網絡層響應速度,路由表能及時更新。

基於閾值的擴展容忍度操作器

v1.35 引入 SLA 感知調度,允許工作負載表達可靠性要求。通過給 tolerations 添加數字比較操作符,Pod 可根據 SLA 相關的污點(如服務保障、故障域質量)匹配或避開節點。

主要好處是調度更精細,關鍵任務可選擇更高 SLA 節點,低優先級任務則可接受較低 SLA,提升資源利用率並降低成本。

任務暫停時可變容器資源

批處理任務往往需要調整資源限制。之前 Job 配置不可變,若因 OOM 或 CPU 不足失敗,必須刪掉重建,丟失執行歷史。

v1.35 允許暫停狀態下的 Job 更新資源請求和限制。開啓 MutableJobPodResourcesForSuspendedJobs 功能後,用户可暫停失敗的 Job,修改 Pod 模板資源,然後恢復執行。

主要好處是資源調整更順暢,無需重建 Job,保留執行狀態,顯著提升批處理開發體驗。

其他重要更新

動態資源分配(DRA)持續創新

核心功能在 v1.34 已穩定且可關閉,v1.35 默認開啓。多個 Alpha 功能大幅改進,鼓勵用户測試反饋,助力未來升級到 Beta。

通過 DRA 擴展資源請求

解決了與設備插件擴展資源請求的部分功能差距,比如 Init 容器設備評分和複用。

設備污點與容忍度

新增“None”效果,用於報告問題但不影響調度或運行。DeviceTaintRule 提供驅逐狀態信息,支持“None”效果的“演練”驅逐。

可分區設備

同一分區設備可定義在不同 ResourceSlice,詳情見官方文檔。

可用容量與設備綁定條件

修復若干 Bug,完善測試。詳情見官方文檔。

資源版本語義可比較性

v1.35 改變客户端對資源版本的解釋方式。

此前只支持字符串相等比較,客户端無法自行判斷版本先後,只能請求服務器做比較。

現在所有內置資源版本均為特殊十進制格式,客户端可直接比較版本大小。這樣客户端斷線重連後能判斷是否丟失更新,提升存儲遷移、Informer 性能和控制器穩定性。

v1.35 中的畢業、廢棄和移除

畢業為穩定功能

本次發佈共 15 項功能晉升為穩定,包括:

  • CPUManager 策略限制 reservedSystemCPUs 給系統守護進程和中斷處理
  • Pod Generation
  • 不變性測試
  • Pod 資源原位更新
  • 精細的 SupplementalGroups 控制
  • 增加對 kubelet 配置目錄的支持
  • 移除 Kubernetes API 類型的 gogo protobuf 依賴
  • kubelet 最大鏡像緩存年齡清理
  • kubelet 並行鏡像拉取限制
  • TopologyManager 的 MaxAllowableNUMANodes 策略選項
  • 將 kubectl 命令元數據包含在 HTTP 請求頭
  • PreferSameNode 流量分配(原 PreferLocal 策略 / 節點級拓撲)
  • Job API 的 managed-by 機制
  • 從 SPDY 遷移到 WebSocket

廢棄、移除及社區更新

隨着 Kubernetes 發展,部分功能被廢棄、移除或替代。詳情見官方廢棄政策。

Ingress NGINX 退役

Ingress NGINX 曾是 Kubernetes 中流量入口的熱門解決方案,但維護者嚴重不足且技術債務累積,社區決定退役。從 2026 年 3 月起將只做有限維護,之後歸檔不再更新。推薦遷移到 Gateway API,提供更現代、安全、可擴展的流量管理。詳情見官方博客。

移除 cgroup v1 支持

Linux 節點資源管理歷史依賴 cgroup v1,但其不穩定且功能有限。自 v1.25 起支持更現代的 cgroup v2。v1.35 徹底移除對 cgroup v1 的支持。使用舊版 Linux 且不支持 cgroup v2 的節點,kubelet 會啓動失敗。請儘快升級節點到支持 cgroup v2 的系統。詳情見 KEP-5573。

kube-proxy 中 ipvs 模式廢棄

ipvs 模式曾提升負載均衡性能,但維護難度大,技術債務重。v1.35 標記 ipvs 模式為廢棄,啓動時會警告。推薦 Linux 節點遷移到 nftables。詳情見 KEP-5495。

containerd v1.X 最後支持

v1.35 是最後支持 containerd 1.7 及其他 LTS 版本的 Kubernetes 版本。升級 Kubernetes 前請遷移到 containerd 2.0 或以上。可通過監控 kubelet_cri_losing_support 指標識別需要升級的節點。詳情見官方博客和 KEP-4033。

kubelet 重啓時 Pod 穩定性改善

之前 kubelet 重啓時,會重置容器狀態,導致健康 Pod 被標記為 NotReady 並從負載均衡移除,影響流量。v1.35 修復此問題,kubelet 啓動時正確恢復容器狀態,保證工作負載持續 Ready,流量不中斷。


此外,公告還緬懷了 Han Kang,“他是長期貢獻者和受人尊敬的工程師,以卓越的技術能力和熱情感染了整個 Kubernetes 社區。Han 在 SIG Instrumentation 和 SIG API Machinery 中發揮了重要作用,因其關鍵貢獻和對項目核心穩定性的持續投入,獲得了 2021 年 Kubernetes 貢獻者獎。除了技術貢獻,Han 還是一位慷慨的導師,熱衷於促進人與人之間的聯繫。他常“為他人開門”,無論是引導新貢獻者提交首個 PR,還是耐心友善地支持同事。Han 的精神通過他啓發的工程師們、他參與構建的穩定系統,以及他在雲原生生態中培養的温暖合作氛圍得以延續。”

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.