
OSPP-Volcano:大规模性能测试与调优(结项报告)
1. 引言
- 介绍 ospp 课题(背景、目标): https://summer-ospp.ac.cn/org/orgdetail/3bad8469-f54d-4a44-9f29-c81fa24d3864
- 整体摘要(现象、猜想、结果):
- 经过实验发现,非启用Gang调度时,Volcano调度效率比其它调度器效率稍低,并且存在显著的阶梯状卡顿现象。
- 经过多种猜想与验证,发现:
- Job 本身的处理确实需要更多的资源,因此相比于没有 Job 管理功能的 YuniKorn,Volcano 和 Kueue 都会显得效率偏低,但在启用 Gang 调度的场景下这是必要的。生产环境下也应该提供更充分的资源而非使环境受限。
- Webhook 会成为一个潜在的性能瓶颈,在大规模场景下应当配置充足的资源或设置合适的 timeout。在未来也值得考虑把 Webhook 的功能迁移到 Controller 及其他组件以优化性能。
- 为 Controller 调整合适的协程数有助于提高性能,且并非协程数越高越好。
- Controller 与 Scheduler 之间存在潜在的争用关系,从全局最优的角度看,让 CREATE 和 SCHEDULE 的速率接近而非单纯优化某一方的速率,实现一种动态平衡,可能是更好的选择。
2. 监控环境说明
- kube-scheduling-perf项目简介,具体已撰写为系列博客,在此不再赘述。
- 输出图指标介绍:横轴为测试时间、纵轴为累计完成创建/调度Pod数量,因此斜率代表每秒完成创建/调度Pod数量。
3. 监控现象
- 结合KubeCon与本地复现情况,发现几个关键现象:
- 在非启用Gang调度时:
- Volcano效率比其它调度器效率稍低。
- 在Pod数量相同的前提下,Job数量大时,Volcano 和 Kueue(都具有 Job 管理功能)的创建 Pod 阶段都会成为瓶颈。
- 在Pod数量相同的前提下,Job数量大时,Volcano 的创建/调度 Pod 呈现阶梯状卡顿现象。
- 在Pod数量相同的前提下,Job数量小时,Volcano 的创建/调度 Pod容易出现大批量失败( 10000 个 Pod 中,只有 2000+ 个成功创建及调度)。
- 启用Gang调度时:
- Volcano性能远高于其它调度器。
- 相比于非启用Gang调度时,启用Gang调度时所有调度器所需时间都更长。
- 在非启用Gang调度时:
4. 猜想与验证
- 经过大量猜想与验证,发现以下几个因素与性能最相关:
- Webhook
- Timeout:面向大规模请求,Webhook资源不足时,严格的 timeout 会导致 Pod 创建/调度出现大批量失败。
- Webhook 本身的复杂性:由于需要多次判断,且每次判断都需经过证书验证与网络传输,因此 Webhook 功能本身使得 Volcano 整体调度效率比其它调度器偏低。
- Controller
- 协程数:Controller 在创建阶段会将一个 Job 内的所有 Pod 由一个协程负责创建,所有 Pod 创建完成后才会释放。因此应当对协程进行调优。且协程数优化存在一个最优值,既不能太少(无法充分利用计算资源),也不能太多(加剧 API-Server 争用)。这个最优值需要根据具体的 Job 数量和 Pod 数量来动态调整。
- Controller 与 Scheduler 间的争用
- 发现创建与调度(分别属于Controller 与 Scheduler)的阶梯性卡顿问题不会同时出现,意味着其中存在某种争用关系。减小卡顿其实并不是”治本”。即使我们通过调优让 CREATE 阶段飞速完成,这些 Pod 依然要等待缓慢的 SCHEDULE 阶段,总时间相差无几,甚至可能因为前期资源占用过猛而变得更长。从全局最优的角度看,让 CREATE 和 SCHEDULE 的速率接近,实现一种动态平衡,可能是更好的选择。
- Webhook
- 此外我们也排除了一些不相关因素:
- enqueue 阶段
- Volcano 版本
5. 调优总结与未来展望
- 短期优化方案:
- Webhook
- 调整超时时间 timeout
- 增加资源配置
- Webhook
- 长期优化方案:
- 禁用 Webhook,将功能转移到 Controller 及 CRD。
- 优化 Controller 和 Scheduler 之间的联动速率调整。
- 其它:
- Job 本身的处理确实需要更多的资源,因此相比于没有 Job 管理功能的 YuniKorn,Volcano 和 Kueue 都会显得效率偏低,但在启用 Gang 调度的场景下这是必要的。生产环境下也应该提供更充分的资源而非使环境受限。
- 标题:
- 作者: Fre5h1nd
- 创建于 : 2025-09-18 09:24:55
- 更新于 : 2025-09-18 09:30:22
- 链接: https://freshwlnd.github.io/2025/09/18/k8s/summary/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
评论