在 Kubernetes 集群监控体系中,Kube State Metrics(简称 KSM)是一个不可或缺的组件。它专门负责将 Kubernetes 各种 API 对象的状态转换为 Prometheus 可以识别的指标,让你能够实时掌握集群内资源的运行状态。

什么是 Kube State Metrics?

Kube State Metrics 是 Kubernetes 官方维护的一个开源项目,它的核心职责非常明确:监听 Kubernetes API Server,生成关于各种对象状态的指标

你可能会问:Kubernetes 本身的组件(如 kubelet、apiserver)不也提供指标吗?没错,但 KSM 的独特之处在于——它关注的是Kubernetes 对象的状态,而不是 Kubernetes 组件本身的状态。

举个例子:

  • kubelet 会告诉你容器的 CPU、内存使用情况
  • KSM 则会告诉你:有多少个 Pod 处于 Pending 状态?Deployment 的期望副本数和当前副本数是否一致?节点是否处于 Ready 状态?

这两类指标是互补的,共同构成了完整的集群监控视图。

支持哪些资源?

KSM 几乎覆盖了所有常用的 Kubernetes 核心资源:

资源类型 关键指标示例
Node 节点状态、节点容量(CPU/内存/磁盘)、可分配资源
Pod Pod 状态(Running/Pending/Succeeded/Failed)、容器重启次数
Deployment 期望副本数、当前副本数、就绪副本数、更新进度
StatefulSet 副本状态、滚动更新状态
DaemonSet 已调度副本数、就绪副本数
ReplicaSet 期望副本数、可用副本数
Job/CronJob Job 运行状态、成功/失败次数、下次调度时间
PV/PVC 存储卷状态、容量、绑定关系
Ingress Ingress 规则配置、主机和路径映射
ConfigMap/Secret 资源存在性、挂载情况

完整的指标列表可以在项目的 docs 目录中找到。

快速开始:安装部署

KSM 的安装非常简单,这里介绍几种常用方法:

方法一:使用官方示例

如果你想使用官方最新的配置:

# 克隆官方仓库
git clone https://github.com/kubernetes/kube-state-metrics.git
cd kube-state-metrics

# 应用标准部署
kubectl apply -f examples/standard

方法二:使用 Helm Chart

对于生产环境,推荐使用 prometheus-community 维护的官方 Helm Chart:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-state-metrics prometheus-community/kube-state-metrics -n monitoring --create-namespace

方法三:kube-prometheus 栈

如果你使用的是 kube-prometheus 监控栈,那么恭喜你——KSM 已经内置在里面了,无需额外部署!

配置 Prometheus 抓取

安装完成后,需要在 Prometheus 配置中添加抓取 job:

scrape_configs:
  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080']

配置更新后,访问 Prometheus 的 Targets 页面,确认 kube-state-metrics 目标显示为 “UP” 状态。

关键指标与使用场景

下面是一些最常用的 KSM 指标及其用途:

1. Pod 状态监控

# 查看各命名空间中处于 Pending 状态的 Pod 数量
kube_pod_status_phase{phase="Pending"} > 0

# 查看容器重启次数(最近 5 分钟内重启超过 2 次的容器)
increase(kube_pod_container_status_restarts_total[5m]) > 2

2. Deployment 健康检查

# Deployment 不可用副本数
kube_deployment_status_replicas_unavailable > 0

# 检查期望副本数与就绪副本数是否一致
kube_deployment_spec_replicas != kube_deployment_status_replicas_ready

3. 节点状态监控

# 查看非 Ready 状态的节点
kube_node_status_condition{condition="Ready",status!="true"} == 1

# 节点资源使用情况(结合 kubelet 指标效果更佳)
kube_node_status_allocatable_cpu_cores
kube_node_status_allocatable_memory_bytes

4. Job/CronJob 监控

# 失败的 Job
kube_job_status_failed > 0

# CronJob 上次调度时间
kube_cronjob_status_last_schedule_time

最佳实践

1. 权限最小化

在安全敏感的环境中,可以为 KSM 指定可访问的命名空间和资源范围,无需授予全局集群权限。

2. 指标过滤

如果集群规模很大,KSM 产生的指标量可能会很可观。可以使用 --resources 参数只启用你需要的资源类型,或者使用白名单/黑名单过滤。

3. 高可用部署

对于生产环境,可以考虑使用分片部署或多副本部署,避免 KSM 成为单点故障。

4. 与其他监控配合

KSM 补充了 kubelet 的资源使用指标,但不能替代它。两者结合使用才能获得最全面的监控视图。

总结

Kube State Metrics 是 Kubernetes 监控拼图中非常重要的一块。它让你能够从"资源状态"的角度去观察集群,及时发现部署异常、资源瓶颈和配置错误。

如果你还没有在集群中部署 KSM,现在就是开始的好时机!简单的几步部署,就能让你的监控能力提升一个档次。


参考资料

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐