如何在 Kubernetes(k8s) 中通过 NFS 配置跨节点的持久化存储?

问题浏览数Icon
18
问题创建时间Icon
2025-06-08 03:00:00
作者头像
starlearner02

在 Kubernetes 中通过 NFS 配置跨节点的持久化存储,需遵循以下核心步骤:

  1. NFS 服务器准备:部署稳定的 NFS 服务端,创建共享目录并配置访问权限(如 /exports/data);
  2. 节点依赖安装:所有 k8s 节点需安装 nfs-utilsnfs-common 工具,确保挂载能力;
  3. PV/PVC 定义
    • PersistentVolume (PV):声明 NFS 服务器地址(server:IP)、共享路径(path)及权限(readOnly: false),访问模式设为 ReadWriteMany 以支持跨节点读写;
    • PersistentVolumeClaim (PVC):绑定 PV 资源要求(如存储大小、访问模式);
  4. Pod 挂载配置:在 Deployment 或 Pod 的 volumeMounts 中引用 PVC,实现跨节点存储访问。

关键注意事项

  • NFS 性能调优:根据负载调整 nfsvers(推荐 v4 以上)及挂载参数(如 hard/soft);
  • 权限一致性:确保容器用户对 NFS 目录有读写权限,避免 UID/GID 不匹配;
  • 灾备与高可用:若生产环境使用,建议 NFS 服务端采用集群化方案(如 DRBD + Pacemaker)防止单点故障;
  • 安全策略:通过 k8s NetworkPolicy 或 NFS 防火墙规则限制非法访问。

更多回答

作者头像
haoyue77
  1. 部署NFS服务器:在NFS服务端创建共享目录(如/data/nfs),在/etc/exports中添加条目/data/nfs *(rw,sync,no_subtree_check),执行exportfs -a生效。

  2. 节点准备:在所有Kubernetes节点安装NFS客户端:

    apt-get install nfs-common  # Debian/Ubuntu
    yum install nfs-utils       # CentOS/RHEL
  3. 创建PersistentVolume(PV):

    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: nfs-pv
    spec:
    capacity:
    storage: 10Gi
    accessModes:
    - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    nfs:
    server: <NFS_SERVER_IP>
    path: /data/nfs
  4. 创建PersistentVolumeClaim(PVC):

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: nfs-pvc
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
      storage: 10Gi
  5. Pod挂载示例:

    apiVersion: v1
    kind: Pod
    metadata:
    name: nfs-pod
    spec:
    containers:
    - name: app
    image: nginx
    volumeMounts:
      - name: nfs-volume
        mountPath: /usr/share/nginx/html
    volumes:
    - name: nfs-volume
    persistentVolumeClaim:
      claimName: nfs-pvc

验证:执行kubectl get pv,pvc检查绑定状态,在Pod中写入文件后重建Pod或跨节点部署新Pod,确认数据持久化。

作者头像
chaoyang66

在k8s里用NFS搞跨节点存储分三步:1.找个NFS服务器或者自己搭一个,共享个目录出来;2.在k8s里创建PersistentVolume(PV),填上NFS服务器的IP和共享路径;3.用PersistentVolumeClaim(PVC)绑定这个PV。最后在Pod配置文件里挂载这个PVC就行。所有节点要装nfs-utils,否则挂载会失败。

作者头像
mingliu66

在Kubernetes中通过NFS实现跨节点持久化存储,需遵循以下步骤:

  1. 部署NFS服务器并创建共享目录
  2. 所有节点安装nfs-utils客户端工具
  3. 创建PersistentVolume(PV)定义NFS访问参数
  4. 定义PersistentVolumeClaim(PVC)绑定PV
  5. Pod通过volumeMounts关联PVC 关键技术点:
    • PV访问模式需设置为ReadWriteMany
    • 需保证NFS服务器高可用以避免单点故障
    • 建议通过StorageClass实现动态供给 注意事项:
    • NFS协议时延敏感,需确保网络低延迟
    • 多节点并发写入时需关注文件锁机制
    • 存储性能受NFS服务器硬件性能制约