【集群】云原生批调度实战:Volcano版本修改与性能测试优化

【集群】云原生批调度实战:Volcano版本修改与性能测试优化

Fre5h1nd Lv6

本系列《云原生批调度实战:Volcano 监控与性能测试》计划分为以下几篇,点击查看其它内容。

  1. 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf
  2. 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf 实操注意事项说明
  3. 云原生批调度实战:调度器测试监控结果
  4. 云原生批调度实战:本地环境测试结果与视频对比分析
  5. 监控与测试环境解析:测试流程拆解篇
  6. 监控与测试环境解析:指标采集与可视化篇
  7. 监控与测试环境解析:自定义镜像性能回归测试
  8. 监控与测试环境解析:数据收集方法深度解析与Prometheus Histogram误差问题
  9. 云原生批调度实战:Volcano调度器enqueue功能禁用与性能测试
  10. 云原生批调度实战:Volcano Pod创建数量不足问题排查与Webhook超时修复
  11. 云原生批调度实战:Volcano版本修改与性能测试优化
  12. 云原生批调度实战:Volcano Webhook禁用与性能瓶颈分析

💡简介

本地环境测试结果与视频对比分析中,我们发现本地测试结果与KubeCon技术分享视频中的结果存在显著差异。虽然整体趋势基本一致,但在某些测试场景下,本地测试的CREATED事件曲线、SCHEDULED事件表现与视频预期不符。

通过深入分析,我们猜测这些差异可能源于Volcano调度器版本不同。视频中使用的可能是较新的版本(如1.12.0-alpha.0),而本地环境使用的是较旧版本(v1.11.0)。本文详细介绍了如何查看当前测试所用的Volcano版本,如何自动化升级到目标版本,以及如何验证版本升级的效果。

🔍问题回顾与分析

1. 本地测试与视频结果差异

1.1 差异现象总结

根据本地测试结果,我们发现了以下主要差异:

测试场景视频预期本地实际差异分析
10K Jobs × 1 PodYuniKorn吞吐量最高✅ 符合预期基本一致
500 Jobs × 20 PodsCREATED阶段性突变⚠️ 部分符合可能版本差异
20 Jobs × 500 PodsCREATED成为瓶颈❌ 出现突变瓶颈效应不明显
1 Job × 10K Pods调度速度平稳❌ 出现突变版本兼容性问题

1.2 差异原因猜测

基于测试结果分析,我们猜测差异可能源于:

  1. 调度器版本差异:本地使用v1.11.0,视频可能使用更新版本
  2. 性能优化差异:新版本可能包含重要的性能优化
  3. 算法改进差异:调度算法可能在新版本中有显著改进
  4. 配置默认值差异:新版本的默认配置可能更适合大规模测试

🔍如何查看测试所用的Volcano版本

1. 查看部署文件中的版本信息

1.1 直接查看配置文件

1
2
3
4
5
6
7
8
9
10
11
# 查看admission webhook manager版本
grep "image:" schedulers/volcano/volcano-admission/deployment.yaml | grep volcano

# 查看scheduler版本
grep "image:" schedulers/volcano/volcano-scheduler/deployment.yaml | grep volcano

# 查看controller manager版本
grep "image:" schedulers/volcano/volcano-controller/deployment.yaml | grep volcano

# 查看初始化job版本
grep "image:" schedulers/volcano/volcano-admission-init/job.yaml | grep volcano

1.2 批量查看所有版本

1
2
# 一次性查看所有Volcano组件版本
grep -r "image:" schedulers/volcano/ | grep volcano | grep -E "v[0-9]+\.[0-9]+\.[0-9]+"

输出示例

1
2
3
4
schedulers/volcano/volcano-admission/deployment.yaml:        image: kind-registry:5000/docker.io/volcanosh/vc-webhook-manager:v1.11.0
schedulers/volcano/volcano-admission-init/job.yaml: image: kind-registry:5000/docker.io/volcanosh/vc-webhook-manager:v1.11.0
schedulers/volcano/volcano-scheduler/deployment.yaml: image: kind-registry:5000/docker.io/volcanosh/vc-scheduler:v1.11.0
schedulers/volcano/volcano-controller/deployment.yaml: image: kind-registry:5000/docker.io/volcanosh/vc-controller-manager:v1.11.0

2. 查看运行中的集群版本

2.1 检查已部署的Pod版本

1
2
3
4
5
# 设置kubeconfig
export KUBECONFIG=./clusters/volcano/kubeconfig.yaml

# 查看运行中的Pod镜像版本
kubectl get pods -n volcano-system -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'

2.2 查看ConfigMap中的配置

1
2
3
4
5
# 查看调度器配置
kubectl get configmap -n volcano-system volcano-scheduler-configmap -o yaml

# 查看admission webhook配置
kubectl get validatingwebhookconfigurations -o yaml | grep -A 5 -B 5 volcano

3. 版本信息汇总

通过上述方法,我们确认了当前环境使用的Volcano版本:

组件当前版本镜像名称
Webhook Managerv1.11.0volcanosh/vc-webhook-manager:v1.11.0
Schedulerv1.11.0volcanosh/vc-scheduler:v1.11.0
Controller Managerv1.11.0volcanosh/vc-controller-manager:v1.11.0

🚀如何自动化升级Volcano版本

1. 目标版本选择

我们选择升级到v1.12.0-alpha.0,原因主要是KubeCon视频中说明使用了该版本。推测新版本中可能包含性能改进、旧版本中可能存在部分bug被修复,甚至调度算法可能也有所更新。

2. 版本升级脚本

2.1 批量替换版本

如果不想使用脚本,也可以手动执行:

1
2
3
4
5
6
7
8
9
# 备份原文件
cp -r schedulers/volcano schedulers/volcano.backup

# 批量替换版本
sed -i 's/v1\.11\.0/v1.12.0-alpha.0/g' schedulers/volcano/*/deployment.yaml
sed -i 's/v1\.11\.0/v1.12.0-alpha.0/g' schedulers/volcano/*/job.yaml

# 验证修改结果
grep -r "image:" schedulers/volcano/ | grep volcano | grep -E "v[0-9]+\.[0-9]+\.[0-9]+"

3.2 逐个文件修改

也可以逐个文件进行修改:

1
2
3
4
5
6
7
8
9
10
11
# 修改admission webhook
sed -i 's/v1\.11\.0/v1.12.0-alpha.0/g' schedulers/volcano/volcano-admission/deployment.yaml

# 修改scheduler
sed -i 's/v1\.11\.0/v1.12.0-alpha.0/g' schedulers/volcano/volcano-scheduler/deployment.yaml

# 修改controller
sed -i 's/v1\.11\.0/v1.12.0-alpha.0/g' schedulers/volcano/volcano-controller/deployment.yaml

# 修改初始化job
sed -i 's/v1\.11\.0/v1.12.0-alpha.0/g' schedulers/volcano/volcano-admission-init/job.yaml

✅验证版本升级效果

1. 配置文件验证

1.1 检查版本是否已更新

1
2
3
4
# 验证所有文件是否已更新
grep -r "image:" schedulers/volcano/ | grep volcano | grep -E "v[0-9]+\.[0-9]+\.[0-9]+"

# 期望输出:所有文件都显示 v1.12.0-alpha.0

1.2 检查文件完整性

1
2
3
4
# 检查是否有遗漏的文件
find schedulers/volcano/ -name "*.yaml" -exec grep -l "v1\.11\.0" {} \;

# 如果没有输出,说明所有文件都已更新

2. 部署验证

2.1 重新部署Volcano

1
2
3
4
5
6
7
8
# 清理旧环境
make down-volcano

# 重新部署
make up-volcano

# 等待服务就绪
make wait-volcano

2.2 验证Pod镜像版本

1
2
3
4
5
# 设置kubeconfig
export KUBECONFIG=./clusters/volcano/kubeconfig.yaml

# 检查Pod是否使用新版本镜像
kubectl get pods -n volcano-system -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}' | grep volcano

期望输出:所有Pod都应该显示v1.12.0-alpha.0版本

2.3 检查服务状态

1
2
3
4
5
6
# 检查所有Pod状态
kubectl get pods -n volcano-system

# 检查服务日志
kubectl logs -n volcano-system deployment/volcano-scheduler --since=1m
kubectl logs -n volcano-system deployment/volcano-controller-manager --since=1m

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

🗺参考文献

[1] Github - kube-scheduling-perf

[2] Volcano GitHub - Releases

[3] Volcano Documentation - Version Compatibility

[4] 云原生批调度实战:本地环境测试结果与视频对比分析

[5] 云原生批调度实战:Volcano Pod创建数量不足问题排查与Webhook超时修复

[6] 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf

  • 标题: 【集群】云原生批调度实战:Volcano版本修改与性能测试优化
  • 作者: Fre5h1nd
  • 创建于 : 2025-08-20 01:25:19
  • 更新于 : 2025-08-21 19:56:54
  • 链接: https://freshwlnd.github.io/2025/08/20/k8s/k8s-scheduler-performance-volcano-version/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论