
【集群】云原生批调度实战:本地环境测试结果与视频对比分析

本系列《云原生批调度实战:Volcano 深度解析》计划分为以下几篇,点击查看其它内容。
💡简介
在上一篇博客中,我们详细介绍了 kube-scheduling-perf
项目的自动化测试框架。本文记录了笔者在本地环境中实际运行该测试工具的过程,并将测试结果与 KubeCon 技术分享 中的视频结果进行对比分析。
通过对比发现,虽然整体趋势基本一致,但在某些测试场景下存在显著差异,这些差异主要源于硬件配置、软件版本等因素的影响。本文分析了这些差异的原因,为读者在实际部署和测试时提供参考。
🖼️测试环境配置
硬件配置
应 @hwdef 建议,想办法更换了系统和实验环境,避免了前期实践篇博客遇到的大量因为内核版本导致的问题,也避免用低版本系统测出不准确数据导致对性能测试和优化的影响。
顺便一提,在实践中遇到的与内核版本无关的通用性问题也已提交PR到kube-scheduling-perf仓库~
配置项 | 规格 |
---|---|
操作系统 | Ubuntu Linux 5.15.0-143-generic |
CPU | Intel Xeon Gold 6230 @ 2.10GHz, 8核 |
内存 | 15GB (可用13GB) |
存储 | 79GB (可用21GB) |
软件版本
软件 | 版本 |
---|---|
Docker | 27.5.1 |
Kubernetes | 1.32.2 (Kind集群) |
kubectl | v1.33.2 |
Go | 1.24 (Docker容器) |
存储需求
项目 | 大小 |
---|---|
当前结果目录 | 15GB |
单个测试结果 | 1.3GB - 2.7GB(主要占空间的是日志文件) |
建议预留空间 | 50GB+ |
🧠测试结果对比分析
第一种 Benchmark:10K Jobs × 1 Pod
测试参数:每个Job只有1个Pod,共10K个Job,共10kPod
预期结果(基于视频)
- YuniKorn吞吐量比另外两种调度器更高,主要是因为 Kueue 和 Volcano 的 Job 受 K8s Webhook QPS限制
- CREATED和SCHEDULED事件之间的差距很小,说明没有调度阶段不为瓶颈、没有排队,此时性能瓶颈为创建阶段
实际结果
- 符合预期:如下图所示,YuniKorn的吞吐量确实高于其他两种调度器
- 瓶颈分析:CREATED和SCHEDULED事件紧密跟随,说明调度阶段不是瓶颈,性能瓶颈确实在创建阶段

第二种 Benchmark:500 Jobs × 20 Pods
测试参数:每个Job有20个Pod,共500个Job,共10kPod
预期结果(基于视频)
- Volcano的调度速度慢于另外两种调度器
- SCHEDULED明显滞后于CREATED,说明调度速度较慢,此时性能瓶颈为调度(且根据斜率,前期调度速度快、后期逐渐变慢)
- CREATED阶段性突变现象(正常情况下CREATED应该匀速增加,这里的现象说明controller会间歇性卡住一会儿)
实际结果
- 部分符合预期:Volcano的调度速度确实慢于其他调度器
- 差异点:CREATED没有成为瓶颈,始终比SCHEDULED的速度更快,与视频中的预期不符
- 可能原因:本地环境的硬件资源限制或软件版本差异影响了测试结果

第三种 Benchmark:20 Jobs × 500 Pods
测试参数:每个Job有500Pod,共20个Job,共10kPod
预期结果(基于视频)
- Volcano的调度速度仍然慢于另外两种调度器
- SCHEDULED仍然明显滞后于CREATED,说明调度速度较慢,此时性能瓶颈为调度(且根据斜率,前期调度速度比第二种benchmark下更慢、后期逐渐加速)
- 不存在CREATED阶段性突变现象
实际结果
- 与预期不符:反而更接近第二种benchmark的预期,前期CREATED和SCHEDULED线紧贴、后期CREATED出现阶段性突变
- 可能原因:
- 可能是CREATED成为瓶颈,导致SCHEDULED速度被严重限制
- 可能是SCHEDULED本来就很慢,反过来导致CREATED没必要提前创建(可能新版本下有其他机制做出该决策)

第四种 Benchmark:1 Job × 10K Pods
测试参数:每个Job有10kPod,共1个Job,共10kPod
预期结果(基于视频)
- 现象与第三种benchmark类似
- 根据斜率,调度速度整体比较平稳
实际结果
- 与预期不符:和第三种benchmark类似,CREATED出现阶段性突变
- 可能原因:本地环境的资源限制影响了大规模Pod的创建和调度

Gang调度测试
预期结果(基于视频)
- Volcano的性能都是最佳的
实际结果
- 与预期不符:可能由于机器资源有限,大部分情况下集中调度甚至无法正常创建Pod
- 额外发现:YuniKorn所创建的Pod数量大于10k,猜测可能是出现bug导致Pod重启(但按理说使用模拟环境不应该有该问题)
🔨差异原因分析
1. 硬件资源限制
本地环境限制:
- CPU:8核 vs 视频中可能使用更高配置(kube-scheduling-perf仓库推荐 16核)
- 内存:15GB vs 视频中可能使用更大内存(kube-scheduling-perf仓库推荐 16GB)
影响:硬件资源不足可能导致:
- Pod创建速度受限
- 调度器处理能力下降
- 系统整体性能瓶颈
2. 软件版本差异
版本对比:
- Kubernetes:1.32.2 vs 视频中可能使用不同版本
- Docker:27.5.1 vs 视频中可能使用不同版本
- 调度器版本:可能存在差异
影响:不同版本可能存在:
- 性能优化差异
- Bug修复差异
- 默认配置差异
🏥总结与反思
主要发现
- 整体趋势一致:虽然存在差异,但三种调度器的相对性能排名基本符合预期
- 环境影响显著:硬件配置、软件版本、网络环境等因素对测试结果有重要影响
- 资源瓶颈明显:在资源受限的本地环境中,CREATED事件更容易成为瓶颈
后续工作
- 脚本分析:进一步浏览 kube-scheduling-perf 脚本所使用的环境、所监控的指标、所使用的监控方式,为后续增加其它指标监控做准备
- 调度器分析:进一步分析CREATED阶段性突变的具体原因
- 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
- 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。
🗺参考文献
- 标题: 【集群】云原生批调度实战:本地环境测试结果与视频对比分析
- 作者: Fre5h1nd
- 创建于 : 2025-07-23 14:28:27
- 更新于 : 2025-07-23 14:56:44
- 链接: https://freshwlnd.github.io/2025/07/23/k8s/k8s-scheduler-performance-test-local/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
评论