学习库/ AI Infra 转型/ 08 · 08 工业级调度器(Gödel / qGPU / Kueue / Koordinator / YuniKorn)
🧠 AI Infra 转型 · 第 9 / 17 篇

08 工业级调度器(Gödel / qGPU / Kueue / Koordinator / YuniKorn)

2384 字· 阅读约 5 分钟· 2026-08-23 更新

08 工业级调度器(Gödel / qGPU / Kueue / Koordinator / YuniKorn)

你之前对话里问「大厂(字节/腾讯)用的真是 Volcano 吗」。答案是:开源 Volcano 是基线,但大厂都在它之上或之外做了自研/深度定制。这一章看几个真实工业方案,理解「为什么原生/Volcano 还不够」,并建立自研调度器的思路。

💡 给你的话:这章信息量大,但对你不难——本质上就是「K8s 调度生态的各家方案对比」,和你熟悉的服务网格/Ingress 生态对比是一个套路。


8.1 为什么原生 / Volcano 还不够

当集群到千卡/万卡、在离线混部、多租户强隔离时:

  • 调度吞吐成瓶颈(Volcano 单次调度周期串行、Extender 同步 HTTP)。
  • 在线(低延迟服务)+ 离线(训练)混部需要统一调度,Volcano 偏离线。
  • 细粒度算力/显存双维隔离(不止整卡/MIG)需要内核级方案。
  • 多厂商、异构、受管制场景更复杂。

大厂自研,或在社区方案上深度定制。下面按「解决问题」的维度认识几个关键玩家。

名词解释

  • 在离线混部(Colocation):把延迟敏感的在线业务(如 Web 服务)和延迟不敏感的离线任务(训练/批处理)跑在同一集群,用优先级+隔离把离线「填」进在线空闲资源,整体利用率翻倍。
  • 多租户(Multi-tenancy):多个团队/客户共用一个集群,互相隔离、各有配额。

8.2 字节跳动 · Gödel Scheduler

  • 定位:在离线统一调度器,2024.1 由字节 KubeWharf 开源。
  • 架构特点
    • 基于 K8s Scheduler Framework,引入乐观并发——把最耗时的「节点匹配」并行化,吞吐远超默认调度器。
      • 名词解释乐观并发(Optimistic Concurrency):假设冲突少见,先并行干、提交时再检查冲突,冲突就重试。比悲观加锁快得多。
    • 统一调度在线(微服务)与离线(训练/批处理)负载,提升整体利用率。
    • 支持 Gang、抢占、优先级、重调度(Godel-Rescheduler)。
  • GitHub:https://github.com/kubewharf/godel-scheduler
  • 意义:你看它站在 K8s Scheduler Framework 之上做增强,而非另起炉灶——这正是工业调度的典型路线。

⭐ 对应你之前对话:元宝说的「字节 Gödel 把 GPU 利用率提到 95%」——方向正确,Gödel 是通过在离线统一 + 高吞吐调度拉高利用率的代表。


8.3 腾讯 · qGPU 调度

  • 定位:腾讯云 TKE 的 GPU 容器虚拟化 + 细粒度调度
  • 机制
    • 依托开源 Elastic GPU 框架,支持单卡被多容器共享
    • 算力 + 显存双维度精细调度(不只整卡/MIG 的粗粒度)。
    • 底层内核模块做强隔离,性能损耗低。
    • Scheduler Extender 形式接入 kube-scheduler(见 06)。
  • 文档:https://cloud.tencent.com/document/product/457/61448
  • 意义:解决「MIG 粒度粗、整卡浪费」的问题,把一张卡切到任意算力%+显存给多团队。

对应你之前对话问「第二步多厂商接入、怎么让不同任务调度到不同卡」——qGPU 是在「单卡内细粒度」维度补充 Volcano 的「整卡 Gang」维度。


8.4 Kueue(K8s 原生排队)

  • 定位:K8s 官方 SIG 维护的队列/配额/抢占系统,专注「批处理排队」,不替代调度器,而是在调度器之前管理队列。
  • 核心概念ResourceFlavor(资源形态,如不同机型)、ClusterQueue(集群队列+配额)、LocalQueue(命名空间内队列)、Workload(待调度工作负载)。
  • 特点:轻量、与任意调度器(含 Volcano/kube-scheduler)配合、原生集成。
  • 官网:https://kueue.sigs.k8s.io/
  • 适合:想要「队列+配额+抢占」但不想直接上重调度器的团队。

💡 类比:Kueue 像「银行取号机」——只管「谁先办、配额多少、能不能插队」,不管「具体去哪个柜台」(那是调度器的事)。所以它能和 Volcano 串联。


8.5 ⭐ 阿里 · Koordinator(在离线混部的标准答案)

  • 定位:阿里开源的 K8s 在离线统一调度/混部系统,正是 8.1 里「在离线混部」动因的直接解法
  • 核心能力
    • 在离线混部:把延迟敏感的在线业务(如电商交易)和延迟不敏感的离线任务(训练/批处理)跑在同一集群,用**优先级 + 干扰隔离(CPU/内存/IO 压制)**把离线「填」进在线空闲资源,整体利用率从 30% 拉到 60%+。
      • 名词解释干扰隔离(Interference Isolation):在线业务忙时压制离线任务占用的资源,保证在线延迟不受影响。
    • 精细的资源画像与压制(CPU Burst、内存弹性、拓扑感知)。
    • 兼容 kube-scheduler,以插件/扩展方式接入,不颠覆现有集群。
  • GitHub:https://github.com/koordinator-sh/koordinator
  • 意义:你若被问「大厂怎么把利用率翻倍」——Koordinator 式在离线混部是最经典的工业回答。它和 Gödel 思路一致(统一调度),但更强调「混部隔离」这一层。

⚠️ 内幕:混部的难点不是「调度」,而是「隔离」——离线任务突发吃满 CPU/内存/网络会拖垮在线。Koordinator 的核心价值是那套干扰检测与压制机制,而不是调度算法本身。面试讲混部,重点讲隔离。


8.6 ⭐ Apache YuniKorn(多租户批调度)

  • 定位:Apache 顶级项目(源自 Apple),面向大数据/AI 的多租户批处理调度器,可替代或增强 kube-scheduler。
  • 核心特点
    • 队列 + 层级配额 + 公平份额:租户/团队间强隔离,适合多团队共用集群。
    • 一套调度逻辑同时管 K8s 和 YARN(大数据场景平滑迁移)。
      • 名词解释YARN 是 Hadoop 的资源调度器,大数据老牌系统。YuniKorn 能同时管 K8s 和 YARN,方便大数据团队迁移。
    • 支持 Gang Scheduling、抢占、bin-packing。
    • 作为独立调度器运行(通过 schedulerName 指向 yunikorn),与 Volcano 定位互补。
  • 官网:https://yunikorn.apache.org/
  • 意义:面试常考「Volcano vs YuniKorn」——前者是批处理 Job 调度(K8s-native CRD),后者是通用多租户队列调度(可接管整个集群调度)。

8.7 对比表(选型参考)

方案 类型 强项 适合
kube-scheduler 原生 通用、稳定 简单负载
+ Plugin/Extender 增强 自定义灵活 轻量定制
Volcano 批处理调度 Gang、队列、公平 AI 训练标配(Job 级)
Kueue 排队系统 配额/抢占、轻量原生 配合任意调度器
Gödel 在离线统一 高吞吐、混部 超大规、混部
qGPU 虚拟化+调度 细粒度算力/显存 高密度共享
Koordinator 在离线混部 干扰隔离、利用率翻倍 在线+离线同集群
YuniKorn 多租户批调度 层级队列、跨 YARN/K8s 多团队强隔离

⭐ Volcano vs Kueue vs YuniKorn(面试高频)

  • Volcano:管「一批 Pod 作为一个 Gang Job 整体调度」,偏训练/批处理语义,通过 CRD(Queue/Job/PodGroup)工作。
  • Kueue:不管「怎么调度 Pod 到节点」,只管「谁先跑、配额多少、能不能抢占」,是调度器前面的排队闸口,可与 Volcano 串联。
  • YuniKorn:是可替换 kube-scheduler 的独立调度器,强在多租户层级队列与跨 YARN/K8s 一致性,常驻接管集群调度。
  • 实际大厂常组合:YuniKorn/Kueue 管队列配额 → Volcano 管 Gang Job → Gödel/Koordinator 管混部与高吞吐。

8.8 自研调度器思路(你的进阶目标)

若你要「自研/深度定制」调度器,典型路线:

  1. 基于 Scheduler Framework 写 Plugin:最轻,解决特定亲和/打分(如 GPU 型号、拓扑)。
  2. Scheduler Extender 做复杂隔离:如 qGPU 内核级隔离的调度决策。
  3. 借鉴 Gödel 的乐观并发:解决大集群吞吐瓶颈。
  4. Koordinator 思路做在离线混部:把离线填进在线空闲,拉高利用率。
  5. Kueue 管队列 + Volcano/Gödel 管分配:职责分离。

重点(回应你最初的问题):你说「有时候需要自研调度器,像 Volcano 这种半开源的」——准确说,Volcano 是完全开源(CNCF),大厂多在它或 kube-scheduler 之上扩展,而非从零写。你的切入点应是「会读写 Plugin/Extender + 理解工业方案设计」。



8.8 实战:安装 Koordinator 体验混部

8.8.1 安装 Koordinator

helm repo add koordinator-sh https://koordinator-sh.github.io/charts
helm repo update
helm install koordinator koordinator-sh/koordinator -n koordinator-system --create-namespace
kubectl get pods -n koordinator-system -w

8.8.2 模拟在离线混部

# 在线任务(高优)
kubectl run online --image=busybox --command -- sh -c 'while true; do echo online; sleep 1; done' --limits=cpu=2,memory=2Gi

# 离线任务(低优)
kubectl run offline --image=busybox --command -- sh -c 'while true; do echo offline; sleep 1; done' --limits=cpu=4,memory=4Gi

kubectl get pods -o wide
# 在线和离线 Pod 都 Running -- 混部成功

目的:Koordinator 让在线和离线任务共存,节点资源被充分利用。这就是混部核心。


8.9 自测题

  1. 为什么大厂不直接用原生 kube-scheduler 跑万卡训练?
  2. Gödel 的核心特点?什么是「乐观并发」?
  3. qGPU 相比 MIG 的优势?它怎么接入 kube-scheduler?
  4. Kueue 是什么、解决什么?为什么说它「不管调度到哪个节点」?
  5. ⭐ Koordinator 解决什么?混部的难点是调度还是隔离?为什么?
  6. ⭐ YuniKorn 是什么?Volcano / Kueue / YuniKorn 三者定位有何不同?
  7. 自研调度器的五条典型路线?
  8. 为什么说「Volcano 是完全开源,大厂在其上扩展」?

阶段二(资源层+调度层)到此结束。能画「GPU 卡→device-plugin→kube-scheduler/Volcano→Pod」全链路,并讲清 Gang/混部/异构接入即可进 09 训练框架。

← 返回专栏