[转载] Kubernetes v1.37:DRA 新进展
本文为授权转载,非本账号原创。
原文:Kubernetes v1.37:DRA 新进展(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/)
原作者及译者:借由 Kashish Verma | 译者 Paco Xu (DaoCloud) | 2026.09.03
来源:Kubernetes 官方中文博客;许可:CC BY 4.0(参考地址:https://creativecommons.org/licenses/by/4.0/)。保留原作者和译者署名,正文仅做适配博客编辑器的排版与链接格式转换,未改写技术内容。
内容不代表原作者或 Kubernetes 项目对本账号的认可或背书。
Kubernetes 1.37 现已发布, 动态资源分配(DRA)(参考地址:https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/dynamic-resource-allocation/) 也在不断突破最初的边界! 此版本中,DRA 扩展资源支持正式进入 GA;这是团队连续三个版本努力达成的重要里程碑。 此外还有多项特性进阶至 Beta 或 GA,以及一批全新的 Alpha 特性,共同构成了本次更新。
下面我们来深入了解 Kubernetes 1.37 中 DRA 的新变化!
v1.37 中的稳定特性(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/#whats-stable-in-1-37)
DRA 扩展资源支持(参考地址:https://www.kubernetes.dev/resources/keps/5004)已进阶至 GA。
借助此机制,DRA 驱动无需再搭配单独的设备插件,
即可满足通过传统扩展资源 API 发出的请求,例如 Pod 规约中的 example.com/gpu。
集群管理员可以直接在 DeviceClass 上设置扩展资源名称。
请求该扩展资源的 Pod 将通过 DRA 获得设备,工作负载侧无需显式声明或引用 ResourceClaim。
自该 KEP 在 1.34 中获批以来,这项特性一直稳步推进: 1.35 中进入 Alpha,1.36 中进入 Beta,如今已经稳定。 这让集群运维人员可以逐步采用 DRA: 在后端分配逻辑迁移到 DRA 的同时,基于扩展资源编写的现有工作负载无需修改即可继续运行。
ResourceClaim 设备状态(可包含标准化网络接口数据)(参考地址:https://www.kubernetes.dev/resources/keps/4817/)
为 ResourceClaim 的 .status 添加了 devices 字段,
使 DRA 驱动可以报告各个设备的状态;对于网络设备,
报告内容包括接口名称、MAC 地址和 IP 地址。
过去,设备在 Pod 中配置完成后,其状态便不可见;
现在用户和控制器可以查看这些状态,
并能够构建依赖设备所报告 IP 地址的服务等。
DRA:设备污点和容忍度(参考地址:https://www.kubernetes.dev/resources/keps/5055/)现已进入 Stable。
DRA 驱动可以为设备添加污点,让调度新 Pod 时跳过这些设备;
集群管理员也可以通过集群级 DeviceTaintRule,为符合选择条件的设备添加相同污点,而无需重新配置驱动。
除非 Pod 的 ResourceClaim 明确容忍相应污点,
否则已经在使用带污点设备的 Pod 可以被自动驱逐。
此机制与节点污点和容忍度类似,运维人员可以将单个设备下线维护或将其标记为已降级,
而不影响集群的其他部分。
标准化 numaNode 设备属性(参考地址:https://github.com/kubernetes/enhancements/issues/6072)
将 resource.kubernetes.io/numaNode 标准化为共享属性名称,
使系统能够比较不同驱动所管理的设备是否位于同一 NUMA 节点,
而不再需要各个驱动自行定义属性名称。
由于这是一项仅涉及命名和注册的 KEP,既不涉及特性门控,也不改变 Kubernetes 内置行为,
因此在 1.37 中直接进入 Stable。
进阶至 Beta 的特性(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/#feature-promoted-to-beta)
面向工作负载的 ResourceClaim 支持(参考地址:https://www.kubernetes.dev/resources/keps/5729)
已进阶至 Beta,由默认仍处于禁用状态的 DRAWorkloadResourceClaims 特性门控控制。
在启用此特性的集群中,Workload 和 PodGroup 可以直接引用 ResourceClaim,
同一个 Pod 组内的所有 Pod 可以共享一个 ResourceClaim,
不再受 status.reservedFor 最多包含 256 个 Pod 条目的限制。
DRA 设备属性 Downward API(参考地址:https://www.kubernetes.dev/resources/keps/5304/)
旨在支持将设备注入 KubeVirt 虚拟机。
驱动在为 ResourceClaim 执行节点侧准备时,在 PrepareResourceClaims 返回结果的 Device.Metadata 字段中填入元数据。
框架随后将其写入 JSON 文件,并通过容器设备接口(Container Device Interface,CDI)把该文件挂载到容器中。
这样,工作负载就能直接读取设备的 PCI 总线地址、MAC 地址和其他属性,
无需自定义控制器监视 ResourceClaim 和 ResourceSlice 并转换其中的数据。
Alpha 特性(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/#alpha-features)
属性的列表类型(参考地址:https://www.kubernetes.dev/resources/keps/5491)在 1.37 中进入第二个 Alpha 版本, 允许一个设备属性保存多个值,而不再局限于单个标量; 例如,一个 CPU 可能与多个 PCIe root 相邻。 由此可以根据相互重叠或互不重叠的值集合来匹配或区分设备, 同时单值属性仍按现有方式工作。
节点可分配资源请求(参考地址:https://www.kubernetes.dev/resources/keps/5517)已进入第二个 Alpha 版本。 借助此特性,调度器和 kubelet 能以处理普通资源请求的相同方式, 处理由 DRA 管理的 CPU、内存及类似节点资源, 从而避免节点资源被过度分配, 用户也不再需要同时在 ResourceClaim 和 Pod 规约中重复声明同一个请求。
资源可用情况的可见性(参考地址:https://www.kubernetes.dev/resources/keps/5677) 在 Kubernetes 1.37 中进入 Alpha 2。 用户可以创建 ResourcePoolStatusRequest,获取某一时刻的资源可用性快照。 若要刷新快照,需要删除并重新创建该请求;这不是一个持续监控 API。
DRA:可选节点操作(参考地址:https://www.kubernetes.dev/resources/keps/5945) 对于无需执行节点本地准备操作的分配,驱动可以显式声明退出节点侧流程, 使 kubelet 跳过对插件的 NodePrepareResources 和 NodeUnprepareResources 调用, 从而避免不必要的节点侧驱动依赖。
派生属性(参考地址:https://www.kubernetes.dev/resources/keps/6080)是一项新特性,
允许你使用 CEL(参考地址:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/) 表达式,
按照自定义规则匹配设备。
在此之前,只有当两个驱动使用完全相同的属性名称时,
才能配对不同供应商的设备,例如位于同一 NUMA 节点上的 GPU/TPU 和 NIC。
如果一个驱动使用 numa,另一个使用 numaNode,调度器就无法将它们配对。
现在,你可以直接在清单中轻松弥合这些差异,
无需等待硬件供应商就标准化属性名称达成一致。
除了处理名称差异,你还可以使用 CEL 应对更复杂的场景,
例如从较长且包含多项信息的拓扑字符串中截取特定 ID,
或根据设备的可用容量将其划分到自定义性能层级。
DRA 设备兼容性组(参考地址:https://www.kubernetes.dev/resources/keps/5963)
允许驱动使用兼容性组标记设备的各个分区,
例如区分同一 GPU 上采用 MIG 或 vGPU 的不同分区模式(profile)。
这样,调度器就能提前拒绝不兼容的组合,
而不是等到 NodePrepareResources 阶段才由驱动判定失败。
此特性由默认禁用的 DRADeviceCompatibilityGroups 特性门控控制。
PreQueueingHint 扩展点(参考地址:https://www.kubernetes.dev/resources/keps/6132)
是 1.37 中新增的 Alpha 特性。
过去,DRA ResourceClaim 事件会触发对所有不可调度 Pod 的完整扫描,
在大规模扩容期间会产生 O(N²) 的开销。
现在,DRA 插件使用 Pod informer 索引,将扫描范围缩小到真正受影响的 Pod,
使重新入队路径的复杂度降至 O(1);初步基准测试显示,调度吞吐量大约提升了一倍。
此特性由 SchedulerPreQueueingHints 特性门控控制。
DRA 可消耗容量(参考地址:https://www.kubernetes.dev/resources/keps/5075)
现在支持在 CapacityRequestPolicyRange 中使用小数值,
因而可以对以小数计量的设备容量提出更精确的请求并完成分配,
让需要细粒度资源分配的工作负载更加灵活。
此增强由 1.37 中处于 Beta 阶段的 DRAFractionalCapacityRange 特性门控控制。
后续计划(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/#whats-next)
DRA 在每个版本中都在不断成熟。 目前处于 Alpha 和 Beta 阶段的多项特性有望在后续版本中继续进阶, 社区也在持续改进 DRA 的性能、可扩展性和可靠性。 Kubernetes 1.38 预计还会带来一系列又一批重要的 DRA 特性。
参与其中(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/#getting-involved)
如果你想参与,可以先加入设备管理工作组(WG Device Management)的 Slack 频道(参考地址:https://kubernetes.slack.com/archives/C0409NGC1TK)和 会议(参考地址:https://www.kubernetes.dev/community/community-groups/wg/device-management/#meetings)。 会议时间分别对美国/欧洲和欧洲/亚太地区的参与者比较友好。
并非所有增强想法都已经通过 Issue 跟踪,
因此,如果你希望提供帮助或有自己的想法,欢迎与我们交流!
我们在各个层面都有工作可做,
从复杂的核心改动,到适合新手参与的 kubectl 易用性增强,不一而足。
致谢(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/03/kubernetes-v1-37-dra-updates/#acknowledgments)
以下 KEP 负责人在 1.37 版本中新增了特性或推动了特性进阶(按字母顺序排列):
- Alay Patel (alaypatel07(参考地址:https://github.com/alaypatel07))
- Byonggon Chun (bg-chun(参考地址:https://github.com/bg-chun))
- Gaurav Ghildiyal (gauravkghildiyal(参考地址:https://github.com/gauravkghildiyal))
- Jiefeng Xu (jiefeng-xu(参考地址:https://github.com/jiefeng-xu))
- John A. Hull (johnahull(参考地址:https://github.com/johnahull))
- Jon Huhn (nojnhuh(参考地址:https://github.com/nojnhuh))
- Lionel Jouin (LionelJouin(参考地址:https://github.com/LionelJouin))
- Patrick Ohly (pohly(参考地址:https://github.com/pohly))
- Praveen Krishna (pravk03(参考地址:https://github.com/pravk03))
- Shingo Omura (everpeace(参考地址:https://github.com/everpeace))
- Troy Chiu (troychiu(参考地址:https://github.com/troychiu))
如果没有 Reviewers 和 Approvers 的帮助,这一切都不可能实现。 因此,也要衷心感谢所有以各种方式为本次发布作出贡献的贡献者。 只要有足够多的人关注,所有缺陷都将无所遁形; 这个版本正是因为有众多贡献者密切关注并用心改进,才变得更加完善。 DRA 在本周期取得的进步,离不开你们每一个人。
- ←上一页(参考地址:https://kubernetes.io/zh-cn/blog/2026/08/27/kubernetes-v1-37-metrics-api-ga/)
- 下一页→(参考地址:https://kubernetes.io/zh-cn/blog/2026/09/08/kubernetes-v1-37-advancing-workload-aware-scheduling/)
- 点赞
- 收藏
- 关注作者
评论(0)