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

问题浏览数Icon
2
问题创建时间Icon
2025-06-08 03:00:00
回答 | 共 2 个
作者头像
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服务器硬件性能制约
作者头像
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,确认数据持久化。