Kube State Metrics:Kubernetes 状态监控的得力助手
在 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,现在就是开始的好时机!简单的几步部署,就能让你的监控能力提升一个档次。
参考资料:
- 官方 GitHub:kubernetes/kube-state-metrics
- 安装指南:Setup Kube State Metrics
更多推荐


所有评论(0)