对比
Scheduler 主流方案对比
| 维度 | 原生 kube-scheduler | Volcano | YuniKorn |
|---|---|---|---|
| 替换默认 | n/a(就是默认) | 替换(标 schedulerName) | 不替换(webhook 协作) |
| 调度单位 | Pod | Pod(带 PodGroup) | Pod(带 queue label) |
| Gang 语义 | ❌ | ✅ 原生 | ⚠️ TaskGroup 支持 |
| 优先级 / 抢占 | PriorityClass | PriorityClass + Queue | Queue 内 + 抢占 |
| 队列 | ❌ | ✅ 平面队列 | ✅ 嵌套队列(树状) |
| 多租户公平 | ❌ | DRF 算法 | Fair / Capacity / FIFO |
| 资源预留 | Reserve plugin | Queue capacity | Guaranteed / Max |
| GPU 拓扑 | 弱(node label) | ✅ NodeOrder + DRA | ⚠️ 弱 |
| 大数据集成 | ❌ | Spark Operator | Spark / Flink / Hive 原生 |
| AI 训练 | 弱 | 强 | 中 |
| 批处理(HPC) | ❌ | 强 | 中 |
| 性能 | 最高(in-process) | 高 | 高 |
| 自定义扩展 | Scheduler Plugin API | Scheduler Plugin(继承) | 队列策略 |
| 生态 | K8s 内核 | CNCF incubating | Apache TLP |
一句话定位
- 原生:默认首选,所有集群都跑
- Volcano:AI / HPC / Gang 场景
- YuniKorn:多租户 / 大数据 / 公平调度 场景
决策树
业务类型?
├─ 普通服务(web / API / 中间件)→ 原生
├─ AI 训练 / 分布式训练 → Volcano
├─ HPC / 仿真 / 基因 → Volcano
├─ Spark / Flink 大量跑批 → YuniKorn
├─ 多团队 / 多业务公平共享 → YuniKorn
└─ 自定义调度逻辑(业务相关)→ 原生 + Plugin API
共存模式
集群里三套可以并存:
Pod 调度走哪条:
├─ schedulerName: 默认 / 空 → 原生
├─ schedulerName: volcano → Volcano
└─ label queue / applicationId → YuniKorn webhook 接管
实际生产:
- 多数集群只跑原生,简单清晰
- AI 集群 = 原生(系统服务)+ Volcano(训练 Job)
- 大数据集群 = 原生(系统服务)+ YuniKorn(Spark / Flink)
Scheduler Framework 自定义 Plugin
// 示例: 自定义 Score 插件
type MyScorePlugin struct{}
func (pl *MyScorePlugin) Name() string { return "MyScorePlugin" }
func (pl *MyScorePlugin) Score(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) {
// 自定义打分逻辑
if isPreferredNode(nodeName) {
return 100, nil
}
return 0, nil
}
func (pl *MyScorePlugin) ScoreExtensions() framework.ScoreExtensions {
return nil
}
// 注册
var _ framework.ScorePlugin = &MyScorePlugin{}
跟其他 Plugin 一样通过 Scheduler Configuration 装载。
调度关键指标
- Throughput:scheduler 调度速率(Pod/s)
- Latency:单个 Pod 从创建到绑定节点的延迟(p50 / p99)
- Pending pods:长时间没调度的 Pod 数
- Preemption rate:抢占频率(过高说明资源不够)
# Prometheus 抓 kube-scheduler metrics
scheduler_pending_pods
scheduler_e2e_scheduling_duration_seconds_bucket
scheduler_queue_incoming_pods_total
scheduler_preemption_victims_count
选型建议
| 业务 | 推荐 |
|---|---|
| 创业 / 中小团队 / 普通业务 | 原生 |
| AI 公司(训练 + 推理) | 原生 + Volcano |
| 大数据公司(Spark / Flink / Hive) | 原生 + YuniKorn |
| 大型互联网(多业务线) | 原生 + YuniKorn + Volcano(按场景) |
| 金融 / 政企(强合规 + 多部门) | 原生 + YuniKorn |
一句话选型
默认原生;AI / HPC 加 Volcano;多租户 / 大数据加 YuniKorn;三套可以并存。