- 印刷する
- 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をサポートします。
モード | 説明 |
---|---|
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ボリュームを例に挙げて説明します。
- 以下の 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
- 以下のコマンドを実行して 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 2 韓国 KR-2 3 シンガポール SGN-4 74 シンガポール SGN-5 75 日本 JPN-4 84 日本 JPN-5 85
暗号化が適用された 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