-
kubernetes Pod 에서 NAS 공유 볼륨 사용하기NAVER Cloud 2021. 12. 1. 12:21
Deployment 로 배포된 여러개의 pod 에서 동일한 파일에 접근하기 위해서는 오브젝트 스토리지를 사용하는 방법도 있지만, 상황에 따라서는 NAS 볼륨을 사용하는 것이 더 효율적일 수도 있다.
네이버클라우드의 kubernetes 에서 NAS 볼륨을 사용하는 방법을 제공하긴 했으나, worker node 가 증가되면 수동으로 설정해줘야 하는 부분들이 있었는데, NAS CSI 가 출시되면서 상당히 편리해졌다.
기본적으로 block storage csi 는 클러스터 생성 시 배포되어 있는데, NAS csi 역시 클러스터 생성 시 배포에 포함된다. (21년 11/25 이후 배포된 nks 클러스터)
11/25 이전에 생성하여 사용하던 클러스터라면 수동으로 NAS csi 를 배포해줘야 한다.
1. 기존 사용 nks 클러스터에 nas csi 배포 / 확인
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://nks.apigw.ntruss.com/static/v1/nas-csi/real/pub/1.0/latest/nas-csi-nks-driver.yaml kubectl --kubeconfig=$KUBE_CONFIG get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nks-block-storage (default) blk.csi.ncloud.com Delete WaitForFirstConsumer true 146d nks-nas-csi nas.csi.ncloud.com Delete WaitForFirstConsumer true 126m kubectl --kubeconfig $KUBE_CONFIG get deployment -n kube-system NAME READY UP-TO-DATE AVAILABLE AGE nks-nas-csi-controller 1/1 1 1 120m kubectl --kubeconfig $KUBE_CONFIG get daemonset -n kube-system NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nks-nas-csi-node 4 4 4 4 4 kubernetes.io/os=linux 120m
2. CSI 볼륨 추가 및 pod 배포
# pod_share_vol.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi storageClassName: nks-nas-csi --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-volume spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: shared-data mountPath: "/www" volumes: - name: shared-data persistentVolumeClaim: claimName: nas-csi-pvc
kubectl --kubeconfig $KUBE_CONFIG apply -f pod_share_vol.yaml kubectl --kubeconfig $KUBE_CONFIG get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment-volume 3/3 3 3 98m kubectl --kubeconfig $KUBE_CONFIG get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nas-csi-pvc Bound pvc-669ea7618ed54f518 500Gi RWX nks-nas-csi 118m
3. pod 에 접근해서 /www 마운트 여부 확인 및 파일 생성
kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deployment-volume-786d7648cf-4rb5k /bin/sh kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deployment-volume-786d7648cf-4rb5k /bin/sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. # df -h Filesystem Size Used Avail Use% Mounted on overlay 48G 16G 30G 34% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup 169.254.82.85:/n2534632_pvc669ea7618ed54f518/pvc669ea7618ed54f518 500G 384K 500G 1% /www /dev/xvda1 48G 16G 30G 34% /etc/hosts cd /www touch ttt.txt
4. deployment 내 다른 pod 접근해서 /www 마운트 여부 및 ttt.txt 파일 유무 확인
kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deployment-volume-786d7648cf-cnwfn /bin/sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. df -h Filesystem Size Used Avail Use% Mounted on overlay 48G 13G 33G 29% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup 169.254.82.85:/n2534632_pvc669ea7618ed54f518/pvc669ea7618ed54f518 500G 384K 500G 1% /www /dev/xvda1 48G 13G 33G 29% /etc/hosts cd /www ls ttt.txt
Node Pool 내 node 를 추가한 이후에 pod 를 scale out 해도 같은 nas 볼륨을 공유해서 사용할 수 있다.
반응형'NAVER Cloud' 카테고리의 다른 글
VM 의 NIC 별 통신 트래픽 확인하기 - flow log 설정 (0) 2022.01.10 ALB Ingress 로 subdomain 분기 설정 (0) 2021.12.20 jenkins kubernetes plugin 설치하고 빌드 테스트 해보기 (0) 2021.10.22 jenkins를 kubernetes 에 구성하기 (0) 2021.10.22 ECR 이미지를 NCP 컨테이너 레지스트리(Container Registry)로 복사하기 (0) 2021.10.06