k8s中如何实现SchedulingLatency 指标查看

发布时间:2021-12-15 19:15:45 作者:柒染
来源:亿速云 阅读:155
# K8s中如何实现SchedulingLatency指标查看

## 概述

在Kubernetes集群中,调度器(Scheduler)的性能直接影响着整个集群的稳定性和效率。`SchedulingLatency`是衡量调度性能的关键指标之一,它记录了Pod从进入调度队列到最终绑定到节点所花费的时间。本文将详细介绍如何查看和分析这一核心指标。

## 一、SchedulingLatency指标解析

### 1.1 指标定义
`SchedulingLatency`包含多个子维度:
- **ScheduleAttempts**:调度尝试次数
- **e2e_scheduling_duration**:完整调度延迟(从创建到绑定完成)
- **scheduling_algorithm_duration**:算法计算耗时
- **binding_duration**:绑定阶段耗时
- **queueing_duration**:队列等待时间

### 1.2 指标重要性
- 反映调度器处理能力
- 帮助识别性能瓶颈
- 容量规划的重要依据

## 二、查看指标的三种主要方式

### 2.1 通过Metrics Server查看

#### 安装Metrics Server
```bash
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

查看调度器指标

kubectl get --raw "/apis/metrics.k8s.io/v1beta1" | jq

2.2 通过Prometheus监控

配置示例

scrape_configs:
  - job_name: 'kubernetes-scheduler'
    metrics_path: /metrics
    kubernetes_sd_configs:
    - role: endpoints
    relabel_configs:
    - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name]
      action: keep
      regex: kube-system;kube-scheduler

关键PromQL查询

histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket[5m])) by (le))

2.3 直接访问调度器Metrics端点

获取调度器Pod

kubectl get pods -n kube-system -l component=kube-scheduler

端口转发

kubectl port-forward -n kube-system <scheduler-pod-name> 10259:10259

访问指标

curl http://localhost:10259/metrics | grep scheduling_latency

三、指标分析实战

3.1 典型指标示例

scheduler_e2e_scheduling_duration_seconds_bucket{le="0.001"} 12
scheduler_e2e_scheduling_duration_seconds_bucket{le="0.01"} 45
scheduler_e2e_scheduling_duration_seconds_bucket{le="0.1"} 178
scheduler_e2e_scheduling_duration_seconds_bucket{le="1"} 324
scheduler_e2e_scheduling_duration_seconds_bucket{le="10"} 329

3.2 异常情况分析

案例1:队列延迟激增

可能原因: - 集群资源不足 - 调度器配置不合理

解决方案:

# 调整并发度参数
--parallelism=16

案例2:算法计算耗时过长

优化建议: - 检查Predicates/Priority配置 - 减少不必要的插件

四、高级监控配置

4.1 自定义Dashboard

Grafana示例配置:

{
  "panels": [
    {
      "title": "Scheduling Latency",
      "type": "graph",
      "targets": [
        {
          "expr": "histogram_quantile(0.95, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket[5m])) by (le))",
          "legendFormat": "P95"
        }
      ]
    }
  ]
}

4.2 告警规则配置

示例Prometheus告警:

- alert: HighSchedulingLatency
  expr: histogram_quantile(0.9, rate(scheduler_e2e_scheduling_duration_seconds_bucket[5m])) > 5
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: "High scheduling latency detected"

五、性能优化建议

  1. 合理设置并发参数

    --concurrent-deployment-syncs=10
    --concurrent-statefulset-syncs=10
    
  2. 优化过滤器顺序

    predicates.Ordering() = []string{
     "PodFitsResources",
     "PodFitsHostPorts",
     "HostName",
    }
    
  3. 启用调度器性能分析

    --profiling=true
    

六、总结

通过本文介绍的方法,您可以全面掌握Kubernetes调度延迟的监控技术。建议: 1. 建立基线指标 2. 设置合理的告警阈值 3. 定期进行性能分析

注意:不同Kubernetes版本指标名称可能有差异,请以实际环境为准。建议在测试环境验证后再应用于生产环境。 “`

这篇文章包含了约1300字,采用Markdown格式编写,覆盖了从基础概念到高级配置的完整内容,并提供了可直接执行的命令示例。您可以根据实际环境需求调整参数和配置细节。

推荐阅读:
  1. Prometheus+Grafan监控k8s集群详解
  2. 在k8s集群中安装prometheus

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

k8s

上一篇:K8S中访问pod如何获取客户端真实IP

下一篇:linux如何修改path环境变量

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》