本文主要介绍kube-scheduler组件的指标清单、对应大盘的使用指导以及常见指标异常的问题解析。

指标清单

指标是组件对外透出状态和参数的方式之一,kube-scheduler组件使用的指标清单如下。

指标清单类型说明
scheduler_scheduler_cache_sizeGauge调度器缓存中Node、Pod和AssumedPod的数量。
scheduler_pending_podsGaugePending Pod的数量。队列种类如下:
  • unschedulable:表示不可调度的Pod数量。
  • backoff:表示backoffQ的Pod数量。
  • active:表示activeQ的Pod数量。
scheduler_pod_scheduling_attempts_bucketHistogram调度器尝试成功调度Pod的次数,Bucket阈值为1、2、4、8、16。
memory_utilization_byteGauge内存使用量,单位:字节(Byte)。
memory_utilization_ratioGauge内存使用率=内存使用量/内存资源上限,百分比形式。
cpu_utilization_coreGaugeCPU使用量,单位:核(Core)。
cpu_utilization_ratioGaugeCPU使用率=CPU使用量/内存资源上限,百分比形式。
rest_client_requests_totalCounter从状态值(Status Code)、方法(Method)和主机(Host)维度分析HTTP请求数。
rest_client_request_duration_seconds_bucketHistogram从方法(Verb)和URL维度分析HTTP请求时延。

大盘使用指导

大盘基于组件指标和相关PromQL绘制,大盘可观测性展示和功能解析如下。

概览

  • 可观测性展示schedule1
  • 功能解析
    指标清单PromQL说明
    Scheduler集群统计数据
    • scheduler_scheduler_cache_size{job="ack-scheduler",type="nodes"}
    • scheduler_scheduler_cache_size{job="ack-scheduler",type="pods"}
    • scheduler_scheduler_cache_size{job="ack-scheduler",type="assumed_pods"}
    调度器缓存中Node、Pod和AssumedPod的数量。
    Scheduler Pending Podsscheduler_pending_pods{job="ack-scheduler"}Pending Pod的数量。队列种类如下:
    • unschedulable:表示不可调度的Pod数量。
    • backoff:表示backoffQ的Pod数量。
    • active:表示activeQ的Pod数量。
    Scheduler尝试成功调度Pod次数histogram_quantile($quantile, sum(rate(scheduler_pod_scheduling_attempts_bucket{job="ack-scheduler"}[$interval])) by (pod, le))调度器尝试调度Pod的次数,Bucket阈值为1、2、4、8、16。

资源

  • 可观测性展示schedule2
  • 功能解析
    指标清单PromQL说明
    内存使用量memory_utilization_byte{container="kube-scheduler"}内存使用量,单位:字节。
    CPU使用量cpu_utilization_core{container="kube-scheduler"}*1000CPU使用量,单位:毫核。
    内存使用率memory_utilization_ratio{container="kube-scheduler"}内存使用率,百分比。
    CPU使用率cpu_utilization_ratio{container="kube-scheduler"}CPU使用率,百分比。

Kube API

  • 可观测性展示schedule3
  • 功能解析
    指标清单PromQL说明
    Kube API请求QPS
    • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"2.."}[$interval])) by (method,code)
    • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"3.."}[$interval])) by (method,code)
    • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"4.."}[$interval])) by (method,code)
    • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"5.."}[$interval])) by (method,code)
    调度器对kube-apiserver发起的HTTP请求,从方法(Method)和返回值(Code) 维度分析。
    Kube API请求时延histogram_quantile($quantile, sum(rate(rest_client_request_duration_seconds_bucket{job="ack-scheduler"}[$interval])) by (verb,url,le))调度器对kube-apiserver发起的HTTP请求时延,从方法(Verb)和请求URL维度分析。

常见指标异常

存活调度器Pod数量

正常情况异常情况异常说明建议
存活调度器Pod数量大于等于1。存活调度器数量为0。当前集群无可用调度器。
  1. 查看调度器相关的Deployment或者StatefulSet是否存在。
  2. 定位调度器Pod下线是否为预计的人为操作。

Pending Pod数量

正常情况异常情况异常说明建议
Pod调度速度较稳定,且维持在较低数值。
  1. Unschedulable队列中Pod的数量持续增加。
  2. Unschedulable队列中Pod的数量在其他Pod完成后未出现减少。
当前集群中Pod的资源请求不合理,或节点资源配置不足。
  1. 查看节点资源是否满足Pod需求。
  2. 查看Pod是否设置了无法满足的节点亲和属性。

成功调度一个Pod的尝试次数

正常情况异常情况异常说明建议
Pod能够在几次尝试后被调度到节点上。Pod在多次尝试后依然无法被成功调度。当前集群中Pod的资源请求不合理,或节点资源配置不足。
  1. 查看节点资源是否满足Pod需求。
  2. 查看Pod是否设置了无法满足的节点亲和属性。