Kubernetes 存储资源详解:PV、PVC、StorageClass、VolumeSnapshot 一次讲透¶
文章摘要¶
Pod 是 Kubernetes 中运行应用的最小单元。
但 Pod 本身是临时资源。
当 Pod 删除、迁移或者重建后,容器内部的数据通常会丢失。
因此 Kubernetes 提供了一套完整的存储资源体系,实现数据持久化。
本文将系统讲解 PV、PVC、StorageClass、VolumeSnapshot 的作用、关系以及实际应用场景。
学习目标¶
阅读完本文后,你将掌握:
- Kubernetes 存储体系结构
- PV 的作用
- PVC 的作用
- StorageClass 的作用
- VolumeSnapshot 的作用
- 动态存储供应机制
- 存储资源之间的关系
- 生产环境最佳实践
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云原生学习者
- Kubernetes 面试准备人员
为什么需要存储资源?¶
先看一个例子:
运行:
数据库写入:
如果 Pod 被删除:
重新创建后:
原因:
因此 Kubernetes 引入:
来解决数据持久化问题。
Kubernetes 存储体系¶
整体架构:
例如:
或者:
什么是 PV?¶
PV 全称:
中文:
简单理解:
例如:
在 Kubernetes 中:
PV 表示实际存储资源。
查看:
典型输出:
什么是 PVC?¶
PVC 全称:
中文:
简单理解:
开发人员通常不会关心:
只关心:
例如:
PVC 创建后:
进行绑定。
为什么需要 PVC?¶
如果直接让 Pod 使用 PV:
维护复杂。
因此 Kubernetes 采用:
类似:
而不是:
PV 与 PVC 的关系¶
可以理解为:
流程:
最终:
绑定成功。
查看:
状态:
表示已关联存储。
什么是 StorageClass?¶
随着集群规模扩大。
手工创建 PV 非常麻烦。
因此 Kubernetes 引入:
简单理解:
例如:
不同性能等级。
用户只需要:
系统自动创建对应存储。
动态存储供应¶
这是现代 Kubernetes 最常见模式。
用户创建:
系统自动:
整个过程无需管理员干预。
流程:
什么是 VolumeSnapshot?¶
生产环境非常重要。
作用:
类似:
例如:
创建快照:
出现问题时:
常用于:
- 数据备份
- 数据恢复
- 测试环境克隆
存储资源关系图¶
最常见链路:
其中:
常见存储类型¶
NFS¶
最简单。
适合实验环境。
Ceph¶
生产环境常见。
支持:
Longhorn¶
轻量级云原生存储。
云盘¶
例如:
存储资源如何选择?¶
| 场景 | 推荐 |
|---|---|
| 实验环境 | NFS |
| 小型集群 | Longhorn |
| 中大型集群 | Ceph |
| 公有云 | 云厂商 CSI |
生产环境最佳实践¶
优先使用 StorageClass¶
避免手工创建大量 PV。
数据库使用独立 PVC¶
避免共享存储。
定期创建快照¶
保护核心数据。
验证恢复流程¶
备份不是目的。
恢复成功才是目的。
监控存储容量¶
避免磁盘耗尽。
常见故障排查¶
查看 PV:
查看 PVC:
查看 StorageClass:
查看快照:
查看详情:
面试常见问题¶
PV 和 PVC 的区别?¶
PV 提供存储。
PVC 申请存储。
StorageClass 的作用?¶
定义存储模板并支持动态创建存储。
PVC 为什么一直 Pending?¶
通常没有匹配到可用 PV。
Kubernetes 如何实现动态存储?¶
StorageClass + CSI。
VolumeSnapshot 的作用?¶
存储快照与恢复。
FAQ¶
一个 PVC 能绑定多个 PV 吗?¶
不能。
一个 PV 能绑定多个 PVC 吗?¶
通常不能。
删除 PVC 会删除数据吗?¶
取决于回收策略。
总结¶
Kubernetes 存储体系通过多个资源对象实现数据持久化。
其中:
- PV 提供存储资源
- PVC 申请存储资源
- StorageClass 定义存储模板
- VolumeSnapshot 提供快照能力
可以记住一句话:
Pod 负责运行应用,PVC 负责申请存储,PV 负责提供存储,而 StorageClass 负责自动化管理存储。