📀Kueue
type
Post
status
Published
date
Mar 21, 2026
slug
kueue
summary
kueue
category
技术分享
tags
k8s
kueue
icon
password
AI summary
Blocked by
Blocking
Category
Kueue 的核心原理
Kueue(Kubernetes-native Job Queueing)是一个轻量级、原生 Kubernetes 的批处理作业排队系统,其设计哲学非常明确:
- 不重复造轮子(核心原则):
Kueue 不替换 kube-scheduler、kube-controller-manager 或 cluster-autoscaler 等成熟组件。它只在作业准入(admission)这一层介入,控制整个 Job 是否可以开始创建 Pod,后续 Pod 调度、节点分配、自动扩缩容全部交给 Kubernetes 原生组件。
- 以 Workload 为原子单位:
把一个完整的批处理任务(Job、RayJob、JobSet、MPIJob 等)视为一个不可分割的单元(Workload),实现 All-or-Nothing / Gang 调度,避免“部分 Pod 起来,剩下卡住”的资源浪费。
- 多租户公平配额 + 弹性借用:
通过 ClusterQueue(集群级配额) + Cohort(共享联盟)实现多团队/多项目间的名义配额(nominal quota) + 借用(borrowing) + 抢占(preemption) + 公平分享(fair sharing)。
- 准入控制(Admission)而非实时调度:
Kueue 决定“什么时候让 Job 从 suspend 状态解挂”,而不是决定 Pod 放哪个节点。解挂后 kube-scheduler 正常接管。
一句话总结原理:
Kueue 是 Kubernetes 批处理作业的“门卫 + 配额管理员”:它在 Job 创建后立即 suspend 它,把它包装成 Workload 放进队列,根据配额、优先级、公平策略决定何时准入(admit),准入后解除 suspend,让 kube-scheduler 正常调度 Pod。
Workload 从提交到运行的完整流程
- 用户提交 Job
用户创建 Kubernetes 原生 Job(或 RayJob 等),在 annotation 中指定
kueue.x-k8s.io/queue-name: my-local-queue- Admission Webhook 拦截
Kueue 的 MutatingAdmissionWebhook 立即把 Job 的
.spec.suspend = true(挂起,不创建 Pod)- 创建 Workload 对象
Kueue 的 controller 监听到 Job,自动创建一个对应的 Workload CR(这是 Kueue 内部的统一抽象对象)
- Workload 进入 LocalQueue
根据 annotation 中的 queue-name,Workload 被放入对应 LocalQueue(命名空间级队列)
- LocalQueue → ClusterQueue
LocalQueue 引用一个 ClusterQueue(集群级配额池)。Workload 被推送到 ClusterQueue 的待调度队列中。
- 排队 & 排序
ClusterQueue 根据配置的 queueingStrategy(StrictFIFO / BestEffortFIFO) + priority 对 pending Workload 排序。
同时评估 preemption(是否需要抢占低优先级运行中 Workload)。
- 配额检查 & Flavor 匹配
Kueue 检查当前 ClusterQueue 的可用 quota(nominal + borrowing from cohort)。
尝试按 flavors 顺序匹配(on-demand 先,spot 后),看是否能 fit 整个 Workload。
- Admission Checks(可选扩展)
如果 ClusterQueue 配置了 AdmissionCheck(如 Provisioning、Topology 等),Kueue 等待这些 check 都 Ready。
- 准入(Admit)
- 如果 quota 够 → Workload 状态变为 Admitted
- Kueue 更新原 Job 的
.spec.suspend = false(解挂) - 注入 pod template 的 nodeSelector / affinity / taints(基于 Flavor)
- 标记 quota 已消耗(reservation)
- Pod 创建 & kube-scheduler 接管
Job controller 看到 suspend=false,开始创建 Pod
kube-scheduler 正常调度 Pod 到节点(可能触发 cluster-autoscaler 扩容)
- 运行中监控 & 回收
Workload 运行完成 → quota 释放,可被其他 Workload 借用
如果优先级更高的新 Workload 需要资源 → 可 preempt(suspend 并删除 Pod)
- 失败/超时/用户删除 → Workload 被清理,quota 释放
Kueue 整体架构(文本版示意图)
关键组件总结:
- CRDs:ClusterQueue、LocalQueue、Cohort、Workload
- Webhook:Mutating(suspend + 注入)、Validating(可选)
- Controllers:Workload reconciler、Queueing reconciler、Admission controller
- 不包含:Pod 调度(kube-scheduler)、节点管理(kubelet)、自动扩容(cluster-autoscaler)
这个架构让 Kueue 非常薄(thin),部署简单,侵入性低,但功能强大,尤其适合 AI 训练、多租户 GPU 共享、HPC 等场景。
如果需要更详细的某一部分流程(比如 preemption 细节、fair sharing 计算、AdmissionCheck 如何工作),或者想看特定版本的变更,可以继续问。
Prev
MySQL-存储引擎
Next
任务拆分&优先级定义
Loading...