Skip to content

Kubernetes PV 监控实践:Grafana 仪表盘配置与数据展示

Grafana RPM 安装示意图

前言

在 Kubernetes 集群中,Persistent Volume(持久卷) 是存储有状态应用数据的核心资源。无论是数据库、消息队列还是像 APISIX 这样的网关组件,其数据持久化都依赖 PV/PVC 的稳定运行。

然而,PV 的监控往往被忽视——直到磁盘写满、Inode 耗尽,服务才突然中断。

本文手把手记录如何在 Grafana 中从零配置一个 Kubernetes Persistent Volumes 监控仪表盘,基于真实案例(APISIX etcd 数据卷),涵盖:

  • Prometheus 数据源配置
  • Dashboard 变量(筛选器)设置
  • Panel 面板添加与数据展示
  • 常见问题排障

适用场景:已有 Grafana + Prometheus + kube-state-metrics 环境的 Kubernetes 集群。

环境说明

项目信息
Grafana 版本13.2.0
Prometheus 版本v2.54.1
Kubernetes1.25+
数据源Prometheus(已配置)
关键指标kubelet_volume_stats_*
案例 PVCdata-apisix-etcd-0(Namespace: ingress-apisix

第一部分:数据源与筛选器配置(Options)

在配置任何 Panel 之前,我们需要先确保 Prometheus 数据源可用,并设置 Dashboard 变量(筛选器),让用户可以灵活切换 Namespace 和 PVC。

1.1 Prometheus 数据源配置

如果您的 Grafana 中还没有添加 Prometheus 数据源:

步骤 1:登录 Grafana,左侧菜单 → ConnectionsData Sources

Grafana 数据源列表

步骤 2:点击 Add data source → 选择 Prometheus

Grafana 添加 Prometheus 数据源

步骤 3:填写配置信息

配置项填写内容
NamePrometheus
URLhttp://prometheus-server.monitoring.svc.cluster.local:80(集群内访问)
http://<NodeIP>:<NodePort>(NodePort 方式)
AccessServer (default)

步骤 4:点击 Save & test,看到绿色成功提示即可。

Grafana 数据源配置成功

1.2 导入 Dashboard

变量和 Panel 都需要在 Dashboard 中配置。导入 Dashboard:

  1. 左侧菜单 → +Import dashboard
  2. 输入 Dashboard ID:17092(Kubernetes Persistent Volumes)
  3. 点击 Load,选择 Prometheus 数据源
  4. 点击 Import

Grafana 数据源导入

导入成功之后,默认情况是为 No data,原因是查询语法错误,需要我们来手动校正才可以展示可视化数据,不过在开始展示可视化数据之前我们,我们需要编写顶部的可视区域变量。

1.3 Dashboard 变量配置

变量(Variables)让 Dashboard 变得可交互。用户可以通过下拉菜单选择不同的 Namespace 和 PVC,无需手动修改查询语句。

变量一:cluster(集群选择)

如果您的 Prometheus 监控了多个 Kubernetes 集群,这个变量非常有用。

配置项
Namecluster
TypeQuery
Data sourcePrometheus
Querylabel_values(kubelet_volume_stats_used_bytes, cluster)
Include All option✅ 勾选
Multi-value✅ 勾选

说明:如果只有一个集群,可以跳过此变量或使用默认值。

变量二:namespace(命名空间)

这个变量用于筛选 Namespace,让用户只关注特定命名空间的 PVC。

配置项
Namenamespace
TypeQuery
Data sourcePrometheus
Querylabel_values(kubelet_volume_stats_used_bytes, namespace)
Include All option✅ 勾选
Multi-value✅ 勾选
RefreshOn Dashboard Load

配置截图

Grafana 变量配置 namespace

变量三:persistentvolumeclaim(PVC 选择)

这个变量是核心筛选器,用于选择具体的 PVC。

配置项
Namepersistentvolumeclaim
TypeQuery
Data sourcePrometheus
Querylabel_values(kubelet_volume_stats_used_bytes{namespace="$namespace"}, persistentvolumeclaim)
Include All option✅ 勾选
Multi-value✅ 勾选
RefreshOn Dashboard Load

关键点:Query 中使用了 $namespace 变量,实现变量联动——选择 Namespace 后,PVC 列表自动刷新。

配置截图

Grafana 变量配置 PVC

变量之间的联动关系

cluster → namespace → persistentvolumeclaim
变量依赖联动效果
cluster选择集群
namespacecluster(可选)选择集群后,只显示该集群下的 Namespace
persistentvolumeclaimnamespace选择 Namespace 后,只显示该 Namespace 下的 PVC

配置示例

Grafana 变量联动关系

1.4 筛选器的使用技巧

技巧一:多选与全选

在变量配置中开启 Multi-valueInclude All option

  • 用户可以同时选择多个 Namespace
  • 选择 All 时,显示所有数据

技巧二:正则表达式过滤

如果只想显示特定的 PVC,可以在 Query 中使用正则:

txt
label_values(kubelet_volume_stats_used_bytes{namespace="$namespace", persistentvolumeclaim=~"data-.*|pvc-.*"}, persistentvolumeclaim)

第二部分:添加 PV 监控 Panel

变量配置好后,我们添加一个 Stat 面板来展示 PVC 的使用情况。

2.1 添加 Panel

  1. 进入 Dashboard → 点击右上角 AddAdd a new panel
  2. Panel 标题填写:Volume stats for ${volume}

2.2 配置数据查询

配置项
Data sourcePrometheus
Query A(总容量)Metrickubelet_volume_stats_capacity_bytes
Query B(已用空间)Metrickubelet_volume_stats_used_bytes
Query C(剩余空间)Metrickubelet_volume_stats_available_bytes

说明:此处只需填写 Metric 名称即可。Grafana 会自动将 Dashboard 顶部的变量($namespace$volume)注入到查询中,无需手动添加 {} 过滤条件。

2.3 配置可视化选项

配置项
Panel typeStat
Unitbytes (IEC)
Stat styleValue
OrientationVertical(垂直排列)
Color modeNone

Panel type 面板类型 img.png

Unit 面板数据单位

Orientation

2.4 最终效果

配置完成后,Panel 会显示:

1 GiB    35.6 MiB    998 MiB

分别对应:总容量已用空间剩余空间(单位根据配置显示为 GiB)。

Volume stats 最终效果

第三部分:排障与常见问题

Q1:导入 Dashboard 后默认的 Panel 显示 "No data"

原因

  1. 查询语言及过滤参数错误

解决方案

删除 Panel,重新添加。

Q2:变量下拉框为空

原因

  1. Prometheus 数据源无数据
  2. 变量的查询语法有问题

解决方案

编辑变量删除多余的 filter 添加正确指标名称后,点击 run query 查询。

结语

通过本文,您已经掌握了在 Grafana 中配置 Kubernetes Persistent Volumes 监控仪表盘的完整流程:

  1. ✅ 配置 Prometheus 数据源
  2. ✅ 导入 Dashboard(ID: 17092
  3. ✅ 设置 Dashboard 变量(cluster、namespace、PVC),实现筛选联动
  4. ✅ 修正查询语句,让 Panel 正确展示数据

核心思路

  • 先配筛选器:让用户能快速定位目标 PVC
  • 再修正查询:让变量在 Panel 中真正生效
  • 最终服务运维:在容量耗尽前提前预警

监控不是目的,稳定运行才是。希望本文能帮助您更好地守护 Kubernetes 集群的存储健康!

相关资源

本文全部操作在 Kubernetes 1.25+、Grafana 13.2.0、Prometheus v2.54.1 环境下验证通过。

最后更新2026/08/30 15:59
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal