ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

nfs存储类配置为默认sc

2026/8/17 0:30:54 拓冰建站 浏览量
nfs存储类配置为默认sc

准备工作

  1. 准备 NFS 服务器
    • 你需要一个可用的 NFS 服务器(IP 地址,例如 192.168.1.100)。
    • 创建一个共享目录(例如 /data/nfs),并确保权限设置允许 Kubernetes 节点访问(通常设置为 755777 用于测试,生产环境需严格配置)。
    • 确保所有 Kubernetes 节点都能通过网络访问该 NFS 服务器。
  2. 安装 NFS 客户端工具
    在所有 Kubernetes 节点(Master 和 Worker)上安装 NFS 客户端包,以便节点能够挂载 NFS 共享。
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y nfs-common# CentOS/RHEL
sudo yum install -y nfs-utils

使用 Helm 部署 NFS Provisioner

Helm 会自动处理 RBAC 权限、Deployment 和 StorageClass 的创建。

  1. 添加 Helm 仓库

    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
    helm repo update
    
  2. 安装 Provisioner
    <NFS_SERVER_IP> 替换为你实际的 NFS 服务器 IP,/data/nfs 替换为你的共享目录路径。

helm install nfs-provisioner \nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \--set nfs.server=10.0.0.231 \--set nfs.path=/data/nfs \--set storageClass.name=nfs-sc \--set storageClass.defaultClass=true \--set storageClass.reclaimPolicy=Retain \--set storageClass.archiveOnDelete=false \--namespace kube-system \--create-namespace

关键参数说明:

  • storageClass.name=nfs-sc: 创建的 StorageClass 名称为 nfs-sc
  • storageClass.defaultClass=true: 将其设置为集群的默认 StorageClass。这样创建 PVC 时如果不指定类名,就会自动使用 NFS 存储。
  • storageClass.reclaimPolicy=Retain: 回收策略为“保留”。当 PVC 删除时,NFS 上的数据目录不会被删除,防止误删数据。
  • storageClass.archiveOnDelete=false: 删除 PVC 时不重命名归档目录,直接保留原样。

验证与测试

部署完成后,我们可以通过创建一个 PVC 和 Pod 来验证 NFS 动态存储是否工作正常。

  1. 创建测试 PVC
    创建一个名为 test-nfs-pvc.yaml 的文件:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:name: test-nfs-pvc
    spec:storageClassName: nfs-sc  # 如果设为默认类,此行可省略accessModes:- ReadWriteMany         # NFS 支持多节点读写resources:requests:storage: 1Gi
    

    应用配置:kubectl apply -f test-nfs-pvc.yaml

    1. 创建测试 Pod
      创建一个名为 test-nfs-pod.yaml 的文件,用于向 NFS 写入数据:

      apiVersion: v1
      kind: Pod
      metadata:name: test-nfs-pod
      spec:containers:- name: test-containerimage: busyboxcommand: ["/bin/sh", "-c", "while true; do date >> /mnt/data/date.log; sleep 5; done"]volumeMounts:- name: nfs-volumemountPath: /mnt/datavolumes:- name: nfs-volumepersistentVolumeClaim:claimName: test-nfs-pvc
      

      应用配置:kubectl apply -f test-nfs-pod.yaml

    2. 检查结果

      • 检查 PVC 状态:
      kubectl get pvc test-nfs-pvc
      
      • 检查 NFS 服务器
        登录到你的 NFS 服务器,查看 /data/nfs 目录。你应该能看到自动生成了一个以 默认命名空间-test-nfs-pvc-<PV名称> 命名的子目录,里面包含了 Pod 写入的 date.log 文件。
      • 验证数据持久化
        删除 Pod 后重新创建,再次查看 /mnt/data/date.log,之前的数据依然存在,证明存储挂载成功。

总结

通过以上步骤,你已经成功配置了基于 NFS 的动态存储供应。

  • 核心组件nfs-subdir-external-provisioner 负责监听 PVC 并在 NFS 上创建子目录。
  • StorageClass:定义了 NFS 存储的模板(如回收策略、挂载选项)。
  • 优势:开发者无需关心底层 NFS 细节,只需申请 PVC 即可获得存储,极大提高了效率。