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

前言
在 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 |
| Kubernetes | 1.25+ |
| 数据源 | Prometheus(已配置) |
| 关键指标 | kubelet_volume_stats_* |
| 案例 PVC | data-apisix-etcd-0(Namespace: ingress-apisix) |
第一部分:数据源与筛选器配置(Options)
在配置任何 Panel 之前,我们需要先确保 Prometheus 数据源可用,并设置 Dashboard 变量(筛选器),让用户可以灵活切换 Namespace 和 PVC。
1.1 Prometheus 数据源配置
如果您的 Grafana 中还没有添加 Prometheus 数据源:
步骤 1:登录 Grafana,左侧菜单 → Connections → Data Sources

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

步骤 3:填写配置信息
| 配置项 | 填写内容 |
|---|---|
| Name | Prometheus |
| URL | http://prometheus-server.monitoring.svc.cluster.local:80(集群内访问)或 http://<NodeIP>:<NodePort>(NodePort 方式) |
| Access | Server (default) |
步骤 4:点击 Save & test,看到绿色成功提示即可。

1.2 导入 Dashboard
变量和 Panel 都需要在 Dashboard 中配置。导入 Dashboard:
- 左侧菜单 → + → Import dashboard
- 输入 Dashboard ID:
17092(Kubernetes Persistent Volumes) - 点击 Load,选择 Prometheus 数据源
- 点击 Import

导入成功之后,默认情况是为 No data,原因是查询语法错误,需要我们来手动校正才可以展示可视化数据,不过在开始展示可视化数据之前我们,我们需要编写顶部的可视区域变量。
1.3 Dashboard 变量配置
变量(Variables)让 Dashboard 变得可交互。用户可以通过下拉菜单选择不同的 Namespace 和 PVC,无需手动修改查询语句。
变量一:cluster(集群选择)
如果您的 Prometheus 监控了多个 Kubernetes 集群,这个变量非常有用。
| 配置项 | 值 |
|---|---|
| Name | cluster |
| Type | Query |
| Data source | Prometheus |
| Query | label_values(kubelet_volume_stats_used_bytes, cluster) |
| Include All option | ✅ 勾选 |
| Multi-value | ✅ 勾选 |
说明:如果只有一个集群,可以跳过此变量或使用默认值。
变量二:namespace(命名空间)
这个变量用于筛选 Namespace,让用户只关注特定命名空间的 PVC。
| 配置项 | 值 |
|---|---|
| Name | namespace |
| Type | Query |
| Data source | Prometheus |
| Query | label_values(kubelet_volume_stats_used_bytes, namespace) |
| Include All option | ✅ 勾选 |
| Multi-value | ✅ 勾选 |
| Refresh | On Dashboard Load |
配置截图:

变量三:persistentvolumeclaim(PVC 选择)
这个变量是核心筛选器,用于选择具体的 PVC。
| 配置项 | 值 |
|---|---|
| Name | persistentvolumeclaim |
| Type | Query |
| Data source | Prometheus |
| Query | label_values(kubelet_volume_stats_used_bytes{namespace="$namespace"}, persistentvolumeclaim) |
| Include All option | ✅ 勾选 |
| Multi-value | ✅ 勾选 |
| Refresh | On Dashboard Load |
关键点:Query 中使用了
$namespace变量,实现变量联动——选择 Namespace 后,PVC 列表自动刷新。
配置截图:

变量之间的联动关系
cluster → namespace → persistentvolumeclaim| 变量 | 依赖 | 联动效果 |
|---|---|---|
cluster | 无 | 选择集群 |
namespace | cluster(可选) | 选择集群后,只显示该集群下的 Namespace |
persistentvolumeclaim | namespace | 选择 Namespace 后,只显示该 Namespace 下的 PVC |
配置示例:

1.4 筛选器的使用技巧
技巧一:多选与全选
在变量配置中开启 Multi-value 和 Include 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
- 进入 Dashboard → 点击右上角 Add → Add a new panel
- Panel 标题填写:
Volume stats for ${volume}
2.2 配置数据查询
| 配置项 | 值 |
|---|---|
| Data source | Prometheus |
| Query A(总容量)Metric | kubelet_volume_stats_capacity_bytes |
| Query B(已用空间)Metric | kubelet_volume_stats_used_bytes |
| Query C(剩余空间)Metric | kubelet_volume_stats_available_bytes |
说明:此处只需填写 Metric 名称即可。Grafana 会自动将 Dashboard 顶部的变量(
$namespace、$volume)注入到查询中,无需手动添加{}过滤条件。
2.3 配置可视化选项
| 配置项 | 值 |
|---|---|
| Panel type | Stat |
| Unit | bytes (IEC) |
| Stat style | Value |
| Orientation | Vertical(垂直排列) |
| Color mode | None |
Panel type 面板类型 
Unit 面板数据单位 
Orientation 
2.4 最终效果
配置完成后,Panel 会显示:
1 GiB 35.6 MiB 998 MiB分别对应:总容量、已用空间、剩余空间(单位根据配置显示为 GiB)。

第三部分:排障与常见问题
Q1:导入 Dashboard 后默认的 Panel 显示 "No data"
原因:
- 查询语言及过滤参数错误
解决方案:
删除 Panel,重新添加。
Q2:变量下拉框为空
原因:
- Prometheus 数据源无数据
- 变量的查询语法有问题
解决方案:
编辑变量删除多余的 filter 添加正确指标名称后,点击 run query 查询。
结语
通过本文,您已经掌握了在 Grafana 中配置 Kubernetes Persistent Volumes 监控仪表盘的完整流程:
- ✅ 配置 Prometheus 数据源
- ✅ 导入 Dashboard(ID:
17092) - ✅ 设置 Dashboard 变量(cluster、namespace、PVC),实现筛选联动
- ✅ 修正查询语句,让 Panel 正确展示数据
核心思路:
- 先配筛选器:让用户能快速定位目标 PVC
- 再修正查询:让变量在 Panel 中真正生效
- 最终服务运维:在容量耗尽前提前预警
监控不是目的,稳定运行才是。希望本文能帮助您更好地守护 Kubernetes 集群的存储健康!
相关资源:
本文全部操作在 Kubernetes 1.25+、Grafana 13.2.0、Prometheus v2.54.1 环境下验证通过。
