ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 볼륨을 공유해서 사용할 수 있다.

    반응형

    댓글

Designed by Tistory.