Kueue ClusterQueue配额借用-优先级与等待原因诊断

当训练任务一直等待、借用资源后又被抢占时,问题通常不在 Kueue 基础对象,而在 ClusterQueue 配额模型。本文用等待原因、借用边界和优先级规则拆解排查路径。

Kueue ClusterQueue 配额借用的核心问题不是“Kueue 能不能排队”,而是当多个团队共享 GPU、CPU 或批任务资源池时,平台如何解释:谁有保障配额、谁在借用空闲资源、为什么某个 Workload 一直等待,以及抢占是否符合预期。

本文不再展开 Kueue 的基础适用场景,而是把范围收窄到 ClusterQueue 配额借用、优先级、抢占和等待原因诊断。如果你需要先理解 Kueue 面向哪些 AI 训练和批处理场景,可先看站内既有 Kueue 场景文章;本文更适合作为队列治理和排障清单使用。

Kueue 官方将 ClusterQueue 定义为集群级队列,用于管理 resource groups、flavors、配额以及队列间借用等行为[1]。这意味着排查“任务为什么没运行”时,不能只看 Pod Pending,还要看 Workload 是否被 Kueue 准入、等待的是哪类 ResourceFlavor、是否超过 nominalQuota 或 borrowingLimit。

Kueue队列调度对象关系图

图1:Kueue 中 LocalQueue、ClusterQu

图型选择说明:本文包含排障清单,但首要读者任务是理解队列对象与配额边界,所以优先使用对象关系图而不是排查决策树。

先定位等待原因:Workload 没准入还是 Pod 没调度

Kueue 场景下,“任务没跑起来”至少有两层含义:Workload 未被准入,或者 Workload 已准入但 Pod 仍被 kube-scheduler 卡住。前者通常看 Kueue 队列、配额和优先级;后者要继续看节点资源、污点、亲和性、镜像或存储。

最小排查顺序建议如下:

  1. 查看 Workload 是否存在,并确认 Admission 状态。
  2. 查看 LocalQueue 是否指向正确 ClusterQueue。
  3. 查看 ClusterQueue 的 pending、admitted 和资源使用情况。
  4. 确认 ResourceFlavor 是否与任务请求的资源匹配。
  5. Workload 已准入后,再排查 Pod 的调度事件。

Kueue 官方 Troubleshooting 文档也建议从 Workload、队列和事件等对象状态入手定位等待原因[3],下面命令只用于观察。

kubectl get workloads -A
kubectl describe workload <workload-name> -n <namespace>
kubectl describe localqueue <queue-name> -n <namespace>
kubectl describe clusterqueue <clusterqueue-name>

这些命令用于只读观察。不要为了让任务立即运行而临时调大所有队列配额,否则后续很难解释哪个团队实际占用了资源。

配额借用要拆成 nominalQuota、borrowingLimit 和 reclaim

ClusterQueue 配额治理最容易混淆的地方,是把“保障配额”和“空闲借用”混为一谈。保障配额回答团队默认可用多少资源;借用上限回答资源空闲时最多能超用多少;回收或抢占则回答资源归属方需要资源时如何让位。

配额语义 关注问题 诊断证据
nominalQuota 队列自身保障份额是多少 ClusterQueue resourceGroups 配置
borrowingLimit 空闲时最多能借多少 借用队列当前 usage 与上限
lendingLimit 本队列愿意借出多少 被借出资源是否影响保障任务
preemption 资源归属方回收时谁让位 Workload priority 与抢占事件
flavor 匹配 等待的是哪类资源 ResourceFlavor 与节点标签

判断配额不足前先看 flavor:根据 Kueue ClusterQueue 文档,资源可按 flavor 和 resource 组合配置 nominalQuota、borrowingLimit 等字段[1]。因此,一个 Workload 等待 GPU,不代表所有 GPU 都不足;它可能只是在等待某个特定型号、节点池或拓扑的 ResourceFlavor。

Kueue配额与资源类型映射

图2:Kueue 通过 ClusterQueue 和 Reso

借用不是公平性的反面

借用机制可以提升资源利用率,但前提是借用边界可解释。平台团队应能说清楚:哪个队列借用了哪类资源、借用是否超过上限、被借资源是否会影响归属方的保障任务。

如果业务团队经常质疑“不公平”,通常不是 Kueue 算错了,而是配额规则、优先级和回收条件没有被可视化。

优先级和抢占要按任务可中断性设计

Kueue 的优先级和抢占能力适合批任务平台,但不适合无差别打开。长时间训练任务、没有 checkpoint 的仿真任务、依赖外部锁的批处理任务,被抢占后的代价可能远高于短时利用率收益。

建议先给任务分三类:

  • 保障任务:生产训练、关键实验、交付相关批处理,优先保证完成。
  • 可借用任务:实验、低优先级数据处理,可使用空闲资源但不承诺持续占用。
  • 可抢占任务:具备 checkpoint、可重试、成本可接受的任务。

Kueue 的 Workload 优先级会影响准入顺序和抢占判断,具体行为需要结合队列配置验证[2]。生产环境应使用样例 Workload 测试:低优先级任务借用资源后,高优先级任务到来时是否按预期等待、抢占或继续排队。

等待原因诊断:把队列、资源和节点分层对齐

当 Workload 长时间 pending,不要只看一个对象。更可靠的方式是把证据分成 Kueue 层、Kubernetes 调度层和基础设施层。

诊断时可以按下面表格记录:

层次 要确认的问题 常见结论
Kueue 准入 Workload 是否 admitted 未准入说明先看配额、flavor 或优先级
队列配额 ClusterQueue 是否有可用 quota 可能是 nominalQuota 满、借用受限
Flavor 请求资源是否匹配 ResourceFlavor 可能只缺特定 GPU 型号
Pod 调度 已准入 Pod 是否仍 Pending 继续看节点、污点、亲和性、存储
运行状态 Pod 启动后是否失败 与 Kueue 队列无关,转应用排障

Kueue队列治理落地路线

图3:Kueue 从单队列试点到多资源池治理的落地路线

试点路线:先验证一种资源,再扩展多队列

Kueue 配额借用不要从全量 GPU 集群直接开始。更稳妥的方式是选一个资源池、两个团队和一种批任务类型,先把等待原因、借用记录和优先级效果跑通。

一个可执行试点可以这样设计:

  1. 选择单一 GPU 型号或 CPU 批任务池。
  2. 为两个团队建立独立 LocalQueue。
  3. 让两个 LocalQueue 共享同一个 ClusterQueue cohort。
  4. 分别提交保障任务、可借用任务和高优先级任务。
  5. 记录 Workload 从 Pending 到 Admitted 的原因变化。
  6. 再决定是否引入多 ResourceFlavor 和抢占。

判断试点成功的标准不是资源利用率短期上升,而是团队能解释每一次等待和借用。

小结

Kueue ClusterQueue 配额借用的重点,是把批任务平台中的公平性、利用率和可解释性统一起来。nominalQuota、borrowingLimit、ResourceFlavor、优先级和抢占各自回答不同问题,不能混成一个“队列配置”。

如果新任务一直等待,先看 Workload 是否被准入,再看 ClusterQueue 配额和 ResourceFlavor,最后才进入 Pod 调度层排查。对 AI 训练平台来说,能解释等待原因,比单纯让任务更快启动更重要

参考资料

常见问题

1. Kueue ClusterQueue 配额借用和 ResourceQuota 有什么区别?

ResourceQuota 主要限制命名空间内资源使用上限;Kueue ClusterQueue 更关注批任务准入、资源 flavor、队列配额和队列间借用。两者可以配合,但不能互相替代。

2. Workload 一直 Pending 应该先看哪里?

先看 Workload 的 Admission 和事件,再看 LocalQueue、ClusterQueue 与 ResourceFlavor。如果 Workload 已经 admitted,但 Pod 仍 Pending,才继续排查 kube-scheduler、节点资源、污点和亲和性。

3. GPU 资源空闲但任务不运行一定是 Kueue 配置错了吗?

不一定。可能是任务请求的 ResourceFlavor 与空闲 GPU 不匹配,也可能是借用上限、优先级或队列 cohort 规则限制。需要把空闲资源按 flavor 和队列归属拆开看。

4. 什么时候适合开启抢占?

适合可重试、可 checkpoint、低优先级实验任务较多的场景。不建议对关键长时间训练任务无差别开启抢占。开启前应先用测试任务验证抢占对象、恢复时间和用户可接受成本。

5. 如何向业务团队解释配额借用是否公平?

建议展示每个队列的保障配额、当前使用、借用量、借用上限和等待队列。只给“任务 pending”或“资源不足”的结论不够,必须说明任务等待的是哪类资源以及是否触发借用边界。

原创声明:CNBPA云原生社区原创技术内容。转载请注明出处:https://www.cloudnative-tech.com/p/9268/
(0)
上一篇 1小时前
下一篇 1小时前

相关推荐