Title here
Summary here
本文档介绍 Volcano 在大规模集群中的性能调优方法,包括调度周期优化、Predicate 缓存、API Server 限流调整和 Shard 扩展等。
| 指标 | 小集群 (<100) | 中集群 (100-1000) | 大集群 (>1000) |
|---|---|---|---|
| E2E P99 延迟 | < 100ms | < 500ms | < 2s |
| 每秒调度 Pod | > 100 | > 50 | > 20 |
| 调度周期 | 50-200ms | 200-500ms | 500ms-2s |
custom:
scheduler_schedule_period: 500ms # 默认 1s,大集群可缩短| 场景 | 推荐值 | 说明 |
|---|---|---|
| 小集群 (<100 节点) | 1s | 默认值即可 |
| 中集群 (100-500 节点) | 500ms | 加快调度响应 |
| 大集群 (>500 节点) | 1s-2s | 避免周期内处理不完 |
| 延迟敏感场景 | 200ms | 快速响应,但增加 API 压力 |
- name: predicates
arguments:
predicate.CacheEnable: "true" # 启用 Predicate 缓存custom:
# 调度器
scheduler_kube_api_qps: 2000 # 默认 2000
scheduler_kube_api_burst: 2000 # 默认 2000
# 控制器
controller_kube_api_qps: 50 # 默认 50
controller_kube_api_burst: 100 # 默认 100| 组件 | 小集群 | 中集群 | 大集群 |
|---|---|---|---|
| scheduler QPS | 500 | 2000 | 5000 |
| scheduler Burst | 500 | 2000 | 5000 |
| controller QPS | 50 | 100 | 200 |
| controller Burst | 100 | 200 | 400 |
注意:增大 QPS/Burst 会增加 API Server 负载,需同时确保 API Server 有足够处理能力。
custom:
scheduler_node_worker_threads: 20 # 节点 Worker 线程custom:
controller_worker_threads: 3 # 通用 Worker
controller_worker_threads_for_gc: 5 # GC Worker
controller_worker_threads_for_podgroup: 5 # PodGroup Worker| 参数 | 建议 |
|---|---|
scheduler_node_worker_threads | 节点数 / 50,最小 10 |
controller_worker_threads | 3-10,按 Job 数调整 |
controller_worker_threads_for_gc | 3-10 |
controller_worker_threads_for_podgroup | 3-10 |
只启用需要的插件,减少每个调度周期的处理时间:
# 最小化配置(基础调度)
tiers:
- plugins:
- name: gang
- name: conformance
- plugins:
- name: predicates
- name: proportion
- name: nodeorder
# 完整配置(全功能)
tiers:
- plugins:
- name: priority
- name: gang
- name: conformance
- plugins:
- name: overcommit
- name: drf
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack- name: gang
enablePreemptable: false # 不参与抢占评估(减少计算)
enableNodeOrder: false # 不参与节点评分对于超大集群(>2000 节点),可以将调度器按节点分片:
每个 Shard 只处理一部分节点,减少每个调度周期的节点扫描范围。
custom:
go_memlimit_enable: true # 启用 Go MEMLIMIT避免调度器因 GC 压力导致延迟波动。
# 调度周期耗时趋势
histogram_quantile(0.99,
sum(rate(volcano_e2e_scheduling_latency_milliseconds_bucket[5m])) by (le)
)
# 最耗时的 Action
topk(3, histogram_quantile(0.99,
sum(rate(volcano_action_scheduling_latency_milliseconds_bucket[5m])) by (le, action)
))
# 最耗时的 Plugin
topk(5, histogram_quantile(0.99,
sum(rate(volcano_plugin_scheduling_latency_milliseconds_bucket[5m])) by (le, plugin)
))
# 调度吞吐量
sum(rate(volcano_schedule_attempts_total{result="Success"}[5m]))# 调度延迟告警
- alert: VolcanoSchedulingLatencyHigh
expr: |
histogram_quantile(0.99,
sum(rate(volcano_e2e_scheduling_latency_milliseconds_bucket[5m])) by (le)
) > 5000
for: 5m
annotations:
summary: "调度 P99 延迟超过 5s"| 项目 | 检查内容 | 建议 |
|---|---|---|
| SchedulePeriod | 是否匹配集群规模 | 见上文调优表 |
| Predicate 缓存 | 大集群是否启用 | 启用 predicate.CacheEnable |
| API QPS/Burst | 是否足够 | 按集群规模调整 |
| 插件数量 | 是否有不需要的插件 | 精简配置 |
| Worker 线程 | 是否足够 | 按负载调整 |
| 日志级别 | 生产环境是否过高 | 生产用 -v=2 |
| pprof | 是否需要性能分析 | 调试时临时启用 |
| 文件 | 说明 |
|---|---|
installer/helm/chart/volcano/values.yaml | 性能参数配置 |
pkg/scheduler/metrics/metrics.go | 性能指标定义 |
pkg/scheduler/conf/scheduler_conf.go | 配置结构 |