【K8s教程笔记】薪享宏福Kubernetes v1.29 第七章:K8s存储-PV/PVC 核心内容
本次课程围绕K8s存储核心组件PV(PersistentVolume,持久化卷)、PVC(PersistentVolumeClaim,持久化卷声明)展开,讲解二者的匹配规则、关联逻辑、回收策略、状态说明及实际接入方法。
1. PV与PVC的匹配条件
PVC绑定PV需要同时满足3个核心条件,缺一不可:
1.1 容量要求
PV的存储容量必须大于等于PVC的申请容量,优先选择容量完全一致的PV,避免容量浪费。
1.2 读写策略要求
读写策略必须完全一致才能匹配,不支持降级或包容匹配。
K8s存储的读写策略分为3类,对应固定缩写:
- RWO(ReadWriteOnce):单节点读写,共享存储仅能挂载给一个节点,同时支持读写操作
- ROX(ReadOnlyMany):多节点只读,支持多个节点同时挂载读取,不支持写入
- RWX(ReadWriteMany):多节点读写,支持多个节点同时读写
注意:并非所有后端存储都支持3类策略,例如iSCSI仅支持RWO和ROX,不支持RWX。原因是iSCSI通常基于ext4、XFS等本地文件系统,仅支持本地锁,不具备跨节点网络锁能力,多节点同时写入会导致数据冲突损坏。典型支持网络锁的文件系统如GFS,或红帽集群套件(RHCS)中结合cman与GFS的方案,可实现跨节点的分布式读写。
网络锁类比:多个班级共用厕所时,班长之间若能通过广播/对讲机同步占用状态,就能避免冲突,即网络锁;本地锁仅能感知本班的使用状态,跨班级无法同步,就会出现冲突。
1.3 存储类(Storage Class)要求
PV与PVC的存储类必须完全一致,不存在包容或降级关系。
存储类为人为自定义的标识,无官方固定标准,通常由企业统一规划不同等级(如1-6级、ABCD等级、金银铜牌等),不同等级对应不同的存储性能、稳定性、成本。业务方申请存储时需指定对应等级的存储类,才能匹配同等级的PV,全公司需统一存储类的定义规则。
2. PV回收策略
PV被PVC释放后,会根据预设的回收策略执行对应操作,共3种类型:
2.1 Retain(保留)
- 所有后端存储都支持该策略
- PV释放后进入**已释放(Released)**状态,禁止被新PVC绑定
- 卷内原有数据不会自动清理,需管理员手动备份数据后,才能将PV恢复为可用状态
- 建议生产环境优先选择该策略,避免数据丢失
2.2 Recycle(回收)
- 仅支持NFS、HostPath类型的PV
- PVC删除后,自动执行
rm -rf命令清空PV内的所有数据,清空成功后PV恢复为可用状态,可被新PVC绑定
2.3 Delete(删除)
- 仅支持云厂商提供的块存储、文件存储、持久化存储类型的PV
- PVC删除后,自动删除后端云存储资源,按量付费场景下可及时释放资源节省成本
3. PV/PVC的状态说明
PV共有4种运行状态:
- Available(可用):PV已准备就绪,等待满足匹配条件的PVC绑定
- Bound(已绑定):PV已被指定PVC绑定,处于使用中状态
- Released(已释放):原绑定PV的PVC已被删除,且PV回收策略为Retain,此时PV不可被新PVC绑定,需人工处理数据后恢复为可用状态
- Failed(失败):回收/删除操作执行失败(如删除云存储时返回错误),需管理员手动介入处理
4. PVC保护机制
K8s提供两层PVC保护规则,避免误操作导致数据丢失:
- 若PVC未被删除,禁止直接删除与其关联的PV
- 若Pod仍在使用PVC,删除PVC不会立即生效,需等待Pod释放后,PVC才会被真正删除
5. 实验演示:NFS存储接入K8s
5.1 前置概念:无状态与有状态服务
- 无状态服务:实例删除后重建不影响服务运行,不需要持久化存储,典型如Web服务器、负载均衡后端,对应K8s的Deployment等无状态Pod控制器
- 有状态服务:实例删除后重建需要保留原有数据才能正常运行,需要持久化存储,典型如MySQL等数据库,对应K8s的StatefulSet控制器
5.2 NFS服务器搭建步骤
- 所有K8s集群节点需安装NFS客户端:CentOS7及以上版本执行安装命令
yum install -y nfs-utils rpcbind,因为Pod挂载NFS时,会先挂载到集群物理机节点,再通过-v方式挂载到Pod容器内,因此物理机必须支持NFS挂载 - 实验环境将NFS服务部署在master01节点(生产环境不推荐,需独立部署NFS服务器避免性能影响)
- 创建NFS共享目录,执行命令:
mkdir -p /nfs_data chmod 666 /nfs_data chown nfsnobody:nfsnobody /nfs_data # 不存在nfsnobody则替换为nobody vim /etc/exports # 添加 /nfsdata *(rw,no_root_squash,no_all_squash,sync) - 编辑
/etc/exports文件,添加NFS共享路径配置,可按需创建多个子目录用于后续测试
AI 总结
本次内容核心讲解了K8s中PV与PVC的3个核心匹配条件(容量、读写策略、存储类)、3种回收策略的适用场景与兼容性限制、PV/PVC的4种状态含义、两层PVC保护机制,同时明确了无状态/有状态服务的区别与对应控制器,配套演示了NFS存储接入K8s的前置搭建步骤,为后续有状态服务部署、存储资源使用提供了核心理论支撑。