NAS 볼륨 CSI 예제
    • PDF

    NAS 볼륨 CSI 예제

    • PDF

    기사 요약

    NAS 볼륨 CSI에서 설명한 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 볼륨을 생성하고 두 개의 Pod에 마운트하여 해당 볼륨을 공유하여 사용하는 예제입니다.

    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-1
    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
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-csi-app-2
    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
    

    이미 생성된 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의 이름을 입력합니다.
    주의

    반납보호 설정이 되어있는 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-fkr-2
    mountOptions:
    - hard
    - nolock
    - nfsvers=3
    provisioner: nas.csi.ncloud.com
    parameters:
      zoneNo: "130"
    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-fkr-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
        한국FKR-1110
        한국FKR-2130

    암호화가 적용 된 NAS 볼륨을 위한 StorageClass 사용

    주의

    암호화가 적용된 NAS 볼륨을 위한 StorageClass는 NAS CSI 버전 2.0.2 이상부터 사용 가능합니다.

    NAS CSI 드라이버는 기본적으로 볼륨 암호화가 적용되지 않은 NAS 볼륨을 생성합니다. 하지만 StorageClass에 encryption을 명시하여 볼륨 암호화가 적용된 NAS 볼륨을 생성할 수 있습니다. 아래 예시로 사용된 yaml 코드를 통해 볼륨 암호화가 적용된 NAS 볼륨을 생성할 수 있습니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nks-nas-csi-encryption
    mountOptions:
    - hard
    - nolock
    - nfsvers=3
    provisioner: nas.csi.ncloud.com
    parameters:
      encryption: "true"
    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-encryption
    ---
    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
    

    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를 파드에서 바로 접근하기

    만약 NAS-CSI를 통하지 않고 NAS에 직접 접근하고자 하는 경우, 아래와 같이 NFS를 사용하여 파드에서 NAS를 직접 마운트할 수 있습니다. 아래 예시에서는 nfs 볼륨 타입을 사용하여 NAS 서버를 직접 마운트합니다. server 필드에 NAS의 IP 주소를, path 필드에 NAS의 경로를 입력하여 사용합니다. volumeMounts를 통해 컨테이너 내부에서 사용할 경로를 지정할 수 있습니다.

    주의

    NAS-CSI 를 사용하지 않으므로 NAS ACL을 수동으로 등록해야 합니다.

    kind: Deployment
    metadata:
      name: my-csi-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-csi-app 
      template:
        metadata:
          labels:
            app: my-csi-app
        spec:
          containers:
          - name: my-csi-app 
            image: nginx 
            volumeMounts:
            - name: web
              mountPath: /web
            - name: was
              mountPath: /was
          volumes:
          - name: web
            nfs:
              server: __NAS_IP__
              path: __NAS_PATH__/web
              readOnly: false
          - name: was
            nfs:
              server: __NAS_IP__
              path: __NAS_PATH__/was 
              readOnly: false
    

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

    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.