Kubernetes DRA 是什么?GPU 调度为什么要关注它?
Dynamic Resource Allocation 已在 Kubernetes v1.35 稳定,v1.36 继续增强扩展资源和设备绑定能力。本文从 GPU 运维角度解释 DRA 的价值、对象和排查重点。
Kubernetes 早期使用 GPU 的方式通常是 device plugin 加扩展资源,例如在 Pod 里申请 nvidia.com/gpu: 1。这种方式简单直接,但当集群进入 AI 训练、推理、多型号 GPU 和多租户共享阶段后,问题会变复杂:用户想按显存、型号、拓扑、驱动能力选择设备,平台团队还要控制谁能申请什么设备、设备什么时候准备好、失败时如何回收。
Dynamic Resource Allocation,简称 DRA,就是 Kubernetes 为这类设备资源准备的新机制。官方文档中 DRA 在 Kubernetes v1.35 已稳定启用,v1.36 又加入扩展资源分配、可分区设备、设备绑定条件等能力。对运维人员来说,DRA 不是一个遥远的 API,而是未来 GPU、NPU、RDMA 网卡、FPGA 等硬件进入 Kubernetes 的关键入口。
DRA 解决什么问题
传统扩展资源更像“数量申请”:这个 Pod 要 1 张 GPU,调度器找一个有 GPU 的节点即可。
DRA 更像“设备声明和设备索赔”:
- 管理员定义设备类别,例如 A100、H100、带 NVLink 的 GPU、某类推理卡。
- 驱动或控制器上报设备切片和属性。
- 工作负载通过 ResourceClaim 或模板提出设备需求。
- Kubernetes 在调度时把 Pod 和具体设备绑定起来。
这和存储里的 StorageClass、PersistentVolumeClaim 思路很像。用户不一定直接关心设备在哪个节点,但平台要能根据规则把合适设备分配给它。
运维需要理解的几个对象
学习 DRA 不需要一开始记住所有字段,先抓住几个对象:
DeviceClass:设备类别,类似“什么类型的设备可以被申请”。ResourceSlice:节点或资源池上报的可用设备信息。ResourceClaim:工作负载对设备的申请。ResourceClaimTemplate:为多个 Pod 批量生成 ResourceClaim。- Pod 中的
resourceClaims:把 Pod 和设备申请关联起来。
排障时可以从这几个对象入手:
kubectl get deviceclasses
kubectl get resourceslices -A
kubectl get resourceclaims -A
kubectl describe resourceclaim <claim-name> -n <namespace>
kubectl describe pod <pod-name> -n <namespace>
如果 Pod 一直 Pending,不要只看节点 CPU 和内存,还要看 ResourceClaim 是否分配成功、设备是否准备完成、DRA 驱动是否正常运行。
为什么 GPU 集群会需要 DRA
AI 集群里 GPU 的差异比 CPU 更明显。即使都是 GPU,也可能有不同型号、显存、MIG 配置、拓扑位置、驱动版本和隔离能力。
例如,一个推理服务可能只需要较小显存,训练任务需要整卡或多卡高速互联,批处理任务可以等待低价资源。DRA 能让设备属性进入调度决策,而不是只用一个粗糙的 nvidia.com/gpu 数量。
Kubernetes v1.36 中 DRA 扩展资源分配进入 beta,意味着用户可以继续使用扩展资源名字,同时让背后的设备由 DRA 处理。这个过渡能力很重要,因为生产集群不可能一次性重写所有工作负载。
管理员上线前检查什么
第一,确认集群版本和 feature gate。不同云厂商和发行版对 DRA 的支持节奏可能不同。
第二,确认 DRA 驱动是否以 DaemonSet 或等效方式部署到目标节点。
第三,确认 RBAC 最小权限。DRA 涉及 ResourceClaim 状态更新和设备状态更新,不应该把过大的权限给普通命名空间用户。
第四,确认设备上报是否准确。可以检查 ResourceSlice 数量、设备属性、设备状态是否与实际节点一致。
第五,确认失败回收路径。Pod 删除后,设备是否释放?驱动异常后,ResourceClaim 是否卡住?
常见问题 FAQ
DRA 会马上替代 device plugin 吗?
不会。device plugin 仍然会长期存在,很多集群还会继续使用扩展资源模式。DRA 更适合复杂设备、异构资源和更细粒度的设备管理。
普通运维现在要不要学 DRA?
如果只管理普通 Web 业务,可以先了解概念。如果负责 Kubernetes GPU、AI 训练、推理平台,建议现在就开始学习。
Pod Pending 时怎么判断是不是 DRA 问题?
先 kubectl describe pod 看调度事件,再检查相关 ResourceClaim 状态。如果 claim 未分配、设备未准备或驱动没有更新状态,就要继续看 DRA 驱动日志。
DRA 和 HAMi 是什么关系?
DRA 是 Kubernetes 原生设备分配机制;HAMi 是 GPU 虚拟化和共享中间件。未来两者可能在 AI 基础设施场景里共同出现,但关注层次不同。
参考资料
- Kubernetes Dynamic Resource Allocation: https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/
- Kubernetes DRA 管理员实践: https://kubernetes.io/docs/concepts/cluster-administration/dra/
- Kubernetes DRA 安全加固: https://kubernetes.io/docs/concepts/security/hardening-guide/dynamic-resource-allocation/
