1. 为什么需要NFS动态供给
在Kubernetes集群中,持久化存储的管理一直是个痛点。传统方式需要管理员手动创建PV(PersistentVolume),然后用户才能创建PVC(PersistentVolumeClaim)来绑定使用。这种方式在小型集群中尚可应付,但在大规模生产环境中就会遇到几个典型问题:
- 资源浪费:管理员需要预先创建大量PV,但实际使用率可能很低
- 管理复杂:每次新增存储都需要手动操作,容易出错
- 灵活性差:无法根据应用需求动态调整存储资源
NFS动态供给通过StorageClass机制完美解决了这些问题。当用户创建PVC时,系统会自动按需创建对应的PV,整个过程完全自动化。这种机制特别适合以下场景:
- 开发测试环境:团队成员可以随时申请存储资源而不用等待管理员操作
- CI/CD流水线:自动化部署时无需人工干预存储准备
- 多租户集群:每个租户可以自主管理自己的存储资源
提示:动态供给的核心组件是Provisioner,它负责监听PVC的创建请求并自动完成PV的创建和绑定。NFS Provisioner是社区维护的一个开源实现,支持子目录级别的动态分配。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与验证
2.1 基础环境检查
在开始配置前,必须确保以下基础条件已经满足:
-
Kubernetes集群状态:
bash复制
kubectl get nodes所有节点都应显示Ready状态。如果是单节点测试环境(如minikube或kubeadm搭建的集群),确保至少有一个Worker节点可用。
-
NFS服务器连通性:
- 在Kubernetes所有节点上执行:
bash复制
ping <NFS_SERVER_IP> showmount -e <NFS_SERVER_IP> - 必须能看到NFS服务器导出的共享目录列表
- 在Kubernetes所有节点上执行:
-
kubectl配置:
bash复制
kubectl config view确认当前上下文(context)指向正确的集群
2.2 NFS服务器配置建议
虽然NFS服务器可以在集群内部或外部,但生产环境建议考虑以下配置:
-
权限设置:
bash复制chmod 777 /nfs/shared/directory chown nobody:nogroup /nfs/shared/directory确保Kubernetes Pod有足够的读写权限
-
/etc/exports配置示例:
bash复制/nfs/shared/directory *(rw,sync,no_subtree_check,no_root_squash)然后执行
exportfs -a使配置生效 -
防火墙规则:
bash复制sudo ufw allow from <K8S_NODE_CIDR> to any port nfs
