3. 调度器性能指标:关键性能指标与采集方法
调度器是 Kubernetes 控制平面的核心组件,其性能直接影响集群的调度效率和资源利用率。要精准定位性能瓶颈,首先需要建立一套可量化、可观测的指标体系。本节定义调度器的四大关键性能指标(KPI),并给出标准化的采集与计算方法。
3.1 四大关键性能指标定义
| 指标名称 | 定义 | 单位 | 典型阈值(参考) |
|---|---|---|---|
| 吞吐量 | 单位时间内调度器成功绑定的 Pod 数量 | pods/sec | ≥ 50 pods/sec(中型集群) |
| 调度延迟 | 从 Pod 创建到调度器完成绑定(Binding)的时间间隔 | ms | P99 ≤ 500ms |
| 调度成功率 | 成功调度的 Pod 数量占所有待调度 Pod 数量的百分比 | % | ≥ 99.9% |
| 资源利用率 | 调度器进程自身对 CPU、内存、网络等系统资源的消耗 | cores / MB | CPU ≤ 4 cores, 内存 ≤ 2GB |
3.2 指标采集与计算方法
3.2.1 吞吐量(Throughput)
采集方式: 通过 Prometheus 监控 kube-scheduler 暴露的 scheduler_binding_duration_seconds_count 指标,计算单位时间内的增量。
PromQL 查询示例:
# 计算过去 5 分钟的平均吞吐量(pods/sec)
rate(scheduler_binding_duration_seconds_count[5m])
注意事项: 吞吐量受集群规模、Pod 资源请求复杂度、节点数量影响。建议按节点池或命名空间维度聚合,避免单一全局指标掩盖局部瓶颈。
3.2.2 调度延迟(Scheduling Latency)
采集方式: 调度器内置了详细的延迟直方图指标,按调度阶段拆分:
scheduler_scheduling_algorithm_duration_seconds—— 调度算法执行时间scheduler_binding_duration_seconds—— 绑定阶段时间scheduler_e2e_scheduling_duration_seconds—— 端到端调度延迟
PromQL 查询示例(P99 延迟):
# 端到端调度延迟 P99
histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket[5m])) by (le))
注意事项: 关注 P99 而非平均值,平均值容易掩盖长尾问题。当 P99 超过 1s 时,通常意味着调度器队列积压或预选/优选阶段存在性能瓶颈。
3.2.3 调度成功率(Scheduling Success Rate)
采集方式: 通过调度器事件计数指标计算:
scheduler_pod_scheduling_attempts_total—— 调度尝试总数scheduler_pod_scheduling_failures_total—— 调度失败总数
计算公式:
调度成功率 = (1 - scheduler_pod_scheduling_failures_total / scheduler_pod_scheduling_attempts_total) × 100%
PromQL 查询示例:
# 过去 10 分钟调度成功率
(1 - sum(rate(scheduler_pod_scheduling_failures_total[10m])) / sum(rate(scheduler_pod_scheduling_attempts_total[10m]))) * 100
注意事项: 调度失败原因需进一步细分(资源不足、节点选择器不匹配、污点容忍度不满足等),建议配合 scheduler_pod_scheduling_failures_reason 标签分析。
3.2.4 资源利用率(Resource Utilization)
采集方式: 使用 cAdvisor 或 kubelet 暴露的容器资源指标,或直接通过 process_cpu_seconds_total 和 process_resident_memory_bytes 采集调度器进程自身消耗。
PromQL 查询示例:
# 调度器 CPU 使用率(cores)
rate(process_cpu_seconds_total{job="kube-scheduler"}[1m])
# 调度器内存使用量(MB)
process_resident_memory_bytes{job="kube-scheduler"} / 1024 / 1024
注意事项: 资源利用率过高(CPU > 80% 或内存 > 70%)会直接导致调度延迟上升和吞吐量下降。建议设置资源限额并配置 HPA 或垂直扩缩容策略。
3.3 指标采集架构
下图展示了调度器性能指标的完整采集链路,从指标暴露到可视化告警的端到端流程:
3.4 指标采集最佳实践
- 分层采集: 按调度阶段(队列、预选、优选、绑定)分别采集延迟指标,便于快速定位瓶颈阶段。
- 标签维度: 为指标添加
namespace、priority_class、node_group等标签,支持多维下钻分析。 - 采样策略: 对于高吞吐集群(>100 pods/sec),建议使用 1% 采样率的 trace 数据补充延迟分析,降低存储开销。
- 告警阈值: 设置多级告警——Warn(P99 > 500ms)、Critical(P99 > 1s 或成功率 < 99.5%)。
3.5 常见采集陷阱与规避
| 陷阱 | 表现 | 解决方案 |
|---|---|---|
| 指标抓取超时 | Prometheus 抓取 scheduler /metrics 超时,导致数据缺失 | 增大 scrape_timeout 至 30s,或拆分指标端点 |
| 直方图桶设置不合理 | P99 计算不准确,桶范围过宽或过窄 | 根据实际延迟分布调整 bucket 边界(如 10ms~10s 对数分布) |
| 标签基数爆炸 | Pod 级别的标签导致指标基数过高,影响 Prometheus 性能 | 聚合为 namespace 或 node 级别标签,避免 Pod 级唯一标签 |
| 忽略调度器队列指标 | 只关注调度延迟,忽略队列积压导致的隐性延迟 | 增加 scheduler_queue_incoming_pods_total 和队列深度指标 |