kube-state-metrics 是什么
kube-state-metrics(KSM)监听 Kubernetes APIServer,把 Deployment、Pod、Node 等对象的状态转成指标:期望副本与实际副本、就绪状态、资源条件等。它回答的是「对象处于什么状态」,与 cAdvisor 回答的「容器用了多少资源」互为补充,两者一起才算完整的 K8s 监控。
基本信息
| 数据来源 | Kubernetes APIServer |
|---|---|
| 关注点 | 对象状态,而非资源用量 |
| 关键指标 | kube_deployment_status_replicas_unavailable、kube_pod_status_ready、kube_node_status_condition |
| 暴露端口 | 8080(指标)/ 8081(自身指标) |
| 标签维度 | namespace、deployment、pod、node 等 |
| 配套组件 | cAdvisor(资源用量) |
典型使用场景
- 告警「期望副本与实际副本不一致」,第一时间发现发布异常
- 统计各命名空间未就绪 Pod 数量,定位调度与启动问题
- 监控节点压力条件(MemoryPressure、DiskPressure)
- 核对 HPA 目标与实际副本,判断扩缩容是否生效
- 统计资源配额使用情况,识别接近上限的团队
- 巡检集群对象总量与增长趋势,辅助容量规划
常用指标与查询
常用指标与查询
# 副本不满足的 Deployment
kube_deployment_status_replicas_unavailable > 0
# 未就绪的 Pod(按命名空间汇总)
sum by (namespace) (kube_pod_status_ready{condition="false"})
# Node 压力条件
kube_node_status_condition{condition="MemoryPressure",status="true"} == 1
# HPA 当前目标与实际副本
kube_horizontalpodautoscaler_status_current_replicas指标前缀与含义
| 前缀 | 对象 | 典型指标 |
|---|---|---|
| kube_deployment_* | Deployment | 期望副本、可用副本、未可用副本 |
| kube_pod_* | Pod | 就绪状态、重启次数、状态阶段 |
| kube_node_* | Node | 状态条件、容量与可分配资源 |
| kube_hpa_* | HPA | 当前副本、目标副本 |
| kube_*_resource_quota/limit | 配额 | 配额使用与上限 |
该类指标标签维度多(namespace、deployment、pod 等),看板与告警要注意标签裁剪以控制序列量,否则集群变大后序列会成倍增长。
kube-state-metrics 关注状态而不是资源用量:CPU 与内存问题仍要回到 cAdvisor 指标,两者不要互相替代。
集群对象越多,KSM 产生的序列越多,抓取频率与采集范围要一起评估,必要时按对象类型裁剪。
同一集群部署多套监控时,注意 KSM 角色权限与命名空间隔离,避免权限过大或重复采集。
重启次数与就绪状态要一起看:只有重启多但当前就绪,说明进程在反复崩溃重启;两者都异常则说明服务已经不可用。
容量类判断可结合节点可分配资源指标:只看到「分配了很多」但没看「还能分配多少」,容易得出过于乐观的结论。