当前位置: 首页 > web >正文

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标

文章目录

  • k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标
  • 一、Metrics Server简介
  • 二、kube-state-metrics实战部署
    • 1. 创建RBAC(kube-state-metrics-rbac.yaml)
    • 2. 创建Service(kube-state-metrics-svc.yaml)
    • 3. 创建Deployment(kube-state-metrics-deploy.yaml)
    • 4. 部署所有资源
  • 总结


随着容器化和微服务架构的不断发展,系统的复杂性与日俱增,构建一套完善的监控与资源管理体系已成为保障系统稳定运行的关键。在前几篇文章中,我们已经介绍了如何部署 Prometheus、Node Exporter、Grafana 以及 Alertmanager,并通过钉钉 Webhook 实现了监控告警的闭环。

在本篇补充文章中,我们将部署 Kubernetes 官方提供的资源对象状态采集组件 —— kube-state-metrics。它通过访问 API Server,实时导出 Pod、Deployment、StatefulSet、PVC 等 Kubernetes 对象的详细状态指标,为 Prometheus 提供更丰富的监控数据支持,帮助我们全面掌握集群运行状态、资源对象的变化情况,并为告警配置和可视化展示打下基础。

一、Metrics Server简介

kube-state-metrics 是 Kubernetes 官方维护的 Exporter,专门用于收集集群中各类资源对象的状态信息(如 Deployment 副本状态、Pod 准备情况、PVC 是否绑定等),并以 Prometheus 支持的格式对外暴露。
它与 Metrics Server 的区别在于:

项目kube-state-metricsMetrics Server
指标类型对象状态指标资源使用率指标
示例指标Deployment 副本数、Pod 状态、PVC 状态等Pod/Node 的 CPU、内存使用率
数据持久化否(需 Prometheus 拉取)
适用场景状态监控、结构化分析、告警配置实时资源监控、HPA 自动扩缩容

Metrics Server 不同,kube-state-metrics 不提供节点或 Pod 的实时资源使用数据(如 CPU、内存),而是专注于资源对象的状态变更,例如:

  • 某个 Pod 是否处于 Ready 状态
  • Deployment 的实际副本数是否满足期望
  • PVC 是否成功绑定
  • Node 是否处于 NotReady 状态

部署 kube-state-metrics 后,能够实现以下功能:

  • 为 Prometheus 提供更丰富的集群状态指标来源
  • 辅助构建针对 K8s 对象状态的 Grafana 可视化面板
  • 支持告警规则配置,如 “某 Deployment 副本不足” 或 “某 Node 不可用”

⚠️ 需要注意的是,kube-state-metrics 只是将数据导出为指标,它本身不存储数据,需要配合 Prometheus 进行拉取、存储和查询。

g.cn/direct/31da7451a2e34431b7ce7606e6722ebf.png)

二、kube-state-metrics实战部署

1. 创建RBAC(kube-state-metrics-rbac.yaml)

为 kube-state-metrics 配置必要的权限,允许其访问集群中资源对象的状态信息

---
apiVersion: v1
kind: ServiceAccount
metadata:name: kube-state-metricsnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: kube-state-metrics
rules:
- apiGroups: [""]resources: ["nodes", "pods", "services", "resourcequotas", "replicationcontrollers", "limitranges", "persistentvolumeclaims", "persistentvolumes", "namespaces", "endpoints", "secrets"]verbs: ["list", "watch"]
- apiGroups: ["extensions"]resources: ["daemonsets", "deployments", "replicasets"]verbs: ["list", "watch"]
- apiGroups: ["apps"]resources: ["statefulsets"]verbs: ["list", "watch"]
- apiGroups: ["batch"]resources: ["cronjobs", "jobs"]verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]resources: ["horizontalpodautoscalers"]verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kube-state-metrics
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: kube-state-metrics
subjects:
- kind: ServiceAccountname: kube-state-metricsnamespace: kube-system

2. 创建Service(kube-state-metrics-svc.yaml)

暴露 kube-state-metrics 服务端口,并添加 Prometheus 自动抓取注解

apiVersion: v1
kind: Service
metadata:annotations:prometheus.io/scrape: 'true'  # 开启 Prometheus 抓取name: kube-state-metricsnamespace: kube-systemlabels:app: kube-state-metrics
spec:ports:- name: kube-state-metricsport: 8080protocol: TCPselector:app: kube-state-metrics

3. 创建Deployment(kube-state-metrics-deploy.yaml)

部署 kube-state-metrics,使用前面创建的 ServiceAccount

apiVersion: apps/v1
kind: Deployment
metadata:name: kube-state-metricsnamespace: kube-system
spec:replicas: 1selector:matchLabels:app: kube-state-metricstemplate:metadata:labels:app: kube-state-metricsspec:serviceAccountName: kube-state-metricscontainers:- name: kube-state-metricsimage: harbor.local/k8s/kube-state-metrics:2.7.0ports:- containerPort: 8080

4. 部署所有资源

kubectl apply -f kube-state-metrics-rbac.yaml
kubectl apply -f kube-state-metrics-svc.yaml
kubectl apply -f kube-state-metrics-deploy.yaml

总结

🚀 本篇文章补充了 Kubernetes 集群监控的重要组成部分 —— kube-state-metrics 的部署与配置。通过该组件,解决了仅依赖 Metrics Server 无法全面反映集群资源状态的问题,增强了 Prometheus 对 Kubernetes 对象(如 Deployment、Pod、Node 等)状态指标的采集能力。
✅ 至此,基于 Metrics Server 和 kube-state-metrics 的 Kubernetes 集群监控方案已基本完善。结合 Prometheus、Alertmanager 和 Grafana,这套监控体系能够帮助运维团队全面掌控集群运行状况,及时响应故障,提升整体运维效率和系统稳定性。

http://www.xdnf.cn/news/6721.html

相关文章:

  • 前端开发笔记与实践
  • Visual Studio 2022 中添加“高级保存选项”及解决编码问题
  • WebMvcConfigurer介绍-笔记
  • GESP2025年3月认证C++二级( 第三部分编程题(2)时间跨越)
  • MongoDB 应用实战
  • 多尺度对比度调整
  • DDD领域驱动介绍
  • MODBUS RTU调试助手使用方法详解
  • 基于Mongodb的分布式文件存储实现
  • Java实现生产者-消费者模式:从基础到高级实践
  • MiniMax语音模型Speech-02近日登顶多个全球榜单,详细技术解析
  • 【Reality Capture 】02:Reality Capture1.5中文版软件设置与介绍
  • Lua中使用module时踩过的坑
  • 计算机指令分类和具体的表示的方式
  • 【Win32 API】 lstrcmpA()
  • Java内存泄露生产环境排查过程,通透了
  • 计算机网络 : Socket编程
  • EXCEL在一列数据前统一添加负号
  • 6种方式来探究数据集的的方法worldquant
  • STM32外设AD-定时器触发 + DMA读取模板
  • RKNN开发环境搭建(ubuntu22.04)
  • 网络世界的“百变身份“:动态IP让连接更自由
  • 解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式
  • 【Python 操作 MySQL 数据库】
  • maven和npm区别是什么
  • 几种排序方式的C语言实现(冒泡、选择、插入、希尔等)
  • 大数据技术的主要方向及其应用详解
  • 【问题排查】easyexcel日志打印Empty row!
  • DeepSearch代表工作
  • 时钟产生的公共模块示例