すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:QuotaPathボリュームの使用

最終更新日:Dec 11, 2024

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に追加する必要があります。
  1. StorageClassを作成します。
    1. 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ボリュームがマウントされるディレクトリの名前を指定します。
    2. 次のコマンドを実行してStorageClassを作成します。
      kubectl create -f alicloud-local-quota.yaml
  2. 永続ボリュームクレーム (PVC) を作成します。
    1. 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
    2. 次のコマンドを実行してPVCを作成します。
      kubectl create -f csi-quota.yaml
  3. 次のテンプレートを使用してアプリケーションを作成します。
    1. 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
    2. 次のコマンドを実行して、アプリケーションを作成します。
      kubectl create -f web-quota.yaml
  4. アプリケーションのステータスを照会します。
    次のコマンドを実行して、アプリケーションを実行するポッドを照会します。
    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
  5. 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