蛮子哥 蛮子哥
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

蛮子哥

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
    • jenkins脚本式流水线部署k8s项目实例一
    • helm v3安装并创建例子
    • 使用helm将本地部署文件上传到harbor chart上
    • helm公共仓库创建
    • helm适应minio作为私有仓库
    • helm release使用说明
    • kubernetes核心概念
    • kubectl使用技巧
    • kubernetes卷的几种类型
    • kubernetes安全框架
    • 云原生-什么是HPA和PDB、VPA
    • k8s部署php项目示例
    • 配置kubeconfig 文件访问 Kubernetes 集群
    • configmap配置的几种方式
    • k8s配置go服务
    • k8s部署java项目
    • kubernetes部署prometheus监控
    • kubernetes部署elk日志系统
    • kubernetes环境devops流水线
    • kubernetes高阶技能必备的工具
    • deployment中使用configmap、secret的方式
    • 业务pod 飘移pending排查分析
    • debian 12安装kubernetes
    • istio入门
    • kubernetes证书续签到100年
    • kubernetes网络模式
    • etcd的备份和还原
    • Kubernetes 安装和配置 NFS 存储卷
    • elk

    • jenkins

    • GitLabCI_CD

    • AI编程

    • 提示词

    • ArgoCD

    • 专题
    • Kubernetes笔记
    蛮子哥
    2024-05-21
    目录

    Kubernetes 安装和配置 NFS 存储卷

    Kubernetes 安装和配置 NFS 存储卷(PersistentVolume) 有两种主要方式:

    1. 静态 PV(简单,直接挂载现有 NFS 路径,适合测试/固定使用场景)
    2. 动态 Provisioning(推荐生产环境,使用 StorageClass 自动创建子目录)

    # 1. 前置条件:准备 NFS Server

    在 NFS 服务器上(独立机器或 NAS)执行:

    # Ubuntu/Debian
    apt update && apt install -y nfs-kernel-server
    
    # CentOS/RHEL
    yum install -y nfs-utils
    
    # 创建共享目录
    mkdir -p /nfs/k8s
    chown -R nobody:nogroup /nfs/k8s
    chmod 777 /nfs/k8s
    
    # 编辑 exports
    cat <<EOF >> /etc/exports
    /nfs/k8s *(rw,sync,no_subtree_check,no_root_squash)
    EOF
    
    exportfs -ra
    systemctl restart nfs-kernel-server
    showmount -e localhost
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    重要权限:no_root_squash 方便 Kubernetes 使用。

    所有 Kubernetes 节点都需要安装 NFS 客户端:

    # Ubuntu
    apt install -y nfs-common
    
    # CentOS
    yum install -y nfs-utils
    
    1
    2
    3
    4
    5

    # 2. 静态 NFS PV + PVC(最简单)

    nfs-pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany   # NFS 典型使用 RWX
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nfs-static
      nfs:
        server: 192.168.1.100     # 你的 NFS Server IP
        path: /nfs/k8s/mydata     # NFS 导出的路径
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    nfs-pvc.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nfs-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 50Gi
      storageClassName: nfs-static
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    kubectl apply -f nfs-pv.yaml
    kubectl apply -f nfs-pvc.yaml
    
    1
    2

    在 Pod 中挂载:

    volumeMounts:
    - mountPath: "/data"
      name: nfs-volume
    volumes:
    - name: nfs-volume
      persistentVolumeClaim:
        claimName: nfs-pvc
    
    1
    2
    3
    4
    5
    6
    7

    # 3. 动态 Provisioning(推荐)

    # 推荐方案:NFS CSI Driver(Kubernetes 官方推荐,GA 状态)

    # 1. 安装 CSI Driver(最新方式)
    helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
    helm repo update
    
    helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs \
      --namespace kube-system \
      --version v4.13.2
    
    1
    2
    3
    4
    5
    6
    7

    创建 StorageClass(nfs-csi-sc.yaml)

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nfs-csi
    provisioner: nfs.csi.k8s.io
    parameters:
      server: 192.168.1.100
      share: /nfs/k8s
      # subDir: "${pvc.namespace}-${pvc.name}"   # 可自定义子目录格式
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    mountOptions:
      - vers=4.2
      - hard
      - noatime
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    kubectl apply -f nfs-csi-sc.yaml
    
    1

    然后直接创建 PVC(无需手动 PV):

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: dynamic-nfs-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      storageClassName: nfs-csi
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 备选方案:nfs-subdir-external-provisioner(较老,但仍常用)

    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=192.168.1.100 \
      --set nfs.path=/nfs/k8s \
      --namespace nfs-provisioner \
      --create-namespace
    
    1
    2
    3
    4
    5
    6

    StorageClass 名称默认为 nfs-client。


    # 常见问题排查

    • Mount failed:检查节点是否能 mount -t nfs 192.168.1.100:/nfs/k8s /mnt 测试挂载
    • Permission denied:NFS Server 使用 no_root_squash,并检查目录权限
    • SELinux(CentOS):setenforce 0 测试,或正确配置 SELinux 上下文
    • 多节点:确保所有 Worker 节点都能访问 NFS
    • 查看事件:`kubectl describe pvc xxx
    微信 支付宝
    上次更新: 2026/05/21, 21:01:23

    ← etcd的备份和还原 elk安装→

    最近更新
    01
    kubernetes证书续签到100年
    05-04
    02
    istio入门
    04-29
    03
    ES故障排查命令
    04-29
    更多文章>
    Theme by Vdoing | Copyright © 2019-2026 | 点击查看十年之约 | 鄂ICP备2024072800号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式