
【集群】云原生批调度实战:Volcano Pod创建数量不足问题排查与Webhook超时修复

本系列《云原生批调度实战:Volcano 监控与性能测试》计划分为以下几篇,点击查看其它内容。
- 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf
- 云原生批调度实战:调度器测试与监控工具 kube-scheduling-perf 实操注意事项说明
- 云原生批调度实战:调度器测试监控结果
- 云原生批调度实战:本地环境测试结果与视频对比分析
- 监控与测试环境解析:测试流程拆解篇
- 监控与测试环境解析:指标采集与可视化篇
- 监控与测试环境解析:自定义镜像性能回归测试
- 监控与测试环境解析:数据收集方法深度解析与Prometheus Histogram误差问题
- 云原生批调度实战:Volcano调度器enqueue功能禁用与性能测试
- 云原生批调度实战:Volcano Pod创建数量不足问题排查与Webhook超时修复
- 云原生批调度实战:Volcano版本修改与性能测试优化
- 云原生批调度实战:Volcano Webhook禁用与性能瓶颈分析
💡简介
在上一篇博客中,我们介绍了如何禁用Volcano调度器的enqueue功能。然而,在实际测试过程中,我们发现了一个更严重的问题:Pod创建数量始终少于10000,仅达到1000左右,这严重影响了测试结果的准确性。
本文详细记录了问题排查的完整过程,从发现异常现象到分析4.9GB的审计日志,最终定位到Webhook超时是导致Pod创建失败的根本原因。通过修改Webhook超时时间,我们成功解决了这个问题。
🚨问题现象描述
测试环境配置
我们使用以下参数进行测试:
1 | make serial-test \ |
预期结果:应该创建10,000个Pod
实际结果:仅创建了不到1,000个Pod,成功率不到10%
🔍问题排查过程
1. 初步分析
首先,我们检查了测试环境的基本状态:
1 | # 检查Pod数量 |
发现确实只有少量Pod被创建,大部分Pod创建请求似乎失败了。
2. 日志文件分析
2.1 日志文件大小
测试完成后,我们发现审计日志文件异常巨大:
1 | ls -lh results/1755448387/logs/kube-apiserver-audit.volcano.log |
4.9GB的日志文件表明系统产生了大量的审计记录,远大于其它测试的审计记录,猜测这意味着存在大量失败的操作。
2.2 高效日志分析方法
由于日志文件过大,我们采用了高效的分析方法:
1 | # 统计错误数量 |
3. 根本原因定位
3.1 错误模式分析
通过分析日志中的错误信息,我们发现了统一的错误模式:
1 | { |
关键信息:
- 错误类型:Webhook调用超时
- 超时时间:10秒
- 影响范围:98.7%的Pod创建请求失败
3.2 统计数据汇总
指标 | 数量 | 占比 |
---|---|---|
总Pod创建请求 | 526,767 | 100% |
成功创建 | 712 | 0.13% |
失败创建 | 520,518 | 98.7% |
Webhook超时错误 | 520,120 | 98.7% |
4. 问题根因分析
4.1 Webhook超时机制
Volcano使用admission webhook来验证和修改Pod创建请求:
Pod创建流程:
1
kubectl create pod → API Server → Admission Webhook → Volcano Controller → Pod创建
超时配置:
- 当前配置:
timeoutSeconds: 10
- 问题:10秒内无法处理大量并发Pod创建请求
- 当前配置:
4.2 性能瓶颈分析
当设置PODS_SIZE_PER_JOB=10000
时:
- 并发压力:系统需要同时处理10,000个Pod创建请求
- Webhook负载:每个请求都需要经过admission webhook验证
- 超时触发:大量请求堆积导致处理时间超过10秒
- 失败连锁:超时失败导致Pod创建失败,影响整体测试结果
🔧问题修复方案
1. 修改Webhook超时时间
1.1 手动修改方法
我们需要将所有webhook配置文件的超时时间从10秒增加到30秒:
1 | # 查找所有webhook配置文件 |
重要说明:Kubernetes对webhook超时时间有严格限制,必须在1到30秒之间。我们最初尝试设置为60秒,但在部署时遇到了验证错误。
1.3 Kubernetes超时时间限制
在修复过程中,我们发现了一个重要的Kubernetes限制:
当我们尝试将webhook超时时间设置为60秒时,在部署过程中遇到了以下错误:
1 | Error from server (Invalid): error when creating "../../schedulers/volcano": |
这个错误表明:
- Kubernetes限制:webhook超时时间必须在1到30秒之间
- 我们之前的设置:60秒超出了允许范围
- 影响范围:所有7个webhook配置文件都无法部署
1.2 修改的文件列表
需要修改的7个webhook配置文件:
admission-service-jobs-validate_validatingwebhookconfiguration.yaml
admission-service-queues-mutate_mutatingwebhookconfiguration.yaml
admission-service-jobs-mutate_mutatingwebhookconfiguration.yaml
admission-service-podgroups-mutate_mutatingwebhookconfiguration.yaml
admission-service-pods-mutate_mutatingwebhookconfiguration.yaml
admission-service-queues-validate_validatingwebhookconfiguration.yaml
admission-service-pods-validate_validatingwebhookconfiguration.yaml
2. 修复实现
为了修改配置,可以按照以下步骤进行:
步骤1:备份原配置文件
1 | # 创建备份目录 |
步骤2:查找需要修改的文件
1 | # 查找所有包含timeoutSeconds的文件 |
步骤3:逐个修改文件
1 | # 修改validating webhook配置文件 |
步骤4:批量修改(推荐)
1 | # 一次性修改所有文件 |
3. 验证修复效果
3.1 检查配置修改
1 | # 检查是否所有文件都已修改 |
3.2 重新部署测试
1 | # 重新部署Volcano |
- 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
- 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。
🗺参考文献
[1] Github - kube-scheduling-perf
[2] Volcano Documentation - Admission Webhooks
[3] Kubernetes Documentation - Admission Controllers
- 标题: 【集群】云原生批调度实战:Volcano Pod创建数量不足问题排查与Webhook超时修复
- 作者: Fre5h1nd
- 创建于 : 2025-08-18 23:19:30
- 更新于 : 2025-08-21 19:57:24
- 链接: https://freshwlnd.github.io/2025/08/18/k8s/k8s-scheduler-performance-volcano-webhook-debug/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。