第七章 K8s存储 - StorageClass 笔记
1. 静态PV vs 动态PV 核心区别与痛点
1.1 静态PV的固有缺陷
静态PV是存储工程师手动将后端存储抽象为PV对象放入集群的供给模式,存在两大核心问题:
- 容量匹配困难:用户需求的精准存储容量(如1.98T)很难和手动创建的PV(通常为1T/2T/5T等规格)匹配,要么容量不足无法使用,要么容量过剩造成资源浪费
- 流程繁琐:当无匹配PV时,需要用户和存储工程师跨部门沟通创建对应PV,效率极低
1.2 动态PV的解决方案
通过将后端存储的供给能力抽象为集群内的StorageClass(存储类),对接后端存储供应商的开放接口,实现PV的按需自动创建,完全匹配用户的个性化需求,无需提前手动创建PV,也无须跨部门沟通。
1.3 核心流程对比
| 模式 | 流程说明 |
|---|---|
| 静态PV | 提前手动创建PV → Pod创建PVC → PVC与已有PV绑定 → Pod使用PV |
| 动态PV | 集群内部署StorageClass(对接后端存储供应商)→ Pod创建PVC并指定StorageClass → StorageClass调用供应商接口按需创建PV → PVC与新建PV绑定 → Pod使用PV |
2. StorageClass 核心概念
- 官方定义:StorageClass是K8s原生资源对象,用于定义持久卷的动态供给策略
- 核心作用:允许管理员定义不同类型的存储、指定PV的创建规则、选择对应的存储供应程序,实现集群存储管理的灵活化和自动化
- 类比理解:StorageClass类似汽车品牌的直销店,用户(PVC)提出需求后,直销店(StorageClass)对接厂家(后端存储供应商)定制化提供商品(PV),无需提前备货(提前创建PV)
3. 基于NFS的StorageClass实验演示
3.1 前置准备
本实验复用上小节已搭建的NFS服务器,若未完成NFS搭建需先完成环境准备。
3.2 实验步骤
步骤1:配置NFS服务器共享目录
- 编辑
/etc/exports文件,添加共享规则:/nfs/data *(允许所有客户端访问/nfs/data目录下的子目录) - 创建共享父目录:
mkdir -p /nfs/data - 设置目录权限:将目录归属设置为
nobody用户,匹配NFS服务权限要求 - 重启NFS服务并设置开机自启:
systemctl restart nfs-server,systemctl enable nfs-server exportfs -arv重新导出所有配置(-a 全部,-r 重新导出,-v 显示详细信息)- 验证共享:执行
showmount -e <NFS服务器IP>,确认/nfs/data已成功共享
步骤2:部署NFS Client Provisioner(存储供应模拟器)
该项目是官方开源工具,基于NFS服务模拟云存储供应商,提供动态PV创建能力,部署时需修改2处核心配置,不要修改官方镜像名:
- 修改Deployment中的环境变量:替换为实际NFS服务器IP、共享路径(如
/nfs/data) - 修改Deployment中的卷配置:同步修改NFS服务器地址和共享路径
同时需创建RBAC权限资源(ServiceAccount、ClusterRole、RoleBinding),为Provisioner授予操作集群存储资源的权限,否则无法正常创建PV。
步骤3:创建StorageClass
创建StorageClass资源,关键配置项说明:
metadata.name:存储类名称,后续PVC需通过该名称指定使用此类存储,示例中为nfs-clientprovisioner:供应程序名称,需和NFS Client Provisioner的标识完全一致,不可乱写parameters.path:PV的路径模板,示例为/nfs/data/{{ .PVC.Namespace }}-{{ .PVC.Name }},即每个PV对应NFS共享目录下的独立子目录,命名规则为<PVC所在命名空间>-<PVC名称>,避免多个PV路径冲突reclaimPolicy:回收策略,可选Delete(删除PVC后自动删除对应PV和NFS目录)或Retain(删除PVC后保留PV和数据,需手动清理)
步骤4:验证动态存储供给
- 创建测试PVC:指定
storageClassName为上述创建的StorageClass名称,配置存储容量、访问模式(如多节点读写ReadWriteMany) - 创建测试Pod:挂载上述PVC,配置容器启动后向挂载目录写入测试数据
- 验证持久化:
- 进入Pod的挂载目录,可看到写入的测试数据
- 登录NFS服务器,进入对应PVC的子目录,可看到相同的测试数据,证明数据持久化在NFS后端
- 在NFS服务器端修改测试文件内容,Pod内可同步看到更新,证明挂载关系正常
- 验证回收策略:删除测试Pod和PVC后,对应的PV会被自动删除(回收策略为
Delete时),NFS对应的子目录也会被自动清理;若PVC删除后PV未及时回收,是NFS自动清理流程需要一定时间,属于正常现象
3.3 注意事项
- Pod挂载PVC时,若原容器镜像的挂载目录存在默认文件,会被NFS的空目录覆盖,若需要保留默认文件需提前处理
- StorageClass的名称、NFS服务器地址、共享路径等配置需保持一致,否则会导致PV创建失败
- 生产环境可对接阿里云盘、华为云存储等云存储服务替换NFS,实现更可靠的动态存储供给
4. 核心知识点总结
- 静态PV适合存储需求固定、容量可预测的场景,动态PV适合云环境、多租户等存储需求多变的场景
- StorageClass是动态存储的核心,通过抽象存储供给能力,实现存储资源的按需分配、自动化管理,大幅降低存储运维成本
- NFS Client Provisioner是本地测试动态存储的常用工具,掌握其部署和配置逻辑可快速验证StorageClass的功能
AI 总结
本小节核心讲解Kubernetes StorageClass(存储类)的核心概念与实战应用:首先对比了静态PV容量匹配难、流程繁琐的痛点,引出动态PV的解决方案;明确StorageClass是动态存储供给的核心资源对象,通过对接后端存储供应商实现PV的按需自动创建,解决静态PV的管理问题;最后通过基于NFS Client Provisioner的完整实验,演示了从NFS配置、Provisioner部署、StorageClass创建到动态PV验证的全流程,掌握后可灵活适配各类后端存储实现K8s集群存储的自动化管理。