当前位置: 首页 > news >正文

如何使用 PersistentVolumeClaim 动态挂载 NFS 存储卷

在 Kubernetes 里动态挂载 NFS,核心是部署一个 NFS Client Provisioner 并配置对应的 StorageClass,让 PVC 能自动创建 PV 指向 NFS 路径。

先说结论:通过 StorageClass 对接 nfs-subdir-external-provisioner 是实现动态挂载的标准做法,适合需要按需分配子目录的场景。

  • 适合:多租户需要隔离存储目录,或不想手动管理 PV 生命周期。
  • 先准备:确保集群节点能网络通达 NFS 服务器,且权限配置正确。
  • 验收:PVC 状态变为 Bound,且 Pod 内可读写文件。

命令速用版

# 部署 NFS Client Provisioner (示例使用 Helm)
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \`--set` nfs.server=<NFS_SERVER_IP> \`--set` nfs.path=<NFS_SERVER_PATH> \`--set` storageClass.name=nfs-client \`--set` storageClass.defaultClass=true

为什么会这样

PVC 本身只是存储请求,它不知道底层是 NFS 还是云盘。StorageClass 充当了“中介”,告诉 Kubernetes 当有人申请 PVC 时,调用哪个 Provisioner 去创建实际的存储卷。对于 NFS 而言,原生 Kubernetes 不支持直接动态创建 NFS 子目录,所以需要额外的 nfs-subdir-external-provisioner 组件来监听 PVC 事件,并在 NFS 服务器上创建对应文件夹,再绑定给 PV。

分步处理

1. 确认 NFS 服务可用
在任意集群节点上执行 mount 测试,确保网络和权限没问题。

showmount -e <NFS_SERVER_IP>
mkdir /tmp/test-nfs
mount -t nfs <NFS_SERVER_IP>:<PATH> /tmp/test-nfs
touch /tmp/test-nfs/write_test
umount /tmp/test-nfs

2. 部署 Provisioner
可以使用 Helm 或直接 apply YAML。关键是指对 NFS 服务器地址和路径。注意 serviceAccount 需要足够权限创建 PV。

3. 创建 PVC
指定 storageClassName 与 Provisioner 配置一致。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-dynamic-pvc
spec:accessModes:- ReadWriteManystorageClassName: nfs-clientresources:requests:storage: 1Gi

4. 创建 Pod 挂载
在 volumes 中引用该 PVC。

怎么验证是否生效

执行 kubectl get pvc nfs-dynamic-pvc,STATUS 列应显示 Bound。进入 Pod 内部尝试写入文件,同时观察 NFS 服务器对应路径下是否生成了以 namespace-claim-name-uuid 命名的子目录。

常见坑

权限拒绝(Permission denied):NFS 服务器通常默认开启 root_squash,导致容器内 root 用户映射为 nfsnobody。建议在 Provisioner 配置中调整 gid/uid 或在 NFS 服务端调整 export 选项。

StorageClass 不匹配:如果 PVC 没写 storageClassName,会使用集群默认的。如果 Provisioner 设置的默认类被覆盖,PVC 会一直 Pending。

网络策略限制:如果集群启用了 NetworkPolicy,确保 Provisioner Pod 能访问 NFS 服务器的 2049 端口。

参考来源

  • Kubernetes 官方文档 - StorageClasses: https://kubernetes.io/docs/concepts/storage/storageclasses/
  • Kubernetes SIGs - nfs-subdir-external-provisioner: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

原文链接:https://www.zjcp.cc/ask/10329.html

http://www.jsqmd.com/news/776533/

相关文章:

  • 别再死记硬背了!用“状态转换图”和“波形图”轻松吃透D触发器与JK触发器
  • 密钥管理体制PKI和KMI(二)
  • 洋葱路由原理与ConnectOnion实战:构建可控匿名通信网络
  • Windows 11 C盘爆红别慌!这5个隐藏的“空间杀手”软件,教你一键搬家到D盘
  • 用OpenCV和Python手把手实现Meanshift目标跟踪(附完整代码与避坑指南)
  • AI智能体安全实践:使用ActionBox为AI技能定义和执行行为契约
  • 2026年10款降AI率工具实测红黑榜:亲测有效!附免费降ai避坑教程 - 降AI实验室
  • 大白话科普:GAIA、AgentBench 到底是啥?
  • LCD1602自定义字符的5个高级玩法:从动态图标到简单动画
  • UseZombie:构建安全可控的AI智能体生产级运行平台
  • 福州GEO优化系统TOP10深度测评:主流方案对比与选型指南(2026年) - 博客湾
  • 别再手动调Excel格式了!用EasyExcel 3.x模板填充,5分钟搞定复杂报表导出(附完整代码)
  • 从一次项目超支复盘讲起:手把手教你用EV、AC、CPI算ETC和EAC,预测项目最终要花多少钱
  • 暗黑3技能连点器完全指南:5分钟从零到精通的效率提升方案
  • OBSAI与CPRI基站架构标准化解析与应用
  • Windows字体渲染优化:如何用MacType让文字显示效果翻倍提升?
  • 告别CANoe?手把手教你用Python+PCAN搭建汽车诊断脚本(附完整代码)
  • Windows驱动存储清理终极指南:DriverStore Explorer完整使用教程
  • 别再手动翻文档了!用CrewAI的RAG工具链,5分钟搞定PDF、CSV、网页的智能搜索
  • 沃尔玛回收渠道怎么选?五一礼品卡用法及闲置变现指南 - 喵权益卡劵助手
  • Windows PDF处理革命:零依赖Poppler工具包,让文档自动化变得如此简单
  • SeekerClaw:在Android手机上本地部署全栈AI智能体的实践指南
  • ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本告别噪音烦恼
  • 【日记】这两天真的发生了好多事情(2134字)
  • Adnify:轻量级Go Web框架在云原生与微服务中的实践
  • Windows驱动存储深度清理指南:专业工具全面解析与实战应用
  • OpenBind 的首次数据和模型发布标志着人工智能药物发现领域的一个重要里程碑。
  • 3大性能调优误区:为什么你的AMD处理器没有发挥真正实力?
  • 鸣潮玩家每天浪费3小时?这款开源自动化工具让你轻松解放双手!
  • 半导体封装从标准到定制:技术演进与设计挑战