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

Container Service for Kubernetes:ディスク自動拡張ポリシーの設定

最終更新日:Jan 09, 2026

Container Service for Kubernetes (ACK) は、ディスクボリュームの自動拡張をサポートしています。Custom Resource Definition (CRD) を使用して、ディスク使用率が指定のしきい値を超えたときにディスクボリュームを自動的に拡張するポリシーを定義できます。このトピックでは、このポリシーの設定方法と自動拡張の検証方法について説明します。

適用範囲

このトピックでは、CRD を使用して自動拡張ポリシー (StorageAutoScalerPolicy) を作成し、ディスクボリュームを自動的に拡張します。この方法を使用できるシナリオは次のとおりです:

  • ディスクの永続ボリューム (PV) にバインドされた永続ボリューム要求 (PVC) が StorageClass に関連付けられており、その StorageClass で allowVolumeExpansion: true パラメーターが指定されていること。

    説明

    デフォルトでは、ACK が提供する StorageClass には allowVolumeExpansion: true パラメーターが指定されています。ご自身で作成する StorageClass にはこのパラメーターを指定する必要があります。StorageClass のプロパティは変更できません。StorageClass は作成のみ可能です。

  • ディスクがアタッチされているアプリケーション Pod が `Running` 状態であること。

  • ディスクが基本ディスクの場合、この方法でディスクボリュームを拡張することはできません。

  • クラスターの Kubernetes バージョンが 1.16 より前の場合、この方法でディスクボリュームを拡張することはできません。クラスターの Kubernetes バージョンをアップグレードする方法の詳細については、「クラスターのアップグレード」をご参照ください。

  • サイズ変更が可能なディスクのディスクボリュームのみを拡張できます。詳細については、「ResizeDisk」をご参照ください。

注意事項

スケールアウトは最大 2 分の間隔でトリガーされ、その後のディスク拡張には 1 分かかります。エラーを防ぐため、この 3 分間のプロセス中にディスクがいっぱいにならないようにしてください。

前提条件

開始する前に、`storage-operator` コンポーネントの状態を確認し、コンポーネントのバージョンに応じて必要であれば自動拡張機能を有効にしてください。

  1. コンポーネントがインストールされていることを確認

    `storage-operator` コンポーネントは、デフォルトでクラスターにインストールされています。クラスター管理ページのナビゲーションウィンドウで、[運用管理] > [コンポーネント] を選択します。[ストレージ] タブで、インストール状態とバージョンを確認します。コンポーネントをアップグレードするには、「コンポーネントのアップグレード」をご参照ください。
  2. コンポーネントのバージョンに基づいて自動拡張を有効化

    `storage-operator` コンポーネント内の `storage-auto-expander` モジュールが、ストレージリソースの自動拡張を担当します。

    • v1.33.1 以降のバージョンの場合:この機能はデフォルトで有効になっています。手動での操作は不要です。

    • v1.33.1 より前のバージョンの場合:`storage-operator` の ConfigMap を変更して、機能を手動で有効にします。

      コマンドの例:

      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\"}"}}'

ステップ 1:ディスク自動拡張ポリシーの設定

  1. StorageClass を確認し、拡張が有効になっていることを確認します。

    kubectl get sc
    説明

    ACK クラスターでデフォルトで作成される alicloud-disk-topology-alltype StorageClass の使用を推奨します。この StorageClass は、インスタンスタイプの制限や指定されたゾーンのディスク在庫不足によるディスク作成の失敗を避けるために、ディスクタイプを自動的に選択できます。StorageClass の作成方法の詳細については、「動的にプロビジョニングされたディスクボリュームの使用」をご参照ください。

    期待される出力は次のとおりです。ALLOWVOLUMEEXPANSION パラメーターが true に設定されており、ボリューム拡張が有効になっていることを示します。

    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

ステップ 2:ディスク自動拡張の検証

  1. StatefulSet を作成して自動スケーリングをテストできます。

    1. 次の内容を使用して、`StatefulSet.yaml` という名前のファイルを作成します。

      次の YAML は、25 GiB のディスクを /data パスにマウントした Pod を含む 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
        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. Pod のデプロイメント状態を表示します。

      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. マウントディレクトリにデータを書き込みます。

      次のサンプルコマンドは、22 GB のデータを /data/test1 に割り当て、ディスク使用率が 80% を超えるようにします。

      kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1
    2. 拡張イベントを表示します。

      kubectl get events

      ディスク使用率が 80% を超えると、ディスク容量は 25 GiB になります。これは action1 の条件を満たします。したがって、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. マウントディレクトリにデータを書き込み続け、クラウドディスクの使用率を再び 80% 超にして、2 回目のスケールアウトをトリガーできます。

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

      次のサンプルコマンドは、40 GB のデータを /data/test2 ディレクトリに割り当て、ディスク使用率を 80% 超にします。

      kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2
    2. 拡張イベントを表示します。

      kubectl get events

      75 GiB ディスクの使用率が 80% を超えると、action1 の条件が満たされます。したがって、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. マウントディレクトリにデータを書き込み続け、ディスク使用率を再び 80% 超にして、3 回目の拡張をトリガーします。

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

      次のサンプルコマンドは、20 GB のデータを /data/test3 ディレクトリに割り当て、ディスク使用率を 80% 超にします。

      kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3
    2. 拡張イベントを表示します。

      kubectl get events

      100 GiB ディスクの使用率が 80% を超えると、action2 の条件が満たされます。したがって、action2 が自動的に実行され、ディスクが 100 GiB から 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. マウントディレクトリにデータを書き込み続け、ディスク使用率を再び 80% 超にして、4 回目の拡張をトリガーします。

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

      次のサンプルコマンドは、50 GB のデータを /data/test4 ディレクトリに割り当て、ディスク使用率を 80% 超にします。

      kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4
    2. 拡張イベントを表示します。

      kubectl get events

      ディスク使用率が 80% を超えると、ディスク容量は 150 GiB となり、action2 の条件を満たします。したがって、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. マウントディレクトリにデータを書き込み続け、ディスク使用率を 80% 超にして、5 回目の拡張をトリガーします。

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

      次のサンプルコマンドは、50 GB のデータを /data/test5 ディレクトリに割り当て、ディスク使用率が 80% を超えるようにします。

      kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5
    2. 拡張イベントを表示します。

      kubectl get events

      この時点で、ディスク容量は 225 GiB です。ディスク使用率が 80% を超えると、action2 の条件が満たされます。したがって、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% を超えても、これらの操作のトリガー条件はもはや満たされないため、スケールアウトはトリガーされません。

関連ドキュメント

ディスクボリュームに関する問題が発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。