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

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

最終更新日:May 27, 2025

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

適用範囲

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

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

    説明

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

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

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

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

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

注意事項

2 つの拡張操作の最大間隔は 2 分です。ディスク拡張プロセスには 1 分かかります。3 分以内にディスク容量を使い果たさないようにしてください。

手順 1: storage-operator コンポーネントを設定して自動拡張を有効にする

  1. storage-operator コンポーネントがクラスタにインストールされており、コンポーネントのバージョンが v1.18.8.28-18cca7b-aliyun 以降であること。

    説明

    デフォルトでは、storage-operator コンポーネントはクラスタにインストールされています。クラスタ管理ページの左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。[ストレージ] タブで、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 クラスタでは、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. 次のテンプレートを使用して、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 は、拡張される PVC の容量を示します。単位: 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 テンプレートを使用して StatefulSet を作成します。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. ポッドのデプロイメントを表示します。

      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    pvc pvc-disk-nginx-0 の 25Gi から 75Gi への拡張を開始します。usedCapacityPercentage:90%、freeSize:2498MB。
      2m1s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    この PVC を拡張するために外部コントローラーを待機しています
      2m1s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています
      118s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    ノード上のボリュームのファイルシステムのサイズ変更が必要です
      116s   Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0    Pvc pvc-disk-nginx-0 は 25Gi から 75Gi に拡張中です。このアクション action2 はスキップされます。
    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. マウントされたディレクトリにデータを書き込みます。

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

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

      kubectl get events

      ディスク使用率が 80% を超えると、ディスク容量は 75 GiB になり、action1 の条件を満たします。そのため、action1 が自動的に実行され、容量が 50 GiB 増加します。action1 の limits パラメーターでは、最大ディスク容量が 100 GiB に指定されています。そのため、予期される出力に示すように、ディスク容量は 75 GiB から 100 GiB に拡張されます。イベントリストには、次のイベントが表示されます。

      7m4s   Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0      pvc pvc-disk-nginx-0 の 75Gi から 100Gi への拡張を開始します。usedCapacityPercentage:84%、freeSize:11927MB。
      7m4s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0      この PVC を拡張するために外部コントローラーを待機しています
      7m4s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0      外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています
      7m1s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0      ノード上のボリュームのファイルシステムのサイズ変更が必要です
      5m59s  Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0      Pvc pvc-disk-nginx-0 は 75Gi から 100Gi に拡張中です。このアクション action2 はスキップされます。
  4. マウントされたディレクトリにデータを書き込んで、ディスク使用率を 80% 以上に増やします。これにより、3 番目の拡張がトリガーされます。

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

      次のコマンド例は、40 GB のデータが /data/test2 ディレクトリに割り当てられ、ディスク使用率が 80% を超えることを示しています。

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

      kubectl get events

      ディスク使用率が 80% を超えると、ディスク容量は 100 GiB になり、action2 の条件を満たします。そのため、action2 が自動的に実行され、ディスクのサイズが 100 GiB から 150 GiB に変更されます。イベントリストには、次のイベントが表示されます。

      2m40s   Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0    pvc pvc-disk-nginx-0 の 100Gi から 150Gi への拡張を開始します。usedCapacityPercentage:83%、freeSize:16637MB。
      2m40s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    この PVC を拡張するために外部コントローラーを待機しています
      2m40s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています
      2m37s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    ノード上のボリュームのファイルシステムのサイズ変更が必要です
      109s    Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0    Pvc pvc-disk-nginx-0 は 100Gi から 150Gi に拡張中です。このアクション action2 はスキップされます。
  5. マウントされたディレクトリにデータを書き込んで、ディスク使用率を 80% 以上に増やします。これにより、4 番目の拡張がトリガーされます。

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

      次のコマンド例は、20 GB のデータが /data/test3 ディレクトリに割り当てられ、ディスク使用率が 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    pvc pvc-disk-nginx-0 の 150Gi から 225Gi への拡張を開始します。usedCapacityPercentage:87%、freeSize:19621MB。
      2m42s   Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    この PVC を拡張するために外部コントローラーを待機しています
      2m42s   Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています
      2m38s   Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    ノード上のボリュームのファイルシステムのサイズ変更が必要です
      114s    Warning   SkipExpand                   persistentvolumeclaim/pvc-disk-nginx-0    Pvc pvc-disk-nginx-0 は 150Gi から 225Gi に拡張中です。このアクション action2 はスキップされます。
  6. マウントされたディレクトリにデータを書き込んで、ディスク使用率を 80% 以上に増やします。これにより、5 番目の拡張がトリガーされます。

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

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

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

      kubectl get events

      ディスク使用率が 80% を超えると、ディスク容量は 225 GiB になり、action2 の条件を満たします。そのため、action2 が自動的に実行され、現在の容量が 50% 増加します。action2 の limits パラメーターでは、最大ディスク容量が 300 GiB に指定されています。そのため、予期される出力に示すように、ディスク容量は 225 GiB から 300 GiB に拡張されます。イベントリストには、次のイベントが表示されます。

      17m     Warning   StartExpand                  persistentvolumeclaim/pvc-disk-nginx-0    pvc pvc-disk-nginx-0 の 225Gi から 300Gi への拡張を開始します。usedCapacityPercentage:82%、freeSize:40351MB。
      17m     Normal    ExternalExpanding            persistentvolumeclaim/pvc-disk-nginx-0    この PVC を拡張するために外部コントローラーを待機しています
      17m     Normal    Resizing                     persistentvolumeclaim/pvc-disk-nginx-0    外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています
      17m     Normal    FileSystemResizeRequired     persistentvolumeclaim/pvc-disk-nginx-0    ノード上のボリュームのファイルシステムのサイズ変更が必要です

      この時点で、action1 と action2 の両方が制限までトリガーされています。ディスク容量が再び 80% を超えると、2 つのアクションの条件が満たされなくなり、拡張操作はトリガーされなくなります。

関連情報

ディスク ボリュームの使用時に発生する可能性のある問題の詳細については、「ディスク ボリュームに関する FAQ」をご参照ください。