在 Kubernetes 集群中,可以通过 Helm 部署 nfs-subdir-external-provisioner 来动态管理持久卷,这是一个存储资源自动调配器,可以将现有的 NFS 服务器通过持久卷声明来支持 持久卷的动态分配

前置条件:

  • NFS服务器正常运行并且能够与集群通信
  • 安装 Helm
  • 集群正常运行

添加仓库

nfs-subdir-external-provisioner 的 Helm 仓库添加到本地

helm repo add nfs-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm repo update

部署

下载nfs-subdir-external-provisioner的 chart 到本地

helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --untar

编辑其目录中的 values.yaml 下面是示例,,

 cat values.yaml  | grep -v "#"
replicaCount: 1
strategyType: Recreate

image:
  repository: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner
  tag: v4.0.0
  pullPolicy: IfNotPresent
imagePullSecrets: []

nfs:
  server: 10.0.80.253 # nfs服务端ip地址
  path: /data  # nfs共享目录
  mountOptions:
  volumeName: nfs-subdir-external-provisioner-root
  reclaimPolicy: Retain

storageClass:
  create: true


  defaultClass: true 

  name: nfs-default  #  Storage Class的名字

....... # 下面的内容省略

使用自定义的values.yaml进行部署,这里我选择了创建一个独立的namespace便于管理

helm install nfs-provisioner ./nfs-subdir-external-provisioner -f values.yaml -n nfs-provisioner --create-namespace

验证并测试

检查存储类是否创建成功

kubectl get storageclass

测试动态卷分配

创建 testpvc.yaml 并应用

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-claim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: custom-nfs
kubectl apply -f testpvc.yaml -n nfs-provisioner

验证 PVC 是否绑定成功

kubectl get pvc -n nfs-provisioner

接下来可以起个pod进行验证

apiVersion: v1
kind: Pod
metadata:
  name: test-nfs-provisioner
spec:
  containers:
    - name: busybox
      image: busybox
      command: ["/bin/sh", "-c", "echo 'nfstest' > /mnt/testfile && sleep 3600"]
      volumeMounts:
        - name: test-storage
          mountPath: /mnt
  volumes:
    - name: test-storage
      persistentVolumeClaim:
        claimName: test-claim
kubectl apply -f testpod.yaml -n nfs-provisioner

pod正常运行之后可以登录到nfs服务器查看到共享目录生成了一个目录和文件表明成功。。

Last modification:April 25, 2025
如果觉得我的文章对你有用,请随意赞赏