[kubernetes] NFS 동적 프로비저닝

728x90

NFS 동적 프로비저닝

공식 문서: https://kubernetes.io/ko/docs/concepts/storage/storage-classes/#프로비저너

https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

깃허브에서 코드를 다운로드 받는다.

역할을 만드는 rbac.yaml 파일을 실행한다.

cd ~

git clone <https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git>

cd ~/nfs-subdir-external-provisioner/deploy

kubectl create -f rbac.yaml

deployment.yaml 에서 실제 NFS Server 의 주소와 마운트되는 NFS 경로를 작성한 후에 파일을 실행한다.

~/nfs-subdir-external-provisioner/deploy/deployment.yaml

...
...
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 192.168.100.100
            - name: NFS_PATH
              value: /nfsvolume
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.100.100
            path: /nfsvolume
kubectl create -f deployment.yaml

kubectl create -f class.yaml

스토리지 클래스를 생성하는 class.yml 파일을 실행한다.

annotations 필드를 추가해서 생성되는 스토리지 클래스가 디폴트가 되도록 설정할 수 있다.

~/nfs-subdir-external-provisioner/class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "false"
kubectl apply -f class.yaml

class.yaml 에서 디폴트 스토리지 클래스를 설정했기 때문에 StorageClassName 를 작성하지 않아도 pvc 가 자동으로 설정된다.

mypvc.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc-dynamic
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1G
  # StorageClassName: 'nfs-cline'
kubectl get pv
NAME            ...
mypvc-dynamic   ...
728x90