【集群】云原生批调度实战: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禁用与性能瓶颈分析

(在未来)优化时,在调度器源码中加入 新算法 后,我们最关心的就是:

「我改的逻辑到底是否提升了吞吐量?」

本篇将手把手演示 本地构建自定义 Volcano Scheduler 镜像 → 替换到 Kind 集群 → 重跑 Benchmark 的全流程,帮助大家 快速验证改动效果


1️⃣ Fork & 修改源码

  1. Fork Volcano 仓库;
  2. 切分支 feat/my-algorithm
  3. pkg/scheduler/plugins/ 新增/修改调度逻辑;
  4. 本地单元测试通过后,进入构建阶段。

示例改动:在 allocate.go 打印每次 selectBestNode 结果。


2️⃣ 本地构建镜像 & 推送 Registry

项目脚本已自带 本地 5000 端口 Registry,无需额外安装。关键脚本:

hack/local-registry-with-load-images.sh:17:33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Create local registry container if not running
if [[ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]]; then
target_image="docker.io/library/registry:2.8.3"
if [[ ${IMAGE_PREFIX} != "" ]] && ! docker image inspect "${target_image}" &>/dev/null; then
docker pull "${IMAGE_PREFIX}${target_image}"
docker tag "${IMAGE_PREFIX}${target_image}" "${target_image}"
fi
docker run \
-d \
--restart=always \
-p "127.0.0.1:${reg_port}:5000" \
--network bridge \
--name "${reg_name}" \
-v "${ROOT_DIR}/registry-data:/var/lib/registry" \
"${target_image}" || :
sleep 1
fi

构建 & 推送命令:

1
2
3
4
5
6
7
# 假设当前位于 volcano 仓库根目录
export TAG=dev
make -C build scheduler-image \
IMAGE_REPO=kind-registry:5000/volcano-scheduler \
IMAGE_TAG=${TAG}

docker push kind-registry:5000/volcano-scheduler:${TAG}

若在国内环境,可通过 IMAGE_PREFIX 拉取基础镜像,详见上文 Metrics 篇。

Mermaid 流程一览:

graph TD;
  A[源码改动] --> B("Docker build")
  B --> C("本地镜像 kind-registry:5000")
  C --> D("kustomize build → kubectl apply")
  D --> E("Kind 集群调度性能测试")

3️⃣ 替换 Deployment 中的镜像

调度器 Deployment 位于:

schedulers/volcano/volcano-scheduler/deployment.yaml
1
2
3
4
5
6
7
8
...
spec:
template:
spec:
containers:
image: kind-registry:5000/docker.io/volcanosh/vc-scheduler:v1.11.0
imagePullPolicy: IfNotPresent
name: volcano-scheduler

只需把 image: 行替换为新镜像:

1
2
- image: kind-registry:5000/docker.io/volcanosh/vc-scheduler:v1.11.0
+ image: kind-registry:5000/volcano-scheduler:dev

4️⃣ 重新压测 & 对比指标

  1. 启动集群 & 压测
1
2
3
make prepare-volcano start-volcano \
IMAGE_PREFIX= \
NODES_SIZE=1000 QUEUES_SIZE=1 JOBS_SIZE_PER_QUEUE=500 PODS_SIZE_PER_JOB=20
  1. 结束测试 & 保存面板
1
make end-volcano
  1. 查看结果目录(假设时间戳 1690300000):
1
2
3
4
5
6
7
8
results/
└── 1690300000/
├── audit.log
├── metrics.json
└── panels/
├── panel-1.png # CREATED 曲线
├── panel-2.png # SCHEDULED 曲线
└── panel-3.png # RUNNING 曲线


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

🗺参考文献

[1] Github - kube-scheduling-perf

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

[3] Kubernetes官方文档 - 审计

[4] Kubernetes官方文档 - 审计Policy配置参考

  • 标题: 【集群】云原生批调度实战:Volcano 自定义镜像与二次压测
  • 作者: Fre5h1nd
  • 创建于 : 2025-08-08 18:13:02
  • 更新于 : 2025-08-21 19:57:50
  • 链接: https://freshwlnd.github.io/2025/08/08/k8s/k8s-scheduler-performance-volcano-custom/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论