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

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

最終更新日:Oct 28, 2024

Kubernetes 1.16では、ディスクボリュームを動的に拡張する機能はパブリックプレビュー中です。 Container Service for Kubernetes (ACK) では、Kubernetes 1.16以降でFlexVolumeを使用してディスクボリュームを動的に拡張できます。 このトピックでは、FlexVolumeを使用してディスクボリュームを動的に拡張する方法について説明します。

使用上の注意

  • 制限事項

    ボリューム拡張のセキュリティを確保するために、自動バックアップおよびディスクボリュームの拡張機能が無効になっている場合は、2,000 GiB以下のディスクボリュームのみをサービス中断なしで拡張できます。 この機能を有効にすると、サービスを中断することなく32 TiB以下のディスクボリュームを拡張できます。

  • データバックアップ

    ディスクボリュームを拡張する前に、ディスクボリュームの拡張中にデータの問題が発生した場合に備えて、ディスクのスナップショットを作成します。

  • シナリオ

    • 動的にプロビジョニングされた永続ボリューム (PV) のみを拡張でき、サービスを中断することなく、StorageClassNameパラメーターを含む永続ボリュームクレーム (PVC) を使用してマウントされます。

    • インラインタイプのディスクボリュームは拡張できません。 このタイプのディスクボリュームは、PVおよびPVCを使用して作成されません。

    • 基本ディスクに関連付けられているボリュームは、サービスを中断せずに拡張できません。

    • StorageClassにAllowVolumeExpansion: Trueを指定します。 AllowVolumeExpansionパラメーターは、ACKによって作成されたStorageClassesに対して自動的にTrueに設定されます。 手動で作成されるStorageClassesの場合、AllowVolumeExpansionパラメーターをTrueに手動で設定する必要があります。

    • ボリューム拡張中、ポッドは実行中の状態のままでなければなりません。

  • プラグインのバージョン

    CSIプラグインが最新バージョンに更新されていることを確認します。

クラスタのリソースアクセス管理 (RAM) ロールにResizeDisk権限を付与する

サービスを中断せずにディスクボリュームを拡張する前に、クラスターのRAMロールResizeDisk権限を付与する必要があります。 次の手順を実行して、クラスタタイプと使用するボリュームプラグインに基づいてResizeDisk権限を付与します。

CSIプラグインを使用するACK専用クラスター

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

  2. 左側のナビゲーションウィンドウで、クラスター.

  3. On theクラスターページをクリックします。詳細で、アクション管理するクラスターの列です。

  4. 左側のナビゲーションウィンドウで、クラスター情報.

  5. をクリックし、クラスターリソースタブをクリックし、次のハイパーリンクをクリックします。マスターRAMロール.

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

FlexVolumeまたはACK管理クラスターを使用するACK専用クラスター

上記の手順1〜手順4を実行し、マスターRAMロールの横にあるハイパーリンクをクリックします。

ポッドを再起動せずにディスクボリュームを拡張する

  1. クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続します

    この例では、管理するポッドは次の状態です。

    次のコマンドを実行して、ポッドに関する情報を照会します。

    kubectl get pod

    期待される出力:

    web-0         1/1     Running   0          42s

    次のコマンドを実行して、ポッドのマウントの詳細を表示します。

    kubectl exec web-0 -- df /data

    期待される出力:

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

    次のコマンドを実行して、永続ボリュームクレーム (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

    次のコマンドを実行して、永続ボリューム (PV) に関する情報を照会します。

    kubectl get pv

    期待される出力:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                    STORAGECLASS              REASON   AGE
    d-wz9hpoifm43yn9zie6gl   20Gi       RWO            Delete           Bound      default/disk-ssd-web-0   alicloud-disk-available            65s
  2. [使用状況] セクションに記載されている要件が満たされていることを確認します。 要件が満たされたら、次のコマンドを実行してボリュームを拡張します。

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

    1分待ってから、次の手順を実行して、ボリュームが拡張されているかどうかを確認します。

    次のコマンドを実行して、PVに関する情報を照会します。

    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

    次のコマンドを実行して、PVCに関する情報を照会します。

    kubectl get pvc

    期待される出力:

    NAME             STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS              AGE
    disk-ssd-web-0   Bound    d-wz9hpoifm43yn9zie6gl   30Gi       RWO            alicloud-disk-available   5m10s

    次のコマンドを実行して、ポッドのマウントの詳細を表示します。

    kubectl exec web-0 -- df /data

    期待される出力:

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

    ポッドを再起動せずにディスクボリュームを拡張するには、上記のコマンドを実行するだけで済みます。

ディスクボリュームがマウントされているポッドを再起動してからディスクボリュームを展開する

  1. コマンドラインツールを使用してACKクラスターに接続します。 詳細については、「手順2: クラスター資格情報の種類の選択」をご参照ください。

    この例では、管理するポッドは次の状態です。

    次のコマンドを実行してポッド情報を照会します。

    kubectl get pod

    期待される出力:

    <YOUR-POD-NAME>         1/1     Running   0          42s

    次のコマンドを実行して、ポッドにマウントされているボリュームを照会します。

    kubectl exec <YOUR-POD-NAME>  -- df /data

    期待される出力:

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

    次のコマンドを実行して、PVC情報を照会します。

    kubectl get pvc

    期待される出力:

    NAME              STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
    <your-PVC-name>   Bound    d-wz9hpoifm43yn9zi****   20Gi       RWO            alicloud-disk-topology-alltype   57s

    次のコマンドを実行して、PV情報を照会します。

    kubectl get pv

    期待される出力:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                     STORAGECLASS                     REASON   AGE
    d-wz9hpoifm43yn9zi****   20Gi       RWO            Delete           Bound      default/<your-PVC-name>   alicloud-disk-topology-alltype            65s
  2. 次のコマンドを実行して、PVに関するスケジューリング情報を表示します。

    kubectl get pv d-wz9g2j5qbo37r2lamkg4  -oyaml | grep failure-domain.beta.kubernetes.io/zone
        failure-domain.beta.kubernetes.io/zone: cn-shenzhen-e
  3. スケジュールされたリソースのラベルのゾーンフィールドの値を置き換えます。 そのため、PVが実装されているポッドをスケジュールできません。

    たとえば、ラベルのゾーンフィールドの値をcn-shenzhen-eからcn-shenzhen-e-nozoneに変更できます。

    kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e-nozone --overwrite
    persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled
  4. ポッドを再起動します。

    ポッドのスケジューリング設定が変更されました。 したがって、ポッドは一時的にPending状態のままである。

    次のコマンドを実行して、ポッドを削除します。

    kubectl delete pod web-0

    次のコマンドを実行して、ポッドに関する情報を照会します。

    kubectl get pod

    期待される出力:

    web-0   0/1     Pending   0          27s
  5. 次のコマンドを実行して、ボリュームを拡張します。

    kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
  6. ラベルのゾーンフィールドを以前の設定に変更して、ポッドを再起動します。 この例では、値をcn-shenzhen-e-nozoneからcn-shenzhen-eに変更します。

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

    1分待ってから、次の手順を実行して、ボリュームが拡張されているかどうかを確認します。

    次のコマンドを実行して、ポッドに関する情報を照会します。

    kubectl get pod

    期待される出力:

    web-0   1/1     Running   0          3m23s

    次のコマンドを実行して、PVCに関する情報を照会します。

    kubectl get pvc

    期待される出力:

    disk-ssd-web-0   Bound    d-wz9g2j5qbo37r2lamkg4   30Gi       RWO            alicloud-disk-available   17m

    次のコマンドを実行して、PVに関する情報を照会します。

    kubectl get pv d-wz9g2j5qbo37r2lamkg4

    期待される出力:

    d-wz9g2j5qbo37r2lamkg4   30Gi       RWO            Delete           Bound    default/disk-ssd-web-0   alicloud-disk-available            17m

    次のコマンドを実行して、ポッドのマウントの詳細を表示します。

    kubectl exec web-0 -- df /data

    期待される出力:

    /dev/vdb        30832548 45036  30771128   1% /data

    結果は、ディスクボリュームが20 GiBから30 GiBに拡張されたことを示しています。