Ext4ファイルシステムなど、ローカルディスク上のファイルシステムのプロジェクトクォータ機能を使用できます。 プロジェクトクォータ機能を使用すると、ディレクトリレベルでディスククォータを制御できます。 CSIプラグインを使用して、QuotaPathボリュームの分割、クォータ制限、マウントなど、QuotaPathボリュームのライフサイクルを管理することもできます。 このトピックでは、QuotaPathボリュームの使用方法について説明します。
前提条件
論理ボリューム (LV) 用のContainer Storage Interface (CSI) プラグインがデプロイされています。 詳細については、「手順2: CSI-PluginおよびCSI-Provisionerのデプロイ」をご参照ください。QuotaPathボリューム、hostPathボリューム、およびLVの違い
ポッドがノードのストレージを使用できるようにするには、hostPathボリューム、LV、およびQuotaPathボリュームを使用できます。 ただし、各タイプのボリュームには次の制限があります。
- hostPathボリュームは、複数のサブディレクトリに分割できるディレクトリを共有します。 サブディレクトリは、同じディスクのスペースとI/Oを共有します。
- Logical Volume Manager (LVM) は、ディスクを仮想化し、ディスクを複数のボリュームに分割します。 各ボリュームには独立したストレージクォータがあります。
- QuotaPathボリュームは、ファイルシステムのクォータ機能を使用します。 この機能により、ディレクトリを複数のディレクトリに分割できます。 各ディレクトリには、独立したストレージクォータがあります。
特徴
- QuotaPathボリュームのライフサイクル管理: 自動作成、削除、マウント、およびマウント解除。
- QuotaPathボリュームの拡張。
- QuotaPathボリュームがマウントされているルートディレクトリの自動操作とメンテナンス。 これにより、ノードのローカルストレージを管理できます。
- QuotaPathボリュームを使用するクラスターのストレージ使用状況のモニタリング。
注意事項
- QuotaPathボリュームは、データの高可用性を保証する必要があるシナリオには適用できません。
- ルートディレクトリの自動操作とメンテナンス、およびQuotaPathボリュームを使用するクラスターのストレージ使用状況の監視の機能は、現在のバージョンではサポートされていません。
- 特権モードでrootユーザーとしてポッドを実行すると、Ext4ファイルシステムなどのローカルディスク上のファイルシステムのプロジェクトクォータ機能は有効になりません。
例
CSI-Provisionerを使用して永続ボリューム (PV) を作成する場合は、次の制限事項に注意してください。
- StorageClassでrootPathの名前を指定する必要があります。
- 指定したノードにPVを作成する場合は、volume.kubernetes.io/selected-node: nodeNameラベルを関連するPVCに追加する必要があります。
- StorageClassを作成します。
- alicloud-local-quota.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-local-quota parameters: volumeType: QuotaPath rootPath: /mnt/quota provisioner: localplugin.csi.alibabacloud.com reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer
パラメーター 説明 volumeType ボリュームのタイプ。 この例では、ボリュームタイプはQuotaPathに設定されています。 ルートパス QuotaPathボリュームがマウントされるディレクトリの名前を指定します。 - 次のコマンドを実行してStorageClassを作成します。
kubectl create -f alicloud-local-quota.yaml
- alicloud-local-quota.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
- 永続ボリュームクレーム (PVC) を作成します。
- csi-quota.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
デフォルトでは、CSIプラグインはQuotaPathボリュームのルートディレクトリとして /mn t/quotapath.name spacex.xを使用します。 すべてのPVは、このルートディレクトリのサブディレクトリにマウントされます。
次の注釈をPVCに追加して、QuotaPathボリュームの親ディレクトリを定義できます。volume.kubernetes.io/selected-storage: /mnt/xxx。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-quota spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: alicloud-local-quota
- 次のコマンドを実行してPVCを作成します。
kubectl create -f csi-quota.yaml
- csi-quota.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
- 次のテンプレートを使用してアプリケーションを作成します。
- web-quota.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web-quota spec: selector: matchLabels: app: nginx serviceName: "nginx" template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-ssd mountPath: /data volumes: - name: "disk-ssd" persistentVolumeClaim: claimName: csi-quota
- 次のコマンドを実行して、アプリケーションを作成します。
kubectl create -f web-quota.yaml
- web-quota.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
- アプリケーションのステータスを照会します。 次のコマンドを実行して、アプリケーションを実行するポッドを照会します。
kubectl get pod |grep quota
期待される出力:NAME READY STATUS RESTARTS AGE web-quota-0 1/1 Running 0 16s
次のコマンドを実行して、PVC情報を照会します。kubectl get pvc
期待される出力:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-quota Bound local-f4b129a5-**** 2Gi RWO alicloud-local-quota 48s
次のコマンドを実行して、PV情報を照会します。kubectl get pv |grep quota
期待される出力:NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE local-f4b129a5-**** 2Gi RWO Delete Bound default/csi-quota alicloud-local-quota 66s
次のコマンドを実行して、ポッドの /dataディレクトリにマウントされているLVに関するストレージ情報を照会します。kubectl exec -ti web-quota-0 sh df |grep data
期待される出力:Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdd 2097152 4 2097148 1% /data
次のコマンドを実行して、/dataディレクトリ内のすべてのディレクトリを照会します。ls /data
期待される出力:lost+found
次のコマンドを実行して、/dataディレクトリにtestという名前のディレクトリを作成します。touch /data/test ls /data
期待される出力:lost+found test
- QuotaPathボリュームを展開します。 次のコマンドを実行して、PVC情報を照会します。
kubectl get pvc
期待される出力:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-quota Bound local-f4b129a5-**** 2Gi RWO alicloud-local-quota 42s
次のコマンドを実行して、PVCを3 GiBに展開します。kubectl patch pvc csi-quota -p '{"spec":{"resources":{"requests":{"storage":"3Gi"}}}}'
期待される出力:persistentvolumeclaim/csi-quota patched
次のコマンドを実行して、PVC情報を照会します。kubectl get pvc
期待される出力:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-quota Bound local-f4b129a5-**** 3Gi RWO alicloud-local-quota 4m30s
次のコマンドを実行して、QuotaPathボリュームが3 GiBに拡張されているかどうかを確認します。kubectl exec -ti web-quota-0 sh df |grep data
期待される出力:Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdd 3145728 4 3145724 1% /data