Documentation Index

Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt

Use this file to discover all available pages before exploring further.

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

Prev Next

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をサポートします。
モード 説明
ReadWriteOnce 1つのノードでボリュームを読み取り-書き込みでマウント
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を入力
      Region Zone ZoneNo
      韓国 KR-1
      韓国 KR-2
      シンガポール SGN-4
      シンガポール SGN-5
      日本 JPN-4
      日本 JPN-5

暗号化が適用された 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

SubDirを使用した NASボリュームの共有 [NAS CSI v2.2.0+]

1つの NASボリューム内にサブディレクトリを作成することで、複数の PVCが同じ NASボリュームを共有できるようになります。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nks-nas-csi-subdir
mountOptions:
- hard
- nolock
- nfsvers=3
provisioner: nas.csi.ncloud.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: mount-options
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  server: __NAS_IP__
  share: __NAS_PATH__
  subDir: my-app-data
  deleteOnlySubdir: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nas-csi-subdir-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 500Gi
  storageClassName: nks-nas-csi-subdir
---
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-subdir-pvc
  • parameters.subDir: 作成するサブディレクトリ名を入力します。
  • parameters.deleteOnlySubdir: "true"に設定すると、PVCを削除する際にサブディレクトリのみが削除され、NASボリュームは保持されます。
注意

parameters.subDir 値に **#**文字は使用できません。

参考

parameters.deleteOnlySubdirは reclaimPolicyが Deleteの場合にのみ有効です。
NASボリュームとサブディレクトリをすべて保持するには、StorageClassの reclaimPolicyを Retainに設定してください。

PVC/PVメタデータを活用した動的 SubDir作成 [NAS CSI v2.2.0+]

parameters.subDir パラメータにメタデータ置換パターンを使用すると、PVC/PV情報に基づいてサブディレクトリを動的に作成できます。
これにより、名前空間と PVC名に基づいた自動ディレクトリ構造を作成できます。

使用可能な置換パターン

パターン 説明
${pvc.metadata.name} PVC名に置換
${pvc.metadata.namespace} PVC名前空間に置換
${pv.metadata.name} PV名に置換

以下のユースケースで、PVC名が app-dataで、名前空間が productionの場合、サブディレクトリは production-app-dataと自動作成されます。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nks-nas-csi-dynamic-subdir
mountOptions:
- hard
- nolock
- nfsvers=3
provisioner: nas.csi.ncloud.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: mount-options
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  server: __NAS_IP__
  share: __NAS_PATH__
  subDir: ${pvc.metadata.namespace}-${pvc.metadata.name}
  deleteOnlySubdir: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-data
  namespace: production
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 500Gi
  storageClassName: nks-nas-csi-dynamic-subdir
---
kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app
  namespace: production
spec:
  containers:
    - name: my-frontend
      image: busybox
      volumeMounts:
      - mountPath: "/data"
        name: my-volume
      command: [ "sleep", "1000000" ]
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: app-data
参考

メタデータの置換は、ボリュームの作成時に一度だけ実行されます。今後、PVC名や名前空間が変更されても、サブディレクトリ名は変更されません。

動的プロビジョニングでの SubDir使用 [NAS CSI v2.2.0+]

NASボリュームを動的にプロビジョニングする際に、サブディレクトリを指定できます。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nks-nas-csi-dynamic-subdir
mountOptions:
- hard
- nolock
- nfsvers=3
provisioner: nas.csi.ncloud.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: mount-options
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  subDir: ${pvc.metadata.namespace}-${pvc.metadata.name}
  deleteOnlySubdir: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

静的プロビジョニングでの用途別 SubDir分離 [NAS CSI v2.2.0+]

既に作成済みの NASボリューム内に複数のサブディレクトリを作成し、用途別に分離できます。
StorageClassの servershareに同じ NASボリューム情報を入力し、parameters.subDir 値をそれぞれ異なる値に設定した StorageClassを作成します。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nks-nas-csi-subdir-logs
mountOptions:
- hard
- nolock
- nfsvers=3
provisioner: nas.csi.ncloud.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: mount-options
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  server: __NAS_IP__
  share: __NAS_PATH__
  subDir: logs
  deleteOnlySubdir: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nks-nas-csi-subdir-config
mountOptions:
- hard
- nolock
- nfsvers=3
provisioner: nas.csi.ncloud.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: mount-options
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  server: __NAS_IP__
  share: __NAS_PATH__
  subDir: config
  deleteOnlySubdir: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

各 PVCで該当する StorageClassを指定すると、同じ NASボリューム内に logsと configのサブディレクトリが作成されます。