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専用クラスター
ACKコンソールにログインします。
左側のナビゲーションウィンドウで、クラスター.
On theクラスターページをクリックします。詳細で、アクション管理するクラスターの列です。
左側のナビゲーションウィンドウで、クラスター情報.
をクリックし、クラスターリソースタブをクリックし、次のハイパーリンクをクリックします。マスターRAMロール.
RAMコンソールで、RAMロールにResizeDisk権限を付与します。 権限を付与する方法の詳細については、「カスタムポリシーのドキュメントと説明の変更」をご参照ください。
FlexVolumeまたはACK管理クラスターを使用するACK専用クラスター
上記の手順1〜手順4を実行し、マスターRAMロールの横にあるハイパーリンクをクリックします。
ポッドを再起動せずにディスクボリュームを拡張する
クラスターの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
[使用状況] セクションに記載されている要件が満たされていることを確認します。 要件が満たされたら、次のコマンドを実行してボリュームを拡張します。
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
ポッドを再起動せずにディスクボリュームを拡張するには、上記のコマンドを実行するだけで済みます。
ディスクボリュームがマウントされているポッドを再起動してからディスクボリュームを展開する
コマンドラインツールを使用して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
次のコマンドを実行して、PVに関するスケジューリング情報を表示します。
kubectl get pv d-wz9g2j5qbo37r2lamkg4 -oyaml | grep failure-domain.beta.kubernetes.io/zone failure-domain.beta.kubernetes.io/zone: cn-shenzhen-e
スケジュールされたリソースのラベルのゾーンフィールドの値を置き換えます。 そのため、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
ポッドを再起動します。
ポッドのスケジューリング設定が変更されました。 したがって、ポッドは一時的にPending状態のままである。
次のコマンドを実行して、ポッドを削除します。
kubectl delete pod web-0
次のコマンドを実行して、ポッドに関する情報を照会します。
kubectl get pod
期待される出力:
web-0 0/1 Pending 0 27s
次のコマンドを実行して、ボリュームを拡張します。
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
ラベルのゾーンフィールドを以前の設定に変更して、ポッドを再起動します。 この例では、値を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に拡張されたことを示しています。