Administrator
发布于 2026-08-16 / 10 阅读
0
0

第七章.k8s存储-storageClass

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=d8c71ff24a3359a807967fc4b5daa0e4&p=55

第七章 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服务器共享目录

  1. 编辑/etc/exports文件,添加共享规则:/nfs/data *(允许所有客户端访问/nfs/data目录下的子目录)
  2. 创建共享父目录:mkdir -p /nfs/data
  3. 设置目录权限:将目录归属设置为nobody用户,匹配NFS服务权限要求
  4. 重启NFS服务并设置开机自启:systemctl restart nfs-server,systemctl enable nfs-server
  5. exportfs -arv重新导出所有配置(-a 全部,-r 重新导出,-v 显示详细信息)
  6. 验证共享:执行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-client
  • provisioner:供应程序名称,需和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:验证动态存储供给

  1. 创建测试PVC:指定storageClassName为上述创建的StorageClass名称,配置存储容量、访问模式(如多节点读写ReadWriteMany)
  2. 创建测试Pod:挂载上述PVC,配置容器启动后向挂载目录写入测试数据
  3. 验证持久化:
    • 进入Pod的挂载目录,可看到写入的测试数据
    • 登录NFS服务器,进入对应PVC的子目录,可看到相同的测试数据,证明数据持久化在NFS后端
    • 在NFS服务器端修改测试文件内容,Pod内可同步看到更新,证明挂载关系正常
  4. 验证回收策略:删除测试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集群存储的自动化管理。


评论