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

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

Fre5h1nd Lv6

本系列《云原生批调度实战:Volcano 深度解析》计划分为以下几篇,点击查看其它内容。

  1. 云原生批调度实战:Volcano 深度解析(一)批处理背景需求与Volcano特点
  2. 云原生批调度实战:Volcano 深度解析(二)Volcano调度流程与调度状态
  3. 云原生批调度实战:Volcano 安装与初试
  4. 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf
  5. 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf 实操注意事项说明
  6. 云原生批调度实战:调度器测试监控结果
  7. 云原生批调度实战:本地环境测试结果与视频对比分析

💡简介

上一篇博客中,我们详细介绍了 kube-scheduling-perf 项目的自动化测试框架。本文记录了笔者在本地环境中实际运行该测试工具的过程,并将测试结果与 KubeCon 技术分享 中的视频结果进行对比分析。

通过对比发现,虽然整体趋势基本一致,但在某些测试场景下存在显著差异,这些差异主要源于硬件配置、软件版本等因素的影响。本文分析了这些差异的原因,为读者在实际部署和测试时提供参考。

🖼️测试环境配置

硬件配置

@hwdef 建议,想办法更换了系统和实验环境,避免了前期实践篇博客遇到的大量因为内核版本导致的问题,也避免用低版本系统测出不准确数据导致对性能测试和优化的影响。
顺便一提,在实践中遇到的与内核版本无关的通用性问题也已提交PR到kube-scheduling-perf仓库~

配置项规格
操作系统Ubuntu Linux 5.15.0-143-generic
CPUIntel Xeon Gold 6230 @ 2.10GHz, 8核
内存15GB (可用13GB)
存储79GB (可用21GB)

软件版本

软件版本
Docker27.5.1
Kubernetes1.32.2 (Kind集群)
kubectlv1.33.2
Go1.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事件紧密跟随,说明调度阶段不是瓶颈,性能瓶颈确实在创建阶段

图1:本地测试,无GangScheduling要求下,第一种benchmark测试结果
图1:本地测试,无GangScheduling要求下,第一种benchmark测试结果

第二种 Benchmark:500 Jobs × 20 Pods

测试参数:每个Job有20个Pod,共500个Job,共10kPod

预期结果(基于视频)

  • Volcano的调度速度慢于另外两种调度器
  • SCHEDULED明显滞后于CREATED,说明调度速度较慢,此时性能瓶颈为调度(且根据斜率,前期调度速度快、后期逐渐变慢)
  • CREATED阶段性突变现象(正常情况下CREATED应该匀速增加,这里的现象说明controller会间歇性卡住一会儿)

实际结果

  • 部分符合预期:Volcano的调度速度确实慢于其他调度器
  • 差异点:CREATED没有成为瓶颈,始终比SCHEDULED的速度更快,与视频中的预期不符
  • 可能原因:本地环境的硬件资源限制或软件版本差异影响了测试结果

图2:本地测试,无GangScheduling要求下,第二种benchmark测试结果
图2:本地测试,无GangScheduling要求下,第二种benchmark测试结果

第三种 Benchmark:20 Jobs × 500 Pods

测试参数:每个Job有500Pod,共20个Job,共10kPod

预期结果(基于视频)

  • Volcano的调度速度仍然慢于另外两种调度器
  • SCHEDULED仍然明显滞后于CREATED,说明调度速度较慢,此时性能瓶颈为调度(且根据斜率,前期调度速度比第二种benchmark下更慢、后期逐渐加速)
  • 不存在CREATED阶段性突变现象

实际结果

  • 与预期不符:反而更接近第二种benchmark的预期,前期CREATED和SCHEDULED线紧贴、后期CREATED出现阶段性突变
  • 可能原因
    • 可能是CREATED成为瓶颈,导致SCHEDULED速度被严重限制
    • 可能是SCHEDULED本来就很慢,反过来导致CREATED没必要提前创建(可能新版本下有其他机制做出该决策)

图3:本地测试,无GangScheduling要求下,第三种benchmark测试结果
图3:本地测试,无GangScheduling要求下,第三种benchmark测试结果

第四种 Benchmark:1 Job × 10K Pods

测试参数:每个Job有10kPod,共1个Job,共10kPod

预期结果(基于视频)

  • 现象与第三种benchmark类似
  • 根据斜率,调度速度整体比较平稳

实际结果

  • 与预期不符:和第三种benchmark类似,CREATED出现阶段性突变
  • 可能原因:本地环境的资源限制影响了大规模Pod的创建和调度

图4:本地测试,无GangScheduling要求下,第四种benchmark测试结果
图4:本地测试,无GangScheduling要求下,第四种benchmark测试结果

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修复差异
  • 默认配置差异

🏥总结与反思

主要发现

  1. 整体趋势一致:虽然存在差异,但三种调度器的相对性能排名基本符合预期
  2. 环境影响显著:硬件配置、软件版本、网络环境等因素对测试结果有重要影响
  3. 资源瓶颈明显:在资源受限的本地环境中,CREATED事件更容易成为瓶颈

后续工作

  1. 脚本分析:进一步浏览 kube-scheduling-perf 脚本所使用的环境、所监控的指标、所使用的监控方式,为后续增加其它指标监控做准备
  2. 调度器分析:进一步分析CREATED阶段性突变的具体原因

  • 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
  • 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。

🗺参考文献

[1] Github - kube-scheduling-perf

[2] A Comparative Analysis of Kueue, Volcano, and YuniKorn - Wei Huang, Apple & Shiming Zhang, DaoCloud

[3] Kueue Documentation

[4] Volcano Documentation

[5] YuniKorn Documentation

  • 标题: 【集群】云原生批调度实战:本地环境测试结果与视频对比分析
  • 作者: 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 进行许可。
评论