-
K8S에서 NFS 서버 없이 동적 프로비저닝 사용하기K8S 2022. 12. 2. 13:35
이번 포스팅은 nfs 서버 추가 없이 nfs 동적 프로비저닝를 사용할 수 있는 방법에 대한 내용이다.
실제 물리적인 nfs 서버를 사용하지 않기 때문에 storage class를 사용이 필요한 테스트 환경에 적합한 방법일듯하다.
우선 nfs provisoner로는 두가지 정도가 있는데,
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
나의 경우에는 위의 프로비저너를 사용했다.
(nfs-subdir-external-provisoner도 nfs 서버 없이 사용 가능한지는 모르겠다)
동작 원리는 배포되는 provisoner에서 emptydir이나 hostpath를 볼륨으로 제공하여 nfs 서버 역할과 프로비저너 역할을 함께 하는 듯하다.
그리고 provionser를 deployment로 생성하는 경우, pod당 하나의 service가 항상 있어야 하며, deployment의 replicas를 하나 이상으로 확장할 수 없다고 한다. 만약 확장하고 싶다면, 새로운 deployment와 service를 하나의 pair로 만들어주어야 한다.
statefulset으로 생성하는 경우, deployment에 대한 설명과 유사하며 service를 headless service로 사용할 수 없다.
나의 경우, helm을 통해서 statefulset 형태의 provisoner를 설치하였다.
환경
Kubeadm으로 설치한 K8S
Master: 1
Worker: 0
OS: ubuntu 18.04
K8S version: v1.19.4
Helm3 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh
Helm Chart Repo 추가하기
helm repo add nfs-ganesha-server-and-external-provisioner https://kubernetes-sigs.github.io/nfs-ganesha-server-and-external-provisioner/
Chart 설치하기
해당 helm repo에서 사용가능한 nfs-server-provisoner version을 검색한다.
helm search repo nfs-ganesha-server-and-external-provisioner/nfs-server-provisioner --versions
마음에 드는 chart version 선택 후, 해당 버전을 설치하자.
나의 경우에는 최신 chart version인 1.4.0을 설치했다.
kubectl create ns nfs helm -n nfs install nfs-server-provisioner nfs-ganesha-server-and-external-provisioner/nfs-server-provisioner \ --set=storageClass.defaultClass=true --version=1.4.0
chart 설치 후, provisoner가 잘 떠 있는 것을 알 수 있다.
PVC 생성해서 테스트하기
이제 마지막으로 잘 사용되는지 확인한다.
root@k8s:~# cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-dynamic-volume-claim spec: storageClassName: "nfs" accessModes: - ReadWriteOnce resources: requests: storage: 100Mi EOF
Chart 삭제하기
kubectl delete persistentvolumeclaim/test-dynamic-volume-claim helm -n nfs uninstall nfs-server-provisioner
스토리지 서버 추가 없이 자유롭게 동적 프로비저닝을 사용할 수 있다는 점이 매력적인 듯하다.
반응형'K8S' 카테고리의 다른 글
K8S API Call 예제 (0) 2022.12.14 Operator-sdk 사용시 multiple controller 구조로 변경 (0) 2022.12.05 ArgoCD와 Keycloak OIDC 연동하기 (0) 2022.11.25 Cert-manager와 Traefik IngressRoute을 이용한 nginx https 배포 (0) 2022.10.25 Ingress traefik을 이용한 nginx http 배포 (0) 2022.10.25