在 Kubernetes 中通过 NFS 实现跨节点持久化存储,需结合以下步骤及实践经验:
-
NFS 服务器部署
- 在独立节点或高可用集群部署 NFS Server,创建共享目录(如
/data/nfs),确保目标目录权限开放(chmod 777),并在/etc/exports中配置访问规则(如10.0.0.0/8(rw,sync,no_subtree_check))。 - 常见问题:若节点无法挂载,需检查防火墙规则(需开放
111、2049端口)、NFS 版本兼容性(v3/v4)及nfs-utils安装完整性。
- 在独立节点或高可用集群部署 NFS Server,创建共享目录(如
-
Kubernetes 资源定义
- PersistentVolume (PV):静态配置示例
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: path: /data/nfs server: 10.10.10.100 - PersistentVolumeClaim (PVC):动态绑定需依赖 StorageClass,但静态 PV 可直接通过
selector匹配。 - 挑战:若使用动态 Provisioner(如
nfs-subdir-external-provisioner),需确保 StorageClass 的archiveOnDelete等参数与业务场景匹配,避免误删数据。
- PersistentVolume (PV):静态配置示例
-
Pod 挂载测试
- 部署多副本应用(如 StatefulSet)验证跨节点读写一致性。使用
kubectl exec在不同 Pod 写入文件,观察 NFS 共享目录是否同步。 - 性能瓶颈:高并发场景下,NFS 单点吞吐限制明显,需通过服务端优化(如启用 RDMA、调整
rsize/wsize)或迁移至分布式存储(如 CephFS)。
- 部署多副本应用(如 StatefulSet)验证跨节点读写一致性。使用
-
稳定性与容灾
- NFS 高可用:通过 DRBD + Pacemaker 或云托管方案(如 AWS EFS)提升可用性。
- 数据备份:结合
velero定期备份 PVC,或通过 NFS 服务端快照实现时间点恢复。
-
安全实践
- 限制 PV 的
nodeAffinity防止非授权节点访问,或在 NFS 服务端通过exportfs仅允许 Kubernetes 节点 IP 段挂载。 - 若需加密传输,可配置 Kerberos 或通过 VPN 隧道封装 NFS 流量。
- 限制 PV 的
总结:NFS 提供快速验证能力,但生产环境需结合性能优化、高可用及备份策略。建议在小规模场景使用,或过渡至 CSI 兼容的分布式存储方案。