用最简单的话聊聊K8S里那些搞不懂的PV、PVC和StorageClass到底啥意思
- 问答
- 2026-01-03 09:55:07
- 1
(主要参考Kubernetes官方文档和常见技术社区如Stack Overflow、知乎上的通俗解释)
咱就这么想吧,K8S集群就像一个巨大的、现代化的公共图书馆,书就是数据,PV、PVC、StorageClass这三个玩意儿,就是为了解决“书怎么存、怎么借、怎么按需印刷”这一连串问题的。
第一步:先有书——PV(PersistentVolume,持久卷)
PV就是图书馆里一本现成的、实实在在的书,这本书已经买回来了,有固定的页数(容量),是精装本还是平装本(存储类型,比如SSD快盘或者普通硬盘),就放在图书馆的某个特定书架上(比如NFS服务器、云硬盘),这本书是客观存在的资源,是集群里的“固定资产”。
图书馆长(集群管理员)提前采购了100本书,每本500页(创建了100个每个50GiB的PV),这些书有大有小,有精装有平装,都整整齐齐码在库房里,PV的特点是:它是“资源”,是待分配的东西,由管理员提前准备好,跟谁要用它没关系。

第二步:有人来借书——PVC(PersistentVolumeClaim,持久卷声明)
有个读者(比如一个运行着的MySQL数据库Pod)想看书了,他不需要自己跑去库房找,那太麻烦了,他只需要写一张“借书单”(PVC)。
这张借书单上会写清楚他的需求:
- “我要一本大概300页左右的书”(
storage: 300Mi) - “最好能让我又读又写”(
accessModes: ReadWriteOnce) - “要是精装本就更好了”(
storageClassName: fast)
读者(Pod)把这张借书单(PVC)交给图书馆管理系统(K8S),系统的工作就是去库房(PV池)里,找一本符合要求的、并且还没借出去的书(PV),然后把它和这位读者绑定起来。

PVC的特点是:它是“需求”,是用户(Pod)发起的申请,用户不关心书具体在哪、怎么来的,只关心自己的需求能不能被满足。
PV和PVC的关系,核心就是“资源”和“需求”的“绑定”(Binding)。 一旦绑定成功,这本书(PV)就专属于这个读者(Pod)了,直到读者还书(删除PVC)为止,这种解耦非常巧妙,准备存储的管理员不用关心谁用,用存储的开发人员不用关心存储细节,大家各司其职。
第三步:书不够用了怎么办?——StorageClass(存储类)
刚才的模式有个大问题:如果突然来了100个读者,每人都要借一本500页的书,但图书馆长只提前准备了100本,第101个读者拿着借书单(PVC)来,就借不到了,因为库房里没货(没有合适的PV)了,总不能每次都让管理员手动去采购(创建PV)吧?太没效率了。

图书馆引入了更高级的“按需印刷机”(StorageClass)。
StorageClass不是一本具体的书,它更像是一本书的“印刷模板”或“采购标准”,它定义了:
- “用什么样的纸张”(存储后端类型,比如aws-ebs, ceph-rbd)
- “印刷速度多快”(配置参数,比如IOPS高低)
- “默认是精装还是平装”(默认存储策略)
流程升级了:
- 图书馆长不再需要提前采购大量书籍了,他只需要安装好几台不同规格的“按需印刷机”(创建好StorageClass),高速印刷机”(fast-storageclass)和“普通印刷机”(slow-storageclass)。
- 读者来借书时,在借书单(PVC)上注明:“请按‘高速印刷机’的标准给我印一本”(在PVC中指定
storageClassName: fast-storageclass)。 - 图书馆管理系统(K8S)看到这个借书单,发现库房没现成的书,但它不会拒绝,而是自动启动对应的“高速印刷机”,立刻按照标准印一本全新的、完全符合要求的书(动态创建出一个PV),然后马上把这本书交给读者。
这就是“动态供应”(Dynamic Provisioning),它彻底解放了管理员,实现了存储的“按需分配”,是生产环境中最常用的方式。
打个总结,用吃外卖来类比:
- PV:是一碗已经做好的、放在外卖盒里的红烧牛肉面,是成品。
- PVC:是你下的订单,写着“要一碗红烧牛肉面,加辣”。
- 静态供应:餐厅提前做好了10碗面放着,你的订单来了,就从这10碗里拿一碗符合你要求的给你,如果卖光了,你就得等餐厅再做(管理员手动干预)。
- StorageClass:是餐厅的厨房和标准化食谱,它定义了怎么做这碗面(用什么锅、什么火候)。
- 动态供应:你的订单来了,厨房立刻根据食谱现做一碗给你,要多少,做多少,永远不怕“售罄”。
最后说点容易混淆的细节:
- PVC和PV是一对一的关系:一个PVC只能绑定一个PV,一个PV也只能被一个PVC绑定(除非是只读模式可以多个PVC挂载同一个PV,但很少用),就像一本书不能同时借给两个人。
- PVC和Pod是多对一的关系:一个Pod可以同时使用多个PVC(比如一个挂载代码,一个挂载数据库),就像一个人可以同时借好几本书。
- 删除顺序很重要:当你不用了,应该先“还书”(删除Pod),再“撕掉借书单”(删除PVC),如果你直接先把“借书单”撕了(先删PVC),K8S会认为这本书(PV)可以回收了,根据回收策略(Reclaim Policy),这本书可能被“销毁”(Delete)也可能只是“下架”等待下次使用(Retain),所以乱删可能导致数据丢失!
- StorageClass是PVC的“妈妈”:在动态供应中,是PVC里指定的StorageClass创建出了PV,没有StorageClass,动态供应就玩不转。
希望这个用图书馆和外卖的比喻,能让你对K8S里这几个绕来绕去的存储概念有个直观的理解,它们本质上就是一套让存储管理自动化、标准化的巧妙设计。
本文由颜泰平于2026-01-03发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/73634.html
