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

Container Service for Kubernetes:ACK で FlexVolume を使用してディスクボリュームを動的に拡張

最終更新日:Mar 26, 2026

ワークロードの増大に伴い、Pod にマウントされたディスクボリュームの容量が不足することがあります。Container Service for Kubernetes (ACK) は、Kubernetes 1.16 以降で FlexVolume を使用したオンラインでのディスクボリューム拡張をサポートしており、ほとんどの場合、Pod の再起動は不要です。本トピックでは、Pod が Running 状態のまま拡張する場合と、Pod を再起動した後に拡張する場合の両方のシナリオについて説明します。

前提条件

開始する前に、以下をご確認ください。

  • クラスター用の kubeconfig ファイルと、それに接続するように設定された kubectl。詳細については、「kubectl を使用して ACK クラスターに接続」をご参照ください。

  • storageClassName パラメーターを含む永続ボリューム要求 (PVC) を介してマウントされた、動的にプロビジョニングされた永続ボリューム (PV)。

  • バージョン v1.14.8.109-5f88ade-aliyun 以降の FlexVolume プラグイン。ACK コンソールのクラスターコンポーネントページでアップグレードを確認してください。

制限事項

ディスクボリュームを拡張する前に、以下の制約をご確認ください。

制約詳細
動的にプロビジョニングされた PV のみStorageClass を使用して動的にプロビジョニングされた PV のみがオンラインで拡張できます。インラインボリュームおよび基本ディスクをバックエンドとするボリュームは、サービスを中断せずに拡張することはできません。
最大ディスクサイズ2,000 GiB 以下のディスクは、サービスを中断せずに拡張できます。
Pod は Running 状態である必要があります拡張中、Pod は Running 状態を維持する必要があります。Running 状態でない場合は、代わりに再起動ベースのメソッドを使用してください。

StorageClass の要件

StorageClass には allowVolumeExpansion: true を設定する必要があります。ACK が作成した StorageClass では、これは自動的に設定されます。手動で作成した StorageClass の場合は、明示的に設定してください。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-available
provisioner: alicloud/disk
allowVolumeExpansion: true

データのバックアップ

拡張を行う前に、ディスクスナップショットを作成して、拡張プロセス中のエラーによるデータ損失を防ぎます。

RAM ロールへの ResizeDisk 権限の付与

ディスクボリュームを拡張する前に、クラスターの Master RAM ロールに ResizeDisk 権限を付与します。この権限がない場合、拡張リクエストは権限付与エラーを返します。

  1. ACK コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  3. 対象のクラスターを見つけ、[操作] 列の [詳細] をクリックします。

  4. 左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。

  5. [クラスターリソース] タブをクリックし、Master RAM ロールの横にあるハイパーリンクをクリックします。

  6. RAM コンソールで、ロールに ResizeDisk 権限を付与します。詳細については、「カスタムポリシーのドキュメントと説明を変更する」をご参照ください。

    resizedisk

FlexVolume を使用する ACK 専用クラスターまたは ACK マネージドクラスターの場合は、上記の手順 1~4 に従い、Master RAM ロールの横にあるハイパーリンクをクリックします。

Pod を再起動せずにディスクボリュームを拡張

このメソッドは、Pod が Running 状態の場合に使用します。ディスクはオンラインでサイズ変更され、サービスの中断はありません。

現在の状態の確認

  1. Pod が Running 状態であることを確認します。

    kubectl get pod

    期待される出力:

    web-0   1/1   Running   0   42s
  2. Pod 内の現在のディスク使用量を確認します。

    kubectl exec web-0 -- df /data

    期待される出力:

    Filesystem   1K-blocks    Used  Available  Use%  Mounted on
    /dev/vdb      20511312   45080   20449848    1%  /data

    現在のサイズが 20 GiB であることに注意してください。

  3. PVC がバインドされていることを確認し、現在の容量を確認します。

    kubectl get pvc

    期待される出力:

    NAME             STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS              AGE
    disk-ssd-web-0   Bound    d-wz9hpoifm43yn9zie6gl   20Gi       RWO            alicloud-disk-available   57s

ボリュームの拡張

  1. PVC にパッチを適用して、新しいストレージサイズをリクエストします。

    kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'

    拡張が完了するまで約 1 分待ちます。

拡張の確認

  1. PV が 30 GiB に更新されたことを確認します。

    kubectl get pv d-wz9hpoifm43yn9zie6gl

    期待される出力:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS              REASON   AGE
    d-wz9hpoifm43yn9zie6gl   30Gi       RWO            Delete           Bound    default/disk-ssd-web-0   alicloud-disk-available            5m23s
  2. PVC に新しい容量が反映されていることを確認します。

    kubectl get pvc
    kubectl get pv

    期待される出力:

    NAME             STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS              AGE
    disk-ssd-web-0   Bound    d-wz9hpoifm43yn9zie6gl   30Gi       RWO            alicloud-disk-available   5m10s
  3. Pod 内で新しいディスクサイズが認識されていることを確認します。

    kubectl exec web-0 -- df /data

    期待される出力:

    Filesystem   1K-blocks    Used  Available  Use%  Mounted on
    /dev/vdb      30832548   45036   30771128    1%  /data

    ディスクボリュームは、ダウンタイムなしで 20 GiB から 30 GiB に拡張されました。

Pod を再起動してディスクボリュームを拡張

このメソッドは、Pod を再起動するまでファイルシステムに新しいサイズが反映されない場合、または Pod が Running 状態でない場合に使用します。

現在の状態の確認

  1. Pod のステータスを確認し、現在のディスクサイズを記録します。

    kubectl get pod

    期待される出力:

    web-0   1/1   Running   0   42s
  2. Pod 内の現在のディスク使用量を確認します。

    kubectl exec web-0 -- df /data

    期待される出力:

    Filesystem   1K-blocks    Used  Available  Use%  Mounted on
    /dev/vdb      20511312   45080   20449848    1%  /data
  3. PVC と PV がバインドされていることを確認します。

    kubectl get pvc
    kubectl get pv

Pod の再スケジューリングの防止

  1. PV のゾーンラベルを見つけます。

    kubectl get pv d-wz9g2j5qbo37r2lamkg4 -oyaml | grep failure-domain.beta.kubernetes.io/zone

    期待される出力:

    failure-domain.beta.kubernetes.io/zone: cn-shenzhen-e
  2. Pod がスケジュールされないように、ゾーンラベルを無効な値に変更します。

    kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e-nozone --overwrite

    期待される出力:

    persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled
  3. Pod を削除して再起動をトリガーします。ゾーンラベルがどのノードとも一致しなくなったため、Pod は Pending 状態になります。

    kubectl delete pod web-0

    Pod が Pending 状態であることを確認します。

    kubectl get pod

    期待される出力:

    web-0   0/1   Pending   0   27s

ボリュームの拡張

  1. PVC にパッチを適用して、新しいストレージサイズをリクエストします。

    kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'

Pod の復元

  1. Pod が再度スケジュールされるように、元のゾーンラベルを復元します。

    kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e --overwrite

    期待される出力:

    persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled

    Pod が再起動し、拡張が完了するまで約 1 分待ちます。

拡張の確認

  1. Pod が Running 状態であることを確認します。

    kubectl get pod

    期待される出力:

    web-0   1/1   Running   0   3m23s
  2. PVC に新しい容量が反映されていることを確認します。

    kubectl get pvc

    期待される出力:

    disk-ssd-web-0   Bound   d-wz9g2j5qbo37r2lamkg4   30Gi   RWO   alicloud-disk-available   17m
  3. PV に新しい容量が反映されていることを確認します。

    kubectl get pv d-wz9g2j5qbo37r2lamkg4

    期待される出力:

    d-wz9g2j5qbo37r2lamkg4   30Gi   RWO   Delete   Bound   default/disk-ssd-web-0   alicloud-disk-available   17m
  4. Pod 内で新しいディスクサイズが認識されていることを確認します。

    kubectl exec web-0 -- df /data

    期待される出力:

    /dev/vdb   30832548   45036   30771128   1%   /data

    ディスクボリュームは 20 GiB から 30 GiB に拡張されました。

関連トピック