Kubernetes v1.37:DRA 更新一览
Kubernetes v1.37:DRA 更新一览
原文:Kubernetes 官方博客《Kubernetes v1.37: DRA Updates》
作者:Kashish Verma
发布:2026 年 9 月 3 日
许可:CC BY 4.0
说明:原文可在 Kubernetes 官方博客按标题检索。
Kubernetes 1.37 来了,动态资源分配(Dynamic Resource Allocation,DRA)还在继续往前推。这个版本把 DRA 对扩展资源(Extended Resource)的支持推到了 GA,团队为此连续打磨了三个版本。另外还有几项特性晋级 Beta 或 GA,一批新的 Alpha 特性也一起亮相。
下面聊聊 Kubernetes 1.37 里 DRA 的新东西。
1.37 中稳定的特性
DRA 扩展资源支持(KEP-5004)已经 GA。这个机制让 DRA 驱动能够满足通过传统扩展资源 API 发起的请求,比如 Pod spec 里带自定义前缀的 GPU 扩展资源,而且不需要在 DRA 驱动之外再单独部署一个设备插件。扩展资源名可以直接设在 DeviceClass 上,请求该资源的 Pod 会通过 DRA 匹配到设备,工作负载这边不需要创建 ResourceClaim。
从 1.34 接受 KEP 开始,这项特性一路走来:1.35 进入 Alpha,1.36 进入 Beta,现在稳定。对集群运维人员来说,这正是 DRA 可以渐进式落地的原因。基于扩展资源编写的现有工作负载不用改,后端的分配逻辑可以慢慢切到 DRA。
ResourceClaim 的状态(KEP-4817)里新增了 devices 字段,可以带上标准化的网络接口数据。DRA 驱动能上报每个设备的状态,对网络设备来说包括接口名、MAC 地址和 IP 地址。以前设备一旦配置进 Pod,状态就看不见了;现在用户和控制器都能看到,也能基于设备上报的 IP 去搭网络服务。
DRA 的设备污点与容忍(KEP-5055)也稳定了。DRA 驱动可以把设备标记为有污点,新 Pod 调度时会跳过这些设备;集群管理员还能通过 DeviceTaintRule 在集群范围打同样的污点,不用重新配置驱动。已经在使用带污点设备的 Pod 可以被自动驱逐,除非它的 ResourceClaim 显式容忍了这个污点。这套机制和节点污点、容忍很像,运维人员可以单独下线一个设备做维护,或者把它标记为降级,不影响集群里的其他部分。
标准化的 numaNode 设备属性(KEP-6072)把 numaNode 定为共享属性名。不同驱动的设备因此可以在同一个 NUMA 节点上比较,不用每个驱动自己发明一套命名。这项特性在 1.37 直接以稳定状态落地,因为它只是一个命名和注册类的 KEP,没有特性门控,也不改变树内行为。
晋级 Beta 的特性
ResourceClaim 对工作负载的支持(KEP-5729)晋级 Beta,由 DRAWorkloadResourceClaims 特性门控控制,默认关闭。在开启该特性的集群里,Workload 和 PodGroup 可以直接引用 ResourceClaim,一个 claim 能被整组 Pod 共享。以前按 Pod 预留的方式最多只能覆盖 256 个 Pod,现在没有这个瓶颈。
DRA 设备属性 Downward API(KEP-5304)主要面向 KubeVirt 虚拟机的设备注入。驱动在准备 claim 时填充 Metadata 字段,框架把它写成 JSON 文件,通过 CDI 挂载到容器里。工作负载可以直接读取设备的 PCI 总线地址、MAC 地址等属性,不用再写自定义控制器去监听和转换 ResourceClaim 和 ResourceSlice。
Alpha 特性
属性列表类型(KEP-5491)在 1.37 进入第二个 Alpha。设备属性不再只能存一个标量值,可以存多个值,比如一个 CPU 同时邻近多个 PCIe root。这样就能根据有重叠或不重叠的值集合来匹配、区分设备,单值属性的行为保持不变。
节点可分配资源请求(KEP-5517)进入 Alpha 2。调度器和 kubelet 可以把 DRA 管理的 CPU、内存等节点资源,当成普通资源请求来处理,节点不会被超卖,用户也不用在 ResourceClaim 和 Pod spec 里重复写同一份请求。
资源可用性查询(KEP-5677)进入第二个 Alpha。用户创建 ResourcePoolStatusRequest 可以获得某个时间点的可用性快照。想看最新数据,就删掉再重建请求;它不是持续监控的 API。
DRA 可选节点操作(KEP-5945)允许驱动跳过 kubelet 的 prepare 和 unprepare 调用,适用于那些在节点上确实不需要做任何准备的分配。这样就不会为了一个本地什么都不用干的分配,对驱动产生不必要的依赖。
派生属性(KEP-6080)是个新特性,可以用 CEL 表达式按自定义规则匹配设备。在此之前,要把不同厂商的设备配对(比如同一 NUMA 节点上的 GPU/TPU 和网卡),前提是两边驱动用了完全相同的属性名。一个用 numa,另一个用 numaNode,调度器就配不起来。现在可以在自己的清单里桥接这些差异,不用等硬件厂商就标准属性名达成一致。除了解决命名差异,CEL 还能处理更复杂的场景,比如从一长串拓扑字符串里切出某个 ID,或者按可用容量把设备分到自定义的性能档位。
DRA 设备兼容组(KEP-5963)让驱动给设备分区打上兼容组标签,比如同一块 GPU 上的 MIG 和 vGPU 配置。调度器会提前拒绝不兼容的组合,而不是等到节点准备阶段才让驱动报错。该特性由 DRADeviceCompatibilityGroups 特性门控控制,默认关闭。
PreQueueingHint 扩展点(KEP-6132)在 1.37 作为 Alpha 新增。以前 DRA ResourceClaim 事件会触发对所有不可调度 Pod 的全量扫描,大规模扩容时是 O(N²) 的开销。现在 DRA 插件用 Pod informer 索引,只挑出真正受影响的 Pod,重新入队路径降到 O(1),早期基准测试里调度吞吐大约翻了一倍。该特性由 SchedulerPreQueueingHints 特性门控控制。
DRA 可消费容量(KEP-5075)现在支持 CapacityRequestPolicyRange 里的分数值,设备有小数资源时,容量请求和分配可以更精确。需要细粒度资源分配的工作负载会灵活不少。这项增强由 DRAFractionalCapacityRange 特性门控控制,在 1.37 处于 Beta。
下一步
DRA 每个版本都在成熟。目前处于 Alpha 和 Beta 的几项特性,计划在后续版本继续推进,社区也在持续打磨 DRA 的性能、可扩展性和可靠性。Kubernetes 1.38 还会有一批新的 DRA 特性,值得期待。
参与社区
想参与的话,可以先加入 WG Device Management 的 Slack 频道和会议,会议时间覆盖美欧和欧亚时区。不是所有增强想法都已经登记成 issue,有想法或者想帮忙,直接来找社区聊。各个层次都有活干,从困难的核心改动,到新手也能上手的 kubectl 可用性改进。
致谢
以下 KEP owner 在 1.37 里新增或晋级了特性(按字母顺序):
- Alay Patel
- Byonggon Chun
- Gaurav Ghildiyal
- Jiefeng Xu
- John A. Hull
- Jon Huhn
- Lionel Jouin
- Patrick Ohly
- Praveen Krishna
- Shingo Omura
- Troy Chiu
没有评审和批准者的帮助,这些工作不可能完成,感谢所有参与打磨这个版本的人。只要盯着的人足够多,bug 就无处可藏;这个版本确实有不少 bug,感谢大家盯得紧、愿意把它改好。DRA 在这个周期变得更好,靠的是你们每一个人。
本文译自 Kubernetes 官方博客,原文以 CC BY 4.0 许可发布。转载请注明作者、发布平台、发布日期和原文标题。
- 点赞
- 收藏
- 关注作者
评论(0)