使用helm安裝nfs-subdir-external-provisioner實現動態創建存儲


存儲組件 nfs-subdir-external-provisioner 是一個存儲資源自動調配器,它可用將現有的 NFS 服務器通過持久卷聲明來支持 Kubernetes 持久卷的動態分配。此組件是對 nfs-client-provisioner 的擴展,nfs-client-provisioner 已經不提供更新,且 nfs-client-provisionerGithub倉庫已經遷移到 nfs-subdir-external-provisioner 的倉庫。

nfs-subdir-external-provisioner官方Github地址

k8s版本:v1.23.1

准備工作:
  • 搭建好NFS服務;
  • 安裝好helm

使用helm安裝:
  1. 使用命令行進行安裝:

    #添加helm源
    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
    
    #創建個namespace(可選,主要是為了查看資源方便)
    kubectl create ns nfs-sc-default
    
    #使用helm安裝(10.1.129.86為NFS地址,/data/nfs-data為共享的目錄)
    helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
        --set storageClass.name=nfs-sc-default	#指定sc的名字
        --set nfs.server=10.1.129.86 \					#指定nfs地址
        --set nfs.path=/data/nfs-data \					#指定nfs的共享目錄
        --set storageClass.defaultClass=true \	#指定為默認sc
        -n nfs-sc-default												#指定命名空間
    
    #查看創建的sc
    kubectl get sc
    
  2. 使用values.yaml進行安裝:

    #下載chart
    helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
    
    #解壓后可以看到values.yaml
    cat values.yaml | egrep -v '#|^$'
    
    ###########
    replicaCount: 1
    strategyType: Recreate
    image:
      repository: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner
      tag: v4.0.2
      pullPolicy: IfNotPresent
    imagePullSecrets: []
    nfs:
      server: 10.1.129.86			#指定nfs地址
      path: /data/nfs-data		#指定nfs的共享目錄
      mountOptions:
      volumeName: nfs-subdir-external-provisioner-root
      reclaimPolicy: Retain
    storageClass:
      create: true
      defaultClass: true			#指定為默認sc
      name: nfs-sc-default		#指定sc的名字
      allowVolumeExpansion: true
      reclaimPolicy: Delete
      archiveOnDelete: true
      onDelete:
      pathPattern:
      accessModes: ReadWriteOnce
      annotations: {}
    leaderElection:
      enabled: true
    rbac:
      create: true
    podSecurityPolicy:
      enabled: false
    podAnnotations: {}
    podSecurityContext: {}
    securityContext: {}
    serviceAccount:
      create: true
      annotations: {}
      name:
    resources: {}
    nodeSelector: {}
    tolerations: []
    affinity: {}
    labels: {}
    ###########
    
    #就修改了上面4處參數后使用values.yaml文件進行安裝
    helm install nfs-subdir-external-provisioner \
        nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
        -f values.yaml \
        -n nfs-sc-default
    
    #查看創建的sc
    kubectl get sc
    

測試:
  1. 創建pvc測試:

    先創建個test-pvc.yaml,在這個yaml文件里我們沒有特意指定使用哪個sc,是因為之前創建的sc是默認的sc,如果沒有指定默認sc,需要在這個文件里指定使用哪個sc

    cat test-pvc.yaml
    
    ##########
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc
    #  storageClassName: nfs-sc-default #指定sc名字,如果之前設定nfs-sc-default為默認sc可不用寫這行指定
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Mi
    ##########
    
    #創建pvc
    kubectl apply -f test-pvc.yaml -n nfs-sc-default
    
    #查看pvc
    kubectl get pvc -n nfs-sc-default
    

    查看pv,如圖第二個為sc創建的pv,名字為隨機,並已經與test-pvc綁定了:

  2. 創建pod測試:

    創建test-pod.yaml文件,在這個yaml文件里我們只指定了busybox文件創建了個SUCCESS文件,綁定的volume里指定的是之前創建的test-pvc

    cat test-pod.yaml
    
    #########
    kind: Pod
    apiVersion: v1
    metadata:
      name: test-pod
    spec:
      containers:
      - name: test-pod
        image: busybox:latest
        command:
          - "/bin/sh"
        args:
          - "-c"
          - "touch /mnt/SUCCESS && exit 0 || exit 1"  
        volumeMounts:
          - name: nfs-pvc
            mountPath: "/mnt"
      restartPolicy: "Never"
      volumes:
        - name: nfs-pvc
          persistentVolumeClaim:
            claimName: test-pvc
    #########
    
    #創建測試pod
    kubectl apply -f test-pod.yaml  -n nfs-sc-default
    
    #查看pod已經顯示創建成功了
    kubectl get pod -n nfs-sc-default
    
  3. 查看NFS目錄里創建的文件:

    可以看見SUCCESS文件創建成功,並且可以看出命名目錄的規則為namespace名稱-pvc名稱-pv名稱PV 名稱是隨機字符串,所以 每次只要不刪除PVC,那么Kubernetes中的與存儲綁定將不會丟失,要是刪除PVC也就意味着刪除了綁定的文件夾,下次就算重新創建相同名稱的PVC,生成的文件夾名稱也不會一致,因為PV 名是隨機生成的字符串,而文件夾命名又跟PV 有關,所以刪除PVC需謹慎。

  4. 刪除相關測試的資源:

    kubectl delete -f test-pod.yaml  -n nfs-sc-default
    kubectl delete -f test-pvc.yaml  -n nfs-sc-default
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM