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 指标采集架构

下图展示了调度器性能指标的完整采集链路,从指标暴露到可视化告警的端到端流程:

调度器性能指标采集架构图 调度器性能指标采集架构 kube-scheduler /metrics 端点 Prometheus 指标抓取 & 存储 Grafana 可视化仪表盘 抓取 /metrics 数据源 Alertmanager 告警规则评估 告警推送 指标计算层 PromQL 聚合计算 原始指标 存储层 TSDB / 对象存储 持久化 采集要点: • 抓取间隔建议 15s,避免高频抓取影响调度器性能 • 保留原始直方图数据(bucket)至少 7 天,用于延迟分位数回溯分析 • 告警规则应基于 P99 延迟和成功率,避免平均值误报

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 和队列深度指标
重要提醒: 调度器性能指标采集本身也会消耗系统资源。在超大规模集群(5000+ 节点)中,建议使用独立的 Prometheus 实例专门采集调度器指标,避免与控制面其他组件争抢资源。