NAVER Cloud

kubernetes Pod 에서 NAS 공유 볼륨 사용하기

한크크 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 볼륨을 공유해서 사용할 수 있다.

반응형