NASボリューム CSI のユースケース
    • PDF

    NASボリューム CSI のユースケース

    • PDF

    記事の要約

    VPC環境で利用できます。

    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をサポートします。
    モード説明
    ReadWriteOnce1つのノードでボリュームを読み取り-書き込みでマウント
    ReadOnlyMany複数のノードでボリュームを読み取り専用でマウント
    ReadWriteMany複数のノードでボリュームを読み取り-書き込みでマウント
    • Resources: 作成するストレージの容量です。デフォルト値は500GBであり、最小500GBから最大10,000GBの間で100GB単位で 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ボリュームは自動で削除されません。 この場合は NAVERクラウドプラットフォームコンソールや APIを通じて返却する必要があります。

    1つの NASボリュームを複数の Podにマウントして使用

    1つの新規 NASボリュームを作成して2つの 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: NAVERクラウドプラットフォーム 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コンソールで削除できます。

    ボリュームリサイズ

    NAVERクラウドプラットフォームの NASボリュームは、既に作成済みのボリュームに対するリサイズ機能を提供します。

    NASボリュームをリサイズする方法は、次の通りです。以下では、500GB容量の NASボリュームを例に挙げて説明します。

    1. 以下の yamlコードを使用して500GB容量の新規ブロックストレージボリュームの作成をリクエストします。
    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容量を500GBから600GBに調整します。
    kubectl --kubeconfig $KUBE_CONFIG patch pvc csi-deployment-pvc -p '{"spec":{"resources":{"requests":{"storage":"600Gi"}}}}'
    

    reclaimPolicyが Retainである StorageClassの使用

    reclaimPolicyが Retainである StorageClassは、関連リソースが削除されても実際ストレージリソースが保存される特徴があります。そのため、データ消失を防止し、手動でデータを管理・復旧できる柔軟性を提供します。StorageClassは作成後に設定変更が難しいため、設定変更が必要な場合は既存 StorageClassを変更する代わりに新規 StorageClassを作成して使用する必要があります。Retainポリシーを使用する場合は削除された PVと関連付けられたストレージリソースを手動で管理・整理する必要があります。

    下記の例として使用した yamlコードを通じて、reclaimPolicyが Retainである StorageClassを使用できます。

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nks-nas-csi-retain
    mountOptions:
    - hard
    - nolock
    - nfsvers=3
    provisioner: nas.csi.ncloud.com
    reclaimPolicy: Retain 
    volumeBindingMode: WaitForFirstConsumer
    

    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

    暗号化が適用された 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を Podから直接アクセスする

    もし NAS-CSIを介することなく NASに直接アクセスしたい場合、次のように NFSを使用して Podで 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.