这个项目能做什么
kube-state-metrics (KSM) 是一项服务,它监听 Kubernetes API 服务器,并生成关于集群对象(如部署、节点和 Pod)状态的指标。它不监控单个 Kubernetes 组件的健康,而是报告集群内部的对象。指标以纯文本形式暴露在 HTTP 端点 /metrics(默认端口 8080)上,供 Prometheus 或兼容的抓取器使用;该端点反映当前集群状态,因此已删除的对象会从其中消失。
设计理念:KSM 从 Kubernetes API 对象生成指标而不做修改,因此其功能与底层 API 对象的稳定性等级一致。它暴露原始、未修改的数据,不应用 kubectl 风格的启发式规则,将解释权留给用户。基于 alpha API 的指标不在稳定性保证范围内。
README 中描述的关键能力:
- 文档目录中的指标文档,以及自定义资源状态指标(功能已冻结,转而支持 resource-state-metrics)。
- 标签处理:Kubernetes 标签名称转换为 Prometheus 兼容名称(例如 app.kubernetes.io/name 变为 label_app_kubernetes_io_name),转换冲突时自动添加 _conflictN 后缀。
- 允许/拒绝列表支持 ECMAScript 正则表达式,包括环视,评估时间上限为一分钟。
- 在单独的遥测主机/端口(默认 8081)上提供自身指标,包括列表/监视成功和错误计数器、HTTP 请求持续时间直方图、构建信息、分片序号/总分片数,以及配置文件哈希和重新加载状态。
- 扩展指南:一般规则约为 250MiB 内存和 0.1 核;低 CPU 限制可能导致队列积压和更高内存使用。提供了 100 节点扩展测试的延迟数据(Perc50 约 260ms,Perc90 约 475ms,Perc99 约 907ms)。
- 通过 --shard 和 --total-shards 进行水平分片,使用对象 UID 的 md5 对总分片数取模;在 StatefulSet 中使用 --pod 和 --pod-namespace 进行自动分片(实验性);基于部署的分片使用显式分片索引;通过 --node 对 Pod 指标进行 DaemonSet 分片,使用 --track-unscheduled-pods 处理未分配 Pod。
- 在 /metrics 上使用 resources 和 exclude_resources 查询参数进行资源过滤,exclude 优先。
- 健康端点:主端口上的 /healthz 和 /livez,遥测端口上的 /readyz。
设置和使用:通过 go get k8s.io/kube-state-metrics/v2 安装,使用 make container 构建容器,并使用 kubectl apply -f examples/standard 部署。kube-prometheus 栈已包含 KSM 作为组件。由于严格的角色权限,GKE 用户可能需要 cluster-admin 绑定。README 还比较了 KSM 与 metrics-server:metrics-server 通过 Metrics API 提供来自 Kubelet 的聚合资源指标,而 KSM 从对象状态生成新指标并在内存中保存快照。两者都不自行将指标导出到第三方目的地。
评论
0 评分人数达到10人后显示
登录后参与讨论。