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

Container Service for Kubernetes:ディスク自動拡張ポリシーを構成して自動拡張を実現する

最終更新日:Feb 26, 2025

ACK では、ディスク永続ボリュームの自動拡張が可能です。 CRD を使用してディスク自動拡張ポリシーを定義することで、永続ボリュームの使用率が指定されたしきい値を超えた場合に拡張プロセスを自動化できます。 このガイドでは、ディスク自動拡張ポリシーの構成と、ディスク永続ボリュームの自動拡張の検証について詳しく説明します。

適用範囲

このガイドでは、CRD を使用した自動拡張ポリシー (StorageAutoScalerPolicy) の作成について説明し、ディスク永続ボリュームの自動拡張を容易にします。 適用可能なシナリオは次のとおりです。

  • ディスクにバインドされた PV に関連付けられた PVC は、StorageClass にリンクされている必要があり、StorageClass に allowVolumeExpansion: true が構成されている必要があります。

    説明

    ACK によってデフォルトで提供される StorageClass は、allowVolumeExpansion: true で構成されています。 StorageClass のプロパティは作成後に変更できないため、自分で作成する StorageClass を構成する必要があります。代わりに新しいものを作成する必要があります。

  • ディスクがマウントされているアプリケーション ポッドは、実行中状態である必要があります。

  • このメソッドは、基本ディスクの拡張をサポートしていません。

  • クラスタのバージョンが 1.16 より前の場合、拡張はサポートされていません。 クラスタをアップグレードするには、「クラスタのアップグレード」をご参照ください。

  • このメソッドは、ディスクのサイズ変更機能を利用します。 詳細については、「ResizeDisk」をご参照ください。

注意事項

拡張がトリガーされる最大間隔は 2 分で、ディスク拡張プロセスには約 1 分かかります。 3 分以内にディスクがいっぱいにならないようにしてください。

手順 1:storage-operator ウィジェットを構成して自動拡張を有効にする

  1. storage-operator ウィジェットがクラスタにインストールされており、そのバージョンが v1.18.8.28-18cca7b-aliyun 以降であることを確認します。

    説明

    storage-operator ウィジェットは通常、クラスタにプリインストールされています。 インストール ステータスとバージョンを確認するには、クラスタ管理ページの左側のナビゲーションウィンドウで [操作管理] > [ウィジェット管理] に移動し、[ストレージ] タブを選択します。 詳細な手順については、「Storage-Operator ウィジェットの管理」をご参照ください。

  2. クラスタに接続し、次のコマンドを実行して storage-operator の ConfigMap を変更し、自動拡張機能を有効にします。

    storage-operator ウィジェット内の storage-auto-expander は、ストレージ リソースの自動拡張を担当します。 例:

    kubectl patch configmap/storage-operator \
      -n kube-system \
      --type merge \
      -p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'

手順 2:ディスク自動拡張ポリシーを構成する

  1. StorageClass を調べて、拡張が許可されていることを確認します。

    kubectl get sc
    説明

    ACK のデフォルト StorageClass である alicloud-disk-topology-alltype は、インスタンスタイプの制限やゾーンのディスク在庫不足による作成の問題を回避するために適切なディスクタイプを自動的に選択するため、推奨されます。 StorageClass の作成手順については、「動的ディスク永続ボリュームの使用」をご参照ください。

    期待される出力は、ALLOWVOLUMEEXPANSIONtrue に設定されていることを示し、拡張が有効になっていることを確認します。

    NAME                                    PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-disk-efficiency                diskplugin.csi.alibabacloud.com   Delete          Immediate              true                   26h
    alicloud-disk-essd                      diskplugin.csi.alibabacloud.com   Delete          Immediate              true                   26h
    alicloud-disk-ssd                       diskplugin.csi.alibabacloud.com   Delete          Immediate              true                   26h
    alicloud-disk-topology-alltype          diskplugin.csi.alibabacloud.com   Delete          WaitForFirstConsumer   true                   26h
  2. CRD を使用して自動拡張ポリシーを確立します。

    1. 次の YAML コンテンツを含む StorageAutoScalerPolicy.yaml という名前のファイルを作成します。

      apiVersion: storage.alibabacloud.com/v1alpha1
      kind: StorageAutoScalerPolicy
      metadata:
        name: hybrid-expand-policy
      spec:
        pvcSelector:
          matchLabels:
            app: nginx
        namespaces:
          - default
          - nginx
        conditions:
          - name: condition1
            key: volume-capacity-used-percentage
            operator: Gt
            values:
              - "80"
        actions:
          - name: action1
            type: volume-expand
            params:
              scale: 50Gi
              limits: 100Gi
          - name: action2
            type: volume-expand
            params:
              scale: 50%
              limits: 300Gi

      アプリケーションと PVC の要件に合わせて構成を調整します。 パラメータは次の表で説明されています。

      パラメータ

      説明

      pvcSelector

      ラベルを使用してターゲット PVC を選択します。 この例では、app: nginx です。

      namespaces

      ターゲット PVC の名前空間を指定します。 複数の名前空間が指定されている場合、名前空間間の論理演算子は OR です。 構成されていない場合、デフォルトは default です。

      conditions

      ルールをトリガーするための条件。 複数の条件が指定されている場合、条件間の論理演算子は AND です。 各条件には、次のパラメータが含まれます。

      • name: 条件の名前。ユーザー定義です。

      • key: メトリックのタイプを定義します。 volume-capacity-used-percentage は、使用されている容量の割合を示します。

      • operator: ルールを定義します。 Gt (より大きい)、Lt (より小さい)、Eq (等しい)、または Ne (等しくない) を含みます。 大文字と小文字は区別されません。

      • values: ルールの具体的な値。

      この例は、PVC 容量の使用率が 80% を超えると、アクションがトリガーされることを示しています。

      actions

      条件が満たされたときに実行される操作。 複数の操作を指定できます。 構成には、次のパラメータが含まれます。

      • name: アクションの名前。ユーザー定義です。

      • type: 操作のタイプを示します。 現在、volume-expand のみがサポートされており、これは拡張を示します。

      • params: 操作パラメータを示します。 scale は拡張のサイズを GiB 単位またはパーセンテージで示します。 limits は、このアクションにおける PVC の最大制限を示します。

      複数のアクションが指定されている場合、条件を満たす最初のアクションが実行され、残りのアクションはスキップされます。

      たとえば、この例の action1 が条件を満たしている場合、action1 が実行され、action2 は実行されません。 action1 が条件を満たしていない場合、action2 が実行されます。

      • Action1 は、ディスク容量が 100 GiB 未満の場合、拡張がトリガーされるたびに 50 GiB が追加され、最大 100 GiB まで拡張されることを示します。

      • Action2 は、ディスク容量が 100 GiB 以上 300 GiB 未満の場合、各拡張で現在の容量が 50% 増加することを示します。つまり、各拡張後の合計容量は拡張前の容量の 150% になり、最大 300 GiB まで拡張されます。

    2. 以下のコマンドを実行して、自動拡張ポリシーを適用します。

      kubectl create -f StorageAutoScalerPolicy.yaml

手順 3:ディスクの自動拡張を確認する

  1. StatefulSet を設定して、自動拡張機能をテストします。

    1. 以下に示すコンテンツで StatefulSet.yaml ファイルを生成します。

      この YAML は、/data パスに 25 GiB のディスクをマウントするポッドを含む StatefulSet を作成します。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        serviceName: 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
              ports:
              - containerPort: 80
              volumeMounts:
              - name: pvc-disk
                mountPath: /data
            volumes:
              - name: pvc-disk
                persistentVolumeClaim:
                  claimName: disk-pvc
              ports:
              - containerPort: 80
                name: nginx
              volumeMounts:
              - name: pvc-disk
                mountPath: /data
        volumeClaimTemplates:
          - metadata:
              name: pvc-disk
              labels:
                app: nginx
            spec:
              accessModes: [ "ReadWriteOnce" ]
              storageClassName: "alicloud-disk-topology-alltype"
              resources:
                requests:
                  storage: 25Gi    
    2. 次のコマンドを使用して StatefulSet をデプロイします。

      kubectl create -f StatefulSet.yaml
    3. ポッドのデプロイ プロセスを監視します。

      kubectl get pod -l app=nginx

      予想される出力:

      NAME      READY   STATUS    RESTARTS   AGE
      nginx-0   1/1     Running   0          99s
    4. ディスクの容量を確認します。

      kubectl exec -it nginx-0 -- df -h /data

      期待される出力:

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vdb         25G   24K   25G   1% /data
  2. マウント ディレクトリにデータを入力して、最初の拡張のためにディスク使用率を 80% 以上にします。

    1. マウント ディレクトリにデータを追加します。

      たとえば、/data/test1 に 22 GB を書き込んで、ディスク使用率を 80% 以上にします。

      kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test1 bs=1G count=22
    2. 拡張イベントを確認します。

      kubectl get events

      ディスク使用率が 80% を超え、容量が 25 GiB の場合、action1 の条件が満たされ、50 GiB の自動拡張がトリガーされます。 イベント リストには、関連するイベントが表示されます。

      2m1s   Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0    Start to expand of pvc pvc-disk-nginx-0 from 25Gi to 75Gi, usedCapacityPercentage:90%, freeSize:2498MB.
      2m1s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    waiting for an external controller to expand this PVC
      2m1s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    External resizer is resizing volume d-uf66kkzltnq6xgi9****
      118s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    Require file system resize of volume on node
      116s   Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0    Pvc pvc-disk-nginx-0 is expanding status from 25Gi to 75Gi, this action action2 will skip.
    3. PVC の容量を調べます。

      kubectl get pvc

      予想される結果は次のとおりです。action1 の後、ディスクは 25 GiB から 75 GiB に増加しました。

      NAME               STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     VOLUMEATTRIBUTESCLASS   AGE
      pvc-disk-nginx-0   Bound    d-uf66kkzltnq6xgi9****   75Gi       RWO            alicloud-disk-topology-alltype   <unset>                 26m
  3. マウント ディレクトリにデータを追加し続けて、2 回目の拡張のためにディスク使用率を 80% 以上にします。

    1. マウント ディレクトリにデータを追加します。

      たとえば、/data/test2 に 40 GB を書き込んで、ディスク使用率を 80% 以上にします。

      kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test2 bs=1G count=40
    2. 拡張イベントを確認します。

      kubectl get events

      ディスク使用率が再び 80% を超え、容量が 75 GiB になったため、action1 がもう一度トリガーされ、50 GiB が追加されます。 ただし、action1 の制限は 100 GiB であるため、ディスクは 75 GiB から 100 GiB にしか拡張できません。 イベント リストには、関連するイベントが表示されます。

      7m4s   Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0      Start to expand of pvc pvc-disk-nginx-0 from 75Gi to 100Gi, usedCapacityPercentage:84%, freeSize:11927MB.
      7m4s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0      waiting for an external controller to expand this PVC
      7m4s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0      External resizer is resizing volume d-uf66kkzltnq6xgi9****
      7m1s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0      Require file system resize of volume on node
      5m59s  Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0      Pvc pvc-disk-nginx-0 is expanding status from 75Gi to 100Gi, this action action2 will skip.
  4. マウント ディレクトリにデータを書き込み続けて、3 回目の拡張のためにディスク使用率を 80% 以上にします。

    1. マウント ディレクトリにデータを追加します。

      たとえば、/data/test3 に 20 GB を書き込んで、ディスク使用率を 80% 以上にします。

      kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test3 bs=1G count=20
    2. 拡張イベントを確認します。

      kubectl get events

      ディスク使用率が 80% を超え、容量が 100 GiB であるため、action2 の基準が満たされ、150 GiB に拡張されます。 イベント リストには、これらの関連イベントが反映されます。

      2m40s   Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0    Start to expand of pvc pvc-disk-nginx-0 from 100Gi to 150Gi, usedCapacityPercentage:83%, freeSize:16637MB.
      2m40s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    waiting for an external controller to expand this PVC
      2m40s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    External resizer is resizing volume d-uf66kkzltnq6xgi9****
      2m37s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    Require file system resize of volume on node
      109s    Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0    Pvc pvc-disk-nginx-0 is expanding status from 100Gi to 150Gi, this action action2 will skip.
  5. マウント ディレクトリにデータを追加し続けて、4 回目の拡張のためにディスク使用率を 80% 以上にします。

    1. マウント ディレクトリにデータを書き込みます。

      たとえば、/data/test4 に 50 GB を書き込んで、ディスク使用率を 80% 以上にします。

      kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test4 bs=1G count=50
    2. 拡張イベントを確認します。

      kubectl get events

      ディスク使用率が再び 80% を超え、容量が 150 GiB であるため、action2 がトリガーされ、容量が 50% 増加します。 この拡張により、ディスクは 150 GiB から 225 GiB になります。 イベント リストには、これらの関連イベントが記録されます。

      2m42s   Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0    Start to expand of pvc pvc-disk-nginx-0 from 150Gi to 225Gi, usedCapacityPercentage:87%, freeSize:19621MB.
      2m42s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    waiting for an external controller to expand this PVC
      2m42s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    External resizer is resizing volume d-uf66kkzltnq6xgi9****
      2m38s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    Require file system resize of volume on node
      114s    Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0    Pvc pvc-disk-nginx-0 is expanding status from 150Gi to 225Gi, this action action2 will skip.
  6. マウント ディレクトリにデータを追加し続けて、5 回目の拡張のためにディスク使用率を 80% 以上にします。

    1. マウント ディレクトリにデータを書き込みます。

      たとえば、/data/test5 に 50 GB を書き込んで、ディスク使用率を 80% 以上にします。

      kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test5 bs=1G count=50
    2. 拡張イベントを確認します。

      kubectl get events

      ディスク容量が 80% を超え、225 GiB に達したため、action2 の条件が再び満たされ、さらに 50% 増加します。 ただし、action2 の制限は 300 GiB であるため、ディスクは 225 GiB から 300 GiB にしか拡張できません。 イベント リストには、対応するイベントが表示されます。

      17m     Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0    Start to expand of pvc pvc-disk-nginx-0 from 225Gi to 300Gi, usedCapacityPercentage:82%, freeSize:40351MB.
      17m     Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    waiting for an external controller to expand this PVC
      17m     Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    External resizer is resizing volume d-uf66kkzltnq6xgi9****
      17m     Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    Require file system resize of volume on node

      この時点で、action1 と action2 の両方が実行されました。 ディスク容量が再び 80% を超えると、どちらの条件も満たされなくなり、それ以上の拡張は行われません。

関連情報

ディスク永続ボリュームに関連する問題については、「ディスク永続ボリュームに関するよくある質問」をご参照ください。