首页/云/Kubernetes 速查/扩展资源与 GPU 调度
调度与资源52 条

扩展资源与 GPU 调度

CPU/内存之外的设备资源(nvidia.com/gpu 等)由 Device Plugin 上报;申请时 requests 与 limits 必须相等且为整数。

Kubernetes 速查云更新于 2026-10-13

扩展资源是什么

CPU 与内存之外的硬件资源(nvidia.com/gpu、amd.com/gpu、以及厂商自定义资源)统称扩展资源:节点上的 Device Plugin 把设备数量上报给 kubelet,节点 Capacity 与 Allocatable 里就出现对应资源名。调度器按整数单位分配,既不支持拆分也不支持超卖,容器申请时必须写整数,requests 与 limits 必须相等。设备真正被挂进容器由 Device Plugin 与容器运行时协作完成,声明资源只是第一步。

基本信息

适用平台Kubernetes 各版本,扩展资源由 Device Plugin 机制提供
上报者每个节点上以 DaemonSet 形式运行的 Device Plugin
声明方式resources.limits 里写完整资源名,requests 会自动取相同值
计量单位整数,不支持小数,不可超额分配
查看入口kubectl describe node,Capacity 与 Allocatable 两段

典型使用场景

  • GPU 训练与推理任务:按卡数申请,多卡任务需整体占用同一节点
  • 专用加速设备:FPGA、加解密卡、智能网卡等按设备粒度分配
  • 排队管理:以设备为硬约束规划任务队列,避免超出物理数量
  • 节点扩容决策:设备不足时提前扩容 GPU 节点而不是加副本
  • 故障隔离:单卡异常时定位到具体节点与设备

GPU 申请示例

GPU 申请示例
resources:
  limits:
    nvidia.com/gpu: 1        # 只写 limits 即可,requests 自动等于 limits
# 同时写 requests 与 limits 时两者必须相等,写 0.5 会被 API 直接拒绝

核对节点与插件

核对节点与插件
kubectl describe node gpu-node1 | grep -A8 'Capacity:' | grep -i gpu
kubectl describe node gpu-node1 | grep -i -A3 'Allocatable'
kubectl -n kube-system get pods | grep -i -E 'device|gpu'      # 插件是否就绪
kubectl get pod train-x -o jsonpath='{.status.conditions}'     # Pending 时看资源不足原因
kubectl get nodes -l accelerator=nvidia -o custom-columns='NODE:.metadata.name,TAINT:.spec.taints'

从上报到挂载的几个环节

环节观察入口异常表现
设备上报describe node 的 Capacity 与 Allocatable看不到资源名说明插件未就绪
调度分配Pod 事件与 Pending 原因提示资源不足,长期排队
设备挂载容器内设备节点与驱动命令设备不可见或驱动版本不匹配
设备健康厂商工具与插件日志掉卡后新任务无法调度
扩展资源只写 limits 就够了;如果同时写 requests 且与 limits 不等,API 会直接拒绝,这类报错信息很明确,不必怀疑调度器。
设备数量是硬上限,没有超卖空间:一个节点有 4 张卡,最多同时跑 4 个各占 1 卡的 Pod,容量规划要按物理设备数而不是按 CPU 余量来算。

易错点

  • requests 与 limits 不相等或写成小数:对象创建直接被 API 拒绝,报错容易被误读成权限问题
  • 插件未就绪就上线业务:Pod 永远 Pending,先查 Device Plugin 的 DaemonSet 与节点侧设备识别
  • 忽略 GPU 节点的污点与标签:工作负载没有对应容忍或节点选择器,调度器根本不会考虑这些节点
  • 缺少设备健康监控:单卡掉线后新任务调度失败、存量任务报错,故障发现依赖业务方反馈

数据来源与参考

  • Kubernetes 官方文档 · 扩展资源与设备插件
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌