Container Storage Interface (CSI) プラグインは、汎用型 NAS ボリュームのサブディレクトリに対するクォータ制限の設定をサポートしています。subPath メソッドを使用して NAS サブディレクトリをマウントする際に、ディレクトリクォータ機能を有効にすることで、サブディレクトリの容量を制限し、リソース使用率を向上させることができます。サブディレクトリボリュームがクォータ制限に達した場合、サービスを中断することなく、PVC のストレージ値を更新することでオンラインで拡張できます。
シナリオ
デフォルトでは、ACK クラスターに NAS ボリュームをマウントする際、PVC で宣言されたストレージ値は有効になりません。PV で実際に利用可能な容量は、NAS ファイルシステム全体の容量になります。NAS ボリュームの実際に利用可能な容量は、NAS ファイルシステムの容量制限に基づいて確認できます。
NAS ファイルシステムが複数のアプリケーションによって共有およびマウントされている場合は、subPath メソッドを使用してサブディレクトリをマウントし、ディレクトリクォータ機能を有効にすることをお勧めします。この機能を有効にすると、動的に作成されたサブディレクトリ PV の容量は、PVC で宣言されたストレージ値によって制限されます。容量が制限に達した場合、サービスを中断することなく、PVC のストレージ値を更新することでオンラインでボリュームを拡張できます。 ディレクトリクォータ機能を使用すると、異なるアプリケーション用に個別のサブディレクトリをマウントして容量制限を設定できます。これにより、NAS ファイルシステム内のリソース割り当てをより適切に管理し、管理効率とリソース使用率を向上させ、ストレージコストを効果的に管理できます。
CNFS を使用して NAS を管理する場合、ディレクトリクォータ機能はデフォルトで有効になっています。詳細については、「CNFS を使用して NAS ボリュームを自動的に拡張する」をご参照ください。
前提条件
CSI コンポーネントがクラスターにインストールされており、バージョンが v1.18.8.45 以降であること。コンポーネントをアップグレードするには、「csi-plugin と csi-provisioner を更新する」をご参照ください。
NAS ファイルシステムとマウントポイントが作成されており、次の条件を満たしていること:
NAS のタイプが汎用型 NAS で、プロトコルタイプが NFS であること。そうでない場合は、「汎用型 NAS ファイルシステムを作成する」を再度実行してください。
マウントポイントとクラスターノードが同じ VPC 内にあり、[ステータス] が [アクティブ] であること。そうでない場合は、新しいマウントポイントを作成してください。詳細については、「マウントポイントの管理」をご参照ください。
制限事項
ディレクトリクォータ機能は、汎用型 NAS で NFS プロトコルを使用し、subpath メソッドでマウントされた、動的にプロビジョニングされた NAS ボリュームでのみサポートされます。静的にプロビジョニングされた NAS ボリューム、および sharepath または filesystem メソッドでマウントされた動的にプロビジョニングされた NAS ボリュームでは、この機能はサポートされません。
ディレクトリクォータ機能の制限事項の詳細については、「ディレクトリクォータ」をご参照ください。
ディレクトリクォータを持つ動的にプロビジョニングされた NAS ボリュームを使用する
ステップ 1: サブディレクトリクォータ機能を有効にする StorageClass を作成する
次の YAML コンテンツを修正し、alicloud-nas-quota-sc.yaml として保存します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-quota-sc mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath # 値を subpath に設定します。 server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com" # NFS プロトコルを使用する汎用型 NAS ファイルシステムのマウントポイント。 archiveOnDelete: "false" path: "/test" volumeCapacity: "true" # 動的にプロビジョニングされたボリュームは、ディレクトリクォータ機能をサポートします。 provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Delete allowVolumeExpansion: true # ディレクトリクォータ機能を有効にして、動的にプロビジョニングされたボリュームの拡張を許可します。説明ディレクトリクォータ機能を有効にするには、
allowVolumeExpansionまたはvolumeCapacityをtrueに設定します。allowVolumeExpansionがtrueに設定されている場合、volumeCapacityパラメーターは効果がなく、ディレクトリクォータ機能は有効のままです。次のパラメーターに注意してください。詳細については、「動的にプロビジョニングされた NAS ボリュームを使用する」をご参照ください。
パラメーター
説明
parametersvolumeAsディレクトリクォータ機能を使用する場合、このパラメーターを
subpathに設定する必要があります。これは、NAS ファイルシステムのサブディレクトリが PV としてマウントされることを示します。serverNAS ファイルシステムのマウントポイント。マウントポイントアドレスの表示方法の詳細については、「マウントポイントの管理」をご参照ください。
pathマウントされる NAS ファイルシステムのサブディレクトリ。デフォルト値は
/です。超高速型 NAS ファイルシステムの場合、パスは/shareで始まる必要があります。volumeCapacityディレクトリクォータ機能を有効にするかどうかを指定します。
allowVolumeExpansionがtrueに設定されている場合、このパラメーターは効果がなく、クォータ機能は有効のままです。allowVolumeExpansionこのパラメーターは、汎用型 NAS ファイルシステムでのみ使用できます。このパラメーターを true に設定すると、StorageClass を使用して動的にプロビジョニングされる PV にクォータが設定されます。
StorageClass を作成します。
kubectl apply -f alicloud-nas-quota-sc.yaml
ステップ 2: アプリケーションを作成し、NAS ボリュームをマウントする
次の YAML コンテンツを使用して、nas-sts.yaml という名前のファイルを作成します。
次の YAML は、1 つの Pod を持つ StatefulSet を作成します。Pod は、ディレクトリクォータ機能が有効になっている StorageClass に関連付けられています。システムは、対応する動的にプロビジョニングされた NAS ボリュームを自動的に作成し、それを Pod にマウントします。NAS ボリュームの容量は 20 GiB です。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nas-sts spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: nas-pvc mountPath: /data volumeClaimTemplates: - metadata: name: nas-pvc spec: accessModes: [ "ReadWriteMany" ] storageClassName: "alicloud-nas-quota-sc" resources: requests: storage: 20GiStatefulSet を作成します。
kubectl apply -f nas-sts.yamlStatefulSet によってプロビジョニングされた Pod がデプロイされているかどうかを確認します。
kubectl get pod -l app=nginx次のコマンド出力が返されることが想定されます:
NAME READY STATUS RESTARTS AGE nas-sts-0 1/1 Running 0 24sPV を確認し、ディレクトリクォータが有効であることを確認します。
PV を確認します。
kubectl get pv次の出力が返され、容量が 20 GiB の PV が動的に作成されたことが示されます。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-****-c72c-497f-ab13-****** 20Gi RWX Delete Bound default/nas-pvc-nas-sts-0 alicloud-nas-quota-sc <unset> 15mNAS コンソールでディレクトリクォータの詳細を確認します。
NAS コンソールで、[ファイルシステムリスト] ページに移動します。ターゲットファイルシステムの [アクション] 列で、
アイコンをクリックし、次に [クォータ管理] をクリックします。[クォータ管理] ページで、対応するディレクトリクォータが自動的に生成されていることを確認できます。[クォータの管理] をクリックして詳細を表示します。次の例は、ディレクトリの容量制限が 20 GiB であることを示しています。

ディレクトリクォータ制限の確認
subpath メソッドを使用してマウントされた動的にプロビジョニングされた NAS ボリュームは、宣言された容量が 20 GiB のディレクトリクォータ機能が有効になっているため、マウントされたディレクトリに書き込まれたデータが 20 GiB を超えると、システムはディスククォータを超えたことを示すプロンプトを表示します。
マウントされたディレクトリにデータを書き込みます。
次のコマンド例では、20000 MiB (約 19.53 GiB) のデータをマウントされたディレクトリ
/dataに書き込みます。kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/20G.txt bs=1M count=200005〜15 分待ってから、NAS コンソールでディレクトリクォータの詳細を確認します。
NAS コンソールの [ファイルシステムリスト] ページで、対象のファイルシステムの [操作] 列にある
アイコンをクリックし、次に [クォータ管理] をクリックします。[クォータ管理] ページで、ディレクトリの [クォータの管理] をクリックして詳細を表示します。次の例は、ディレクトリの現在の容量が 19 GiB であることを示しています。

マウントされたディレクトリにさらにデータを書き込んでディレクトリクォータ制限に達すると、ディスククォータ超過エラーがトリガーされます。
次のコマンド例では、1 GiB のデータをマウントされたディレクトリ
/dataに書き込もうとしますが、これはディレクトリクォータ制限を超えます。kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/1G.txt bs=1M count=1024次の出力が返され、ディスククォータを超えたことを示します:
dd: closing output file '/data/1G.txt': Disk quota exceeded説明ボリュームを拡張するには、「ディレクトリクォータを持つ動的にプロビジョニングされた NAS ボリュームを拡張する」をご参照ください。
ディレクトリクォータを持つ動的にプロビジョニングされた NAS ボリュームを拡張する
PVC のストレージ値を更新することで、動的に作成された PV の容量を拡張し、ディレクトリクォータを確認して NAS ボリュームの容量が正常に拡張されたかどうかを確認できます。この拡張操作はオンラインサービスに影響を与えず、ビジネスを中断することもありません。
拡張前の PVC を確認します。
kubectl get pvc次の出力が返されます:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-nas-sts-0 Bound nas-****-c72c-497f-ab13-****** 20Gi RWX alicloud-nas-quota-sc <unset> 23mPVC を変更して NAS ボリュームの容量を拡張します。
kubectl patch pvc nas-pvc-nas-sts-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'重要NAS ディレクトリのクォータは GiB 単位で測定されます。PVC を変更すると、CSI プラグインはマウントされた NAS ディレクトリのクォータを PVC で指定された新しいボリューム容量に調整します。調整中、CSI プラグインは容量値を最も近い整数に切り上げます。
拡張後の PV と PVC を確認します。
返された情報の
CAPACITYフィールドから、NAS ボリュームのディレクトリクォータが 20 GiB から 30 GiB に拡張されたことを確認できます。PV を確認します。
kubectl get pv次の出力が返されます:NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-****-c72c-497f-ab13-****** 30Gi RWX Delete Bound default/nas-pvc-nas-sts-0 alicloud-nas-quota-sc <unset> 25m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-****-c72c-497f-ab13-****** 30Gi RWX Delete Bound default/nas-pvc-nas-sts-0 alicloud-nas-quota-sc <unset> 25mPVC を確認します。
kubectl get pvc次の出力が返されます:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-nas-sts-0 Bound nas-****-c72c-497f-ab13-****** 30Gi RWX alicloud-nas-quota-sc <unset> 26m
NAS コンソールでディレクトリクォータの詳細を確認します。
NAS コンソールの[ファイルシステムリスト]ページで、対象のファイルシステムの[操作]列にある
アイコンをクリックし、次に[クォータ管理]をクリックします。[クォータ管理]ページで、ディレクトリの[クォータの管理]をクリックして詳細を表示します。次の例は、ディレクトリの容量制限が 30 GiB に拡張されたことを示しています。

よくある質問
NAS ボリュームのマウントまたは使用中に問題が発生した場合は、以下をご参照ください:
関連資料
NAS ディレクトリクォータの詳細については、「ディレクトリクォータ」をご参照ください。
NAS ディレクトリにクォータを設定した後、node_volume_capacity_bytes_used メトリックを使用して NAS ボリュームの使用状況を監視できます。ボリューム容量監視のアラートルールの設定方法の詳細については、「Prometheus インスタンスのアラートルールを作成する」をご参照ください。