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

Container Service for Kubernetes:Configure automatic disk expansion

最終更新日:Mar 07, 2026

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

適用範囲

このトピックでは、CRD を使用して、ディスクボリュームを自動的に拡張する自動拡張ポリシー (StorageAutoScalerPolicy) を作成します。次のセクションでは、このメソッドを使用できるシナリオについて説明します。

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

    説明

    デフォルトでは、ACK が提供する StorageClass には allowVolumeExpansion: true パラメーターが指定されています。お客様が作成する 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 クラスターでは、デフォルトの StorageClass である alicloud-disk-topology-alltype を使用することを推奨します。この 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 が一致した場合、それが実行され 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 は、1 つの Pod を持つ StatefulSet を作成し、25 GiB のクラウドディスクを /data にマウントします。

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

      次のコマンドは、/data/test1 に 22 GB を割り当て、使用率を 80% 以上に引き上げます。

      kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1
    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

      期待される出力は、ディスクが 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. マウントパスにデータを書き込みます。

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

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

      kubectl get events

      75 GiB のクラウドディスクの使用率が 80% を超えると、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. マウントパスにデータを書き込みます。

      次のコマンド例では、/data/test3 に 20 GB のデータを割り当て、クラウドディスクの使用率が 80% を超えるようにします。

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

      kubectl get events

      100 GiB のクラウドディスクの容量使用率が 80% を超えると、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. マウントパスにデータを書き込みます。

      次のコマンドは、/data/test4 に 50 GB のデータを割り当て、クラウドディスクの容量使用率が 80% を超えるようにします。

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

      kubectl get events

      150 GiB で使用率が 80% を超えると、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. マウントパスにデータを書き込みます。

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

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

      kubectl get events

      225 GiB で使用率が 80% を超えると、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% を超えても、これらのアクションをトリガーする条件はもはや満たされないため、スケールアウトはトリガーされません。

参考資料

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