
【集群】云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf

本系列《云原生批调度实战:Volcano 深度解析》计划分为以下几篇,点击查看其它内容。
kube-scheduling-perf:Kubernetes多调度器性能测试框架全解析
项目简介
kube-scheduling-perf
项目为 Kubernetes 社区主流调度器(如 Kueue、Volcano、YuniKorn)提供了统一、自动化的性能测试与对比分析框架。通过自动化脚本和标准化测试流程,用户可在本地快速搭建测试集群,批量运行多种调度器的性能基准测试,并自动收集、汇总测试结果,极大提升了调度器性能评测的效率和可复现性。
📖 阅读说明:本文为 kube-scheduling-perf 项目的理论介绍篇,重点解析项目的架构设计、自动化流程和核心原理。如果您计划实际部署和使用该工具,强烈建议同时阅读 实操注意事项说明文档,该文档详细记录了在实际环境中可能遇到的各种问题(如网络访问、系统兼容性、权限配置等)及其解决方案。
目录结构与核心组件说明
clusters 目录
clusters/
目录下包含了每个调度器(kueue、volcano、yunikorn)及 overview 的子目录。- 每个调度器子目录下都包含一个
Makefile
和kind.yaml
,用于定义该调度器测试集群的启动、销毁、等待等操作。 overview/
子目录用于搭建统一的监控与可视化环境(如 Prometheus + Grafana),并负责性能数据的采集与展示。
bin 目录
bin/
目录用于存放自动编译生成的二进制文件,如kind
(用于创建K8s集群)、test-xxx
(各调度器的测试用例可执行文件)。- 这些二进制文件由 Makefile 自动生成和调用,用户无需手动干预。
Makefile 语法与目标说明
.PHONY 说明
.PHONY
是 Makefile 的一个特殊声明,用于标记”伪目标”。- 被
.PHONY
声明的目标不会与同名文件或目录冲突,每次执行make
时都会被强制执行。 - 例如:
1
2
3
up:
# ...命令...
目标与依赖格式
- Makefile 的每个目标格式为:
1
2
3目标名: 依赖1 依赖2 ...
命令1
命令2 - 冒号后面可以跟依赖目标,表示在执行当前目标前会先执行依赖目标。
- 命令必须以Tab缩进。
自动化测试流程详解
1. make命令的起点:default 目标
当你在项目根目录下执行 make
时,实际上会触发 Makefile
中的 default
目标。其内容如下:
1 |
|
- 这里依次调用了多次
serial-test
,每次传入不同的集群规模、作业数量、Pod数量、是否GANG调度等参数。 - 这样做的目的是批量测试不同场景下各调度器的性能,保证测试的全面性和对比性。
2. serial-test 目标的作用
1 |
|
serial-test
首先依赖bin/kind
,确保本地有 kind 工具(用于创建K8s集群)。- 然后对
SCHEDULERS
(即 Kueue、Volcano、YuniKorn)中的每个调度器,依次执行prepare-xxx
、start-xxx
、end-xxx
三个目标。 - 最后执行 overview 相关目标和结果保存。
3. serial-test 的每一步剖析
3.1 bin/kind
1 | bin/kind: |
- 用 Docker 构建
kind
工具的二进制文件,确保后续可以用 kind 创建本地K8s集群。
3.2 prepare-xxx、start-xxx、end-xxx
这些目标通过 define test-scheduler
宏自动生成。以 kueue
为例:
prepare-kueue
:启动集群、等待就绪、初始化测试。start-kueue
:重置审计日志,运行批量作业调度测试。end-kueue
:销毁测试集群。
其它调度器(如 volcano、yunikorn)流程类似。
3.3 overview 相关目标
prepare-overview
1 |
|
- 启动 overview 监控集群,并等待其所有服务就绪。
start-overview
1 |
|
- 在 overview 集群中启动数据导出与采集服务(如 patch、kustomize、kubectl create 等)。
save-result
1 |
|
- 等待一段时间,采集最新的监控数据,调用脚本保存结果,并归档到
results/
目录。
end-overview
1 |
|
- 销毁 overview 监控集群,释放资源。
目标之间的调用关系图
graph TD A[make] --> B[default] B --> C1[serial-test(参数1)] B --> C2[serial-test(参数2)] B --> Cn[serial-test(参数n)] C1 --> D1[prepare-scheduler] C1 --> D2[start-scheduler] C1 --> D3[end-scheduler] C1 --> E[prepare-overview/start-overview/save-result/end-overview] D1 --> F1[up-scheduler] D1 --> F2[wait-scheduler] D1 --> F3[test-init-scheduler] D2 --> G1[reset-auditlog-scheduler] D2 --> G2[test-batch-job-scheduler] D3 --> H[down-scheduler]
注意事项
⚠️ 重要提醒:本文档主要介绍 kube-scheduling-perf 项目的理论架构和自动化流程。在实际运行过程中,由于外网访问限制、系统版本兼容性、用户权限配置等问题,您可能会遇到各种部署和使用障碍。
实际部署使用指南:请务必参考 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf 实操注意事项说明 文档,该文档详细记录了:
- 网络访问问题:国内环境下的镜像加速配置、Go模块代理设置
- 系统兼容性问题:内核版本适配、Docker版本要求、Go版本兼容性
- 权限配置问题:Docker容器权限、目录所有权、用户权限设置
- 版本降级方案:针对老旧系统的版本适配策略
- 故障排除指南:常见错误及解决方案
该注意事项文档基于实际部署经验总结,能够帮助您快速解决部署过程中的各种技术难题,确保测试工具能够正常运行。
总结
make
触发default
,批量执行多组参数化的serial-test
。serial-test
依次对每个调度器完成:集群部署→初始化→批量作业测试→集群销毁→结果采集。- overview 相关目标 负责性能数据的统一采集与可视化。
- clusters 目录 负责各调度器及监控集群的生命周期管理。
- bin 目录 存放自动生成的工具和测试用例二进制文件。
- .PHONY 声明伪目标,保证每次都能正确执行。
本项目通过 Makefile 的自动化编排、参数化测试、统一的日志与指标采集、可视化监控等手段,实现了 Kubernetes 多调度器性能对比的”一键化”与标准化。极大降低了测试门槛,提高了效率和可复现性,非常适合调度器开发者、性能分析师和社区贡献者使用与扩展。
- 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
- 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。
🗺参考文献
- 标题: 【集群】云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf
- 作者: Fre5h1nd
- 创建于 : 2025-06-24 21:12:48
- 更新于 : 2025-07-08 09:01:05
- 链接: https://freshwlnd.github.io/2025/06/24/k8s/k8s-scheduler-performance-test/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。