NAS 볼륨 CSI
    • PDF

    NAS 볼륨 CSI

    • PDF

    Article Summary

    VPC 환경에서 이용 가능합니다.

    구동 중인 컨테이너에 파일을 새로 추가할 경우, 해당 파일들은 프로세스가 종료되거나 Kubernetes Liveness Probe의 상태 체크에 실패하여 컨테이너가 재시작될 때 모두 삭제됩니다. 이 때 NAS 볼륨을 사용하여 새로 추가된 파일들이 프로세스 종료 또는 컨테이너 재시작 후에도 유지되도록 설정할 수 있습니다.

    Kubernetes NAS 볼륨 컨테이너를 배포할 때 PersistentVolumeClaim(PVC)를 생성하여 추가할 수 있습니다.

    네이버 클라우드 플랫폼의 Ncloud Kubernetes Service는 볼륨 드라이버로 Container Storage Interface(CSI)를 제공합니다. 이 드라이버는 Kubernetes와 연동되어 NAS 볼륨 생성, 삭제, 리사이징 등의 작업을 지원합니다.

    지원되는 버전 및 용량

    지원되는 버전 및 용량 정보를 설명합니다.

    지원되는 버전

    네이버 클라우드 플랫폼에서 제공하는 NAS CSI 버전과 호환 Kubernetes 버전은 다음과 같습니다.

    Ncloud NAS CSI Driver\Kubernetes Version1.181.191.201.211.221.23
    v1.0.x지원지원지원지원지원지원
    v2.0.x미지원미지원미지원미지원지원지원

    Kubernetes 버전에서 지원하는 스토리지 서비스는 다음과 같습니다.

    Service\Kubernetes Version1.18+
    볼륨 생성지원
    볼륨 삭제지원
    볼륨 확장(리사이즈)지원
    서버에 볼륨 할당지원
    서버에 볼륨 해제지원
    스냅샷 생성미지원
    스냅샷 삭제미지원

    할당 가능한 용량

    Kubernetes NAS 볼륨은 CSI를 통해 100 GB 단위로 용량을 할당할 수 있습니다. 볼륨 크기를 별도로 정의하지 않는 경우 기본값인 500 GB로 NAS 볼륨이 생성됩니다. 할당 가능한 최소 용량과 최대 용량은 다음과 같습니다.

    • 최소: 500 GB
    • 최대: 10,000 GB

    NAS CSI 드라이버 설치 (기존 미설치 클러스터용)

    NAS CSI 드라이버는 Kubernetes가 설치될 때 기본으로 배포됩니다. 이 절은 기존 미설치 클러스터에서 NAS CSI를 설치하는 방법을 설명합니다. NAS CSI가 이미 설치되어 있는 경우에는 아래의 작업을 수행하지 않아도 됩니다.

    NAS CSI Driver 배포

    아래 파일들은 최신의 안정 버전을 가리킵니다. 설치 과정 중 문제가 생긴 경우 kubectl apply -f 명령을 다시 실행하여 누락된 리소스가 다시 반영되도록 합니다.

    • 한국 리전
    # kubernetes version >= 1.22
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/nas-csi/pub/kr/v2.0.1/nas-csi.yaml
    
    # kubernetes version < 1.22
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/nas-csi/pub/kr/v1.0.2/nas-csi.yaml
    
    • 싱가포르 리전
    # kubernetes version >= 1.22
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/nas-csi/pub/sgn/v2.0.1/nas-csi.yaml
    
    # kubernetes version < 1.22
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/nas-csi/pub/sgn/v1.0.2/nas-csi.yaml
    
    • 일본 리전
    # kubernetes version >= 1.22
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/nas-csi/pub/jpn/v2.0.1/nas-csi.yaml
    

    NAS CSI 드라이버 상세 사항

    StorageClass

    StorageClass는 각 스토리지의 정책과 타입을 설정한 오브젝트입니다. 네이버 클라우드 플랫폼에서는 NAS 볼륨을 사용하는 StorageClass를 제공합니다.
    NAS 볼륨의 StorageClass 오브젝트를 확인하려면 nks-nas-csi 이름을 가진 오브젝트를 확인해 주십시오. 아래와 같이 표시됩니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nks-nas-csi
    mountOptions:
    - hard
    - nolock
    - nfsvers=3
    provisioner: nas.csi.ncloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    
    • volumeBindingMode: 볼륨 바인딩과 동적 프로비저닝이 동작하는 시점을 설정할 수 있습니다. 기본값은 Immediate입니다.
    모드설명
    ImmediatePVC가 생성되는 시점에 동작
    WaitForFirstConsumerPod가 생성되는 시점에 동작
    • reclaimPolicy: 사용이 끝난 PVC가 삭제될 때 사용 중이던 PersistentVolume을 재확보 또는 삭제하도록 정책을 설정할 수 있습니다. 기본값은 Delete입니다.
    정책설명
    RetainPVC가 삭제될 때 사용 중인 PV는 재사용이 가능한 상태로 변경되며, NAS 볼륨 내부 데이터를 유지
    DeletePVC가 삭제될 때 사용 중인 PV를 함께 삭제하며, NAS 볼륨 반납
    • allowVolumeExpansion: 값을 true로 설정하여 PersistentVolumeClaim을 확장할 수 있습니다.
    참고

    Retain 정책을 통해 재확보한 NAS 볼륨은 네이버 클라우드 플랫폼 콘솔이나 API를 통해 반납할 수 있습니다.

    Default Storage Class 변경

    생성된 StorageClass 오브젝트의 기본 Storage Class 내용을 변경하려면 Changing the default StorageClass를 참조해 주십시오.

    CSI Controller

    CSI Controller는 볼륨의 생성, 삭제, 할당, 할당 해제, 스냅샷 등 각종 제어와 관리를 담당하는 인터페이스입니다.

    NAS CSI Controller를 확인하려면 아래 명령어를 통해 네임스페이스 kube-system 내의 Deployment 오브젝트를 확인해 주십시오.

    $ kubectl --kubeconfig $KUBE_CONFIG get deployment -n kube-system
    

    CSI Node

    CSI 노드는 Kubernetes의 워커 노드마다 하나씩 동작하는 노드로, 볼륨의 포맷, 마운트, 언마운트 등의 동작을 담당합니다.

    NAS CSI Node를 확인하려면 아래 명령어를 통해 네임스페이스 kube-system 내의 DaemonSet 리소스를 확인해 주십시오.

    $ kubectl --kubeconfig $KUBE_CONFIG get daemonset -n kube-system
    

    CSI 드라이버 사용

    NAS 볼륨 추가

    NAS CSI 드라이버를 통해 NAS 볼륨을 추가하려면 아래 yaml 코드를 통해 PersistentVolumeClaim(PVC)을 요청해 주십시오. NAS CSI 드라이버가 해당 PVC를 확인하여 필요한 PersistentVolume(PV)를 자동으로 생성합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nas-csi-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 500Gi
      storageClassName: nks-nas-csi
    
    • AccessMode: NAS CSI에서는 다양한 AccessMode를 지원합니다.
    모드설명
    ReadWriteOnce하나의 노드에서 볼륨을 읽기-쓰기로 마운트
    ReadOnlyMany여러 노드에서 볼륨을 읽기 전용으로 마운트
    ReadWriteMany여러 노드에서 볼륨을 읽기-쓰기로 마운트
    • Resources: 생성할 스토리지의 크기입니다. 기본값은 500 GB이며, 최소 500 GB부터 최대 10,000 GB 사이에서 100 GB 단위로 Gi를 사용해 입력할 수 있습니다.

    Pod에 단일 신규 볼륨 할당

    새 NAS 볼륨을 생성하여 마운트하려면 아래 yaml 코드를 사용해 주십시오.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nas-csi-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 500Gi
      storageClassName: nks-nas-csi
    ---
    kind: Pod
    apiVersion: v1
    metadata:
      name: my-csi-app
    spec:
      containers:
        - name: my-frontend
          image: busybox
          volumeMounts:
          - mountPath: "/data" 
            name: my-volume
          command: [ "sleep", "1000000" ]
      volumes:
        - name: my-volume
          persistentVolumeClaim:
            claimName: nas-csi-pvc
    
    • Pod
      • spec.container: volumeMounts에 마운트할 스토리지 이름을 입력한 후 mountPath에 마운트 경로를 입력하십시오.
      • spec.volumes: 컨테이너에 마운트될 스토리지를 정의하기 위해 생성된 PersistentVolumeClaim의 이름을 persistentVolumeClaim.claimName에 입력하십시오.
    주의

    NAS 볼륨이 Pod에 마운트 된 상태에서 클러스터를 삭제하면 NAS 볼륨은 자동으로 삭제되지 않습니다. 이 경우 네이버 클라우드 플랫폼 콘솔이나 API를 통해 반납해야 합니다.

    이미 생성된 NAS 볼륨을 Pod에 마운트

    NAS에서 NFS 프로토콜로 볼륨을 생성합니다.

    NAS 볼륨이 생성되면 마운트 정보의 IP 및 PATH 정보를 확인합니다.

    이미 생성된 NAS 볼륨를 사용하여 StorageClass을 생성한 후 Pod에 마운트하려면 아래 yaml 코드를 사용해 주십시오.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: static-nks-nas-csi
    provisioner: nas.csi.ncloud.com
    parameters:
      server: __NAS_IP__
      share: __NAS_PATH__
    reclaimPolicy: Retain
    volumeBindingMode: WaitForFirstConsumer
    mountOptions:
      - hard
      - nolock
      - nfsvers=3
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: static-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 500Gi
      storageClassName: static-nks-nas-csi
    ---
    kind: Pod
    apiVersion: v1
    metadata:
      name: my-csi-app
    spec:
      containers:
        - name: my-frontend
          image: busybox
          volumeMounts:
          - mountPath: "/data"
            name: my-volume
          command: [ "sleep", "1000000" ]
      volumes:
        - name: my-volume
          persistentVolumeClaim:
            claimName: static-pvc
    
    • kind: StorageClass
      이미 존재하는 NAS 볼륨을 Kubernetes 클러스터에서 사용할 수 있도록 정보를 입력합니다.

      • provisioner: 네이버 클라우드 플랫폼 NAS 볼륨의 Provisioner인 nas.csi.ncloud.com를 입력하십시오.
      • parameters.server: 이미 생성한 NAS 볼륨 마운트 정보의 IP를 입력하십시오.
      • parameters.path: 이미 생성한 NAS 볼륨 마운트 정보의 PATH를 입력하십시오.
      • reclaimPolicy: 사용이 끝난 PVC가 삭제될 때 NAS 볼륨이 삭제되지 않도록 반드시 Retain으로 설정합니다.
    • kind: PersistentVolumeClaim
      생성된 PersistentVolume과 바인딩되는 PersistentVolumeClaim을 생성합니다.

      • resources.storage: 필수 입력 항목으로 이미 생성한 NAS 볼륨의 크기를 입력하십시오. 하지만 PVC의 크기는 NAS 볼륨 크기에 의존하기 때문에 입력하는 값은 의미가 없습니다.
      • storageClassname: NAS 스토리지 클래스 이름인 static-nks-nas-csi를 입력하십시오.
      • volumeName: 생성한 PersistentVolume의 이름을 입력하십시오.
    • kind: Pod
      볼륨 요청인 PersistentVolumeClaim을 지정하여 사용할 볼륨을 마운트합니다.

      • volumes.persistentVolumeClaim.claimName: 지정할 PersistentVolumeClaim의 이름을 입력합니다.

    PersistentVolumeClaim 제거

    Kubernetes의 PersistentVolumeClaim은 Deployment, StatefulSet, ReplicaSet, Pod 등 요청된 리소스를 삭제하더라도 함께 삭제되지 않으므로, 삭제하려면 별도의 명령어가 필요합니다.

    PersistentVolumeClaim을 확인한 후 제거하려면 다음 명령어를 각각 사용해 주십시오.

    • PVC 조회
    $ kubectl --kubeconfig $KUBE_CONFIG get pvc
    
    • PVC 삭제
    $ kubectl --kubeconfig $KUBE_CONFIG delete pvc static-pvc
    
    주의

    반납보호 설정이 되어있는 NAS 볼륨의 경우, PersistentVolumeClaim은 삭제되지만 실제 볼륨은 유지됩니다.
    실제 NAS볼륨은 NAS 콘솔에서 삭제 가능합니다.

    볼륨 리사이징

    네이버 클라우드 플랫폼의 NAS 볼륨은 이미 생성되어 있는 볼륨에 대한 리사이징 기능을 제공합니다.

    NAS 볼륨을 리사이징하는 방법은 다음과 같습니다. 아래 설명에서는 500 GB 크기의 NAS 볼륨을 예시로 들어 설명합니다.

    1. 아래 yaml 코드를 사용하여 500 GB 크기의 신규 블록 스토리지 볼륨 생성을 요청해 주십시오.
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-deployment-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 500Gi
      storageClassName: nks-nas-csi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-csi-app
    spec:
      selector:
        matchLabels:
          app: my-csi-app
      replicas: 1
      template:
        metadata:
          labels:
            app: my-csi-app
        spec:
          containers:
            - name: my-frontend
              image: busybox
              volumeMounts:
              - mountPath: "/data"
                name: my-volume
              command: [ "sleep", "1000000" ]
          volumes:
            - name: my-volume
              persistentVolumeClaim:
                claimName: csi-deployment-pvc
    
    1. 아래 명령어를 실행하여 PersistentVolumeClaim의 Volume Request 크기를 500 GB에서 600 GB로 조정해 주십시오.
    kubectl --kubeconfig $KUBE_CONFIG patch pvc csi-deployment-pvc -p '{"spec":{"resources":{"requests":{"storage":"600Gi"}}}}'
    

    Zone 번호가 명시 된 StorageClass 사용

    주의

    Zone 번호가 명시 된 StorageClass는 NAS CSI 버전 2.0.1 이상부터 사용 가능합니다.

    NAS CSI 드라이버는 Kubernetes와 동일한 Zone에 NAS 볼륨을 생성합니다. 하지만 StorageClass에 zoneNo를 명시하여 동일 Region의 특정 Zone에 NAS 볼륨을 생성할 수 있습니다. 아래 예시로 사용 된 yaml 코드를 통해 ZoneNo를 지정하여 NAS 볼륨을 생성할 수 있습니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nks-nas-csi-kr-2
    mountOptions:
    - hard
    - nolock
    - nfsvers=3
    provisioner: nas.csi.ncloud.com
    parameters:
      zoneNo: "3"
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nas-csi-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 500Gi
      storageClassName: nks-nas-csi-kr-2
    ---
    kind: Pod
    apiVersion: v1
    metadata:
      name: my-csi-app
    spec:
      containers:
        - name: my-frontend
          image: busybox
          volumeMounts:
          - mountPath: "/data"
            name: my-volume
          command: [ "sleep", "1000000" ]
      volumes:
        - name: my-volume
          persistentVolumeClaim:
            claimName: nas-csi-pvc
    
    • kind: StorageClass
      • parameters.zoneNo: NAS 볼륨이 생성될 ZoneNo 입력
        RegionZoneZoneNo
        한국KR-12
        한국KR-23
        싱가포르SGN-474
        싱가포르SGN-575
        일본JPN-484
        일본JPN-585

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.