kube-state-metrics(ksm)仅将kubernetes对象状态翻译为prometheus指标,不提供深度清洗能力;需通过ksm打标、prometheus relabeling映射cmdb字段、grafana按资产维度聚合展示三步实现cmdb对接。

Kube-State-Metrics(KSM)本身不提供“深度清洗”能力,它只做一件事:忠实地将 Kubernetes API 中的对象状态翻译成 Prometheus 格式指标。所谓“对接 CMDB 资产看板”,关键不在 KSM 本身,而在于你如何在其输出的原始指标基础上,通过 Prometheus 的标签重写、Relabeling 规则 + 外部元数据注入 + Grafana 层聚合展示,构建出符合 CMDB 资产模型的结构化视图。
下面分三步讲清楚怎么做,聚焦可落地的操作逻辑:
KSM 指标打标:让每个 Pod/Deployment 带上业务归属信息
CMDB 关心的是“谁在用、属于哪个系统、部署在哪条环境线”。KSM 默认指标(如 kube_pod_status_phase)只有 pod, namespace, node 等基础 label,缺少业务维度。你需要在采集阶段就注入这些字段:
- 在 KSM 的 Deployment 中,通过
--metric-labels-allowlist显式放开你要用的 annotation 或 label:args: - --metric-labels-allowlist=pods=[app.kubernetes.io/name,app.kubernetes.io/instance,env,team,system-id]
- 确保你的工作负载 YAML 中已声明这些字段:
metadata: labels: app.kubernetes.io/name: user-service env: prod team: backend-sre annotations: cmdb/system-id: "SYS-7821"
这样 kube_pod_labels 指标就会携带 label_app_kubernetes_io_name, label_env, annotation_cmdb_system_id 等 label,后续可直接用于匹配 CMDB 字段。
Prometheus Relabeling:对齐 CMDB 资产模型字段
CMDB 通常有固定字段:asset_type(Pod/Deployment/Node)、asset_id(唯一标识)、owner、business_line、environment。你在 Prometheus 的 scrape_config 中为 KSM job 配置 relabel rules,把原始 label 映射过去:
- job_name: 'kube-state-metrics'
static_configs:
- targets: ['kube-state-metrics.kube-system.svc:8080']
relabel_configs:
- source_labels: [__name__]
regex: 'kube_pod.*'
target_label: asset_type
replacement: pod
- source_labels: [pod, namespace]
separator: '/'
target_label: asset_id
replacement: '$1-$2' # 生成类似 "auth-api/default" 的唯一ID
- source_labels: [label_env]
target_label: environment
- source_labels: [label_team]
target_label: owner
- source_labels: [annotation_cmdb_system_id]
target_label: business_line
action: replace
✅ 这一步完成后,所有 KSM 抓取的指标都自带 CMDB 所需的核心资产属性,无需 Grafana 再做复杂 join。
Grafana 层构建 CMDB 看板:按资产视角聚合
有了带 CMDB 字段的指标,Grafana 就能直接按业务维度下钻:
-
资产总览表:用
count by (asset_type, environment, owner)统计各环境各团队资源分布 -
异常资产清单:查
kube_pod_status_phase{phase="Failed"} * on (pod, namespace) group_left(owner, business_line) kube_pod_labels,列出失败 Pod 及其所属系统和负责人 -
生命周期看板:用
kube_deployment_metadata_generation+kube_deployment_status_observed_generation判断配置是否已生效,标记“待同步”资产 -
与 CMDB 主动比对:若 CMDB 提供 REST API,可用 Grafana 的
JSON API数据源拉取真实资产清单,在看板中用join或transform对比 K8s 当前状态 vs CMDB 登记状态(如 PVC 是否在 CMDB 中登记但 K8s 已删除)
不需要写代码、不依赖外部 ETL 工具,整个流程完全基于 Prometheus 原生能力闭环。
本质上,KSM 是源头“翻译器”,Prometheus 是“贴标器”,Grafana 是“展示器”。三者配合,就能把动态的集群状态,稳稳落进静态的 CMDB 资产框架里。










