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