このドキュメントでは、アプリケーションを中断することなく、Google Kubernetes Engine(GKE)でステートフル ワークロードの Managed Lustre ボリュームのストレージ容量を動的に増やす方法について説明します。
たとえば、長時間実行される AI/ML トレーニング ジョブに動的で予測不可能なストレージ要件がある場合は、Managed Lustre ボリュームの拡張を有効にして、既存の Managed Lustre PersistentVolume(PV)のストレージ容量を増やします。
このドキュメントは、GKE でステートフル ワークロードのストレージを管理するプラットフォーム管理者とオペレーター、DevOps、ストレージ管理者、ML エンジニアを対象としています。
ボリュームを拡張すると、標準の Google Cloud Managed Lustre の料金に従って、新しい大容量に基づいて費用が増加します。
始める前に
要件
次の要件を満たしていることを確認してください。
- GKE クラスタ バージョン 1.35.0-gke.2331000 以降が必要です。
- 既存のクラスタで Managed Lustre CSI ドライバを有効にする必要があります。ドライバは、Standard クラスタと Autopilot クラスタではデフォルトで無効になっています。
制限事項
- 既存のボリュームのサイズを増やすことはできますが、縮小することはできません。
ReadOnlyManyアクセスモードでは、ボリューム拡張は使用できません。- Lustre ボリュームのサイズを変更する場合は、ボリュームのパフォーマンス ティアで設定された最小容量と最大容量の上限、およびステップサイズに従ってください。詳細については、パフォーマンスに関する考慮事項をご覧ください。
- Lustre ボリュームのサイズを GiB 単位で 1,000 の倍数で指定します。Kubernetes は Ti などの単位をバイナリ値に変換します(たとえば、18 Ti は 18,432 GiB と解釈されます)。これにより、Lustre API がリクエストを拒否します。
StorageClass のボリューム拡張を有効にする
StorageClass がボリューム拡張をサポートしているかどうかを確認します。
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'STORAGECLASS_NAMEは、StorageClass の名前に置き換えます。コマンドの出力がない場合や
falseが返された場合は、拡張を許可するように StorageClass 構成を明示的に更新する必要があります。StorageClass 構成を編集用に開きます。
kubectl edit storageclass STORAGECLASS_NAMEエディタで、StorageClass 構成に
allowVolumeExpansion: trueフィールドを追加します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-sc provisioner: lustre.csi.storage.gke.io ... allowVolumeExpansion: true
PersistentVolumeClaim を拡張する
ボリューム拡張を開始するには、PersistentVolumeClaim(PVC)を編集して、ボリューム サイズの増加をリクエストします。
- 有効な拡大サイズを特定するの説明に沿って、拡大の新しい有効なサイズを特定します。
編集用に PVC 構成を開きます。
kubectl edit pvc PVC_NAMEPVC_NAMEは、PVC の名前に置き換えます。エディタで、有効な拡張サイズを使用して
spec.resources.requests.storageフィールドを更新します。たとえば、ボリュームを9000Giから18000Giに拡張するには、storageフィールドを次のように変更します。spec: accessModes: - ReadWriteOnce resources: requests: storage: 18000Gi # Changed from 9000Gi
ボリュームの拡張を確認する
PVC のイベントを確認して、拡張の進行状況をモニタリングします。
kubectl describe pvc PVC_NAMEPVC の出力の次のイベントは、ボリューム拡張リクエストの現在の進行状況または結果を示します。
ExternalExpanding: Kubernetes がexternal-resizerによる PVC の拡張を待機していることを示します。Resizing: サイズ変更オペレーションが進行中であることを示します。容量の増加が大きい場合、このオペレーションには最大 90 分かかることがあります。VolumeResizeSuccessful: ボリュームが正常に拡張されたことを確認します。VolumeResizeFailed: エラーが発生したことを示します。イベント メッセージには、Google Cloud Managed Lustre API の詳細が含まれています。この状態は一時的なもので、自動的に解決される可能性があります。
拡張が完了したら、PVC の更新された構成を確認します。
kubectl get pvc PVC_NAME -o yamlstatus.capacityフィールドに新しい増分サイズが反映されていることを確認します。
拡張プロセスで問題が発生した場合は、トラブルシューティングをご覧ください。
有効な拡張サイズを決定する
新しいボリューム サイズを決定するには、まずボリュームのパフォーマンス ティアと対応するステップサイズを特定します。
ボリュームのパフォーマンス ティアを特定する
ボリュームのパフォーマンス ティアは、次のいずれかの方法で確認できます。
StorageClass
次のコマンドを実行し、perUnitStorageThroughput 値(1000 など)を探します。この値は、TiB あたりの MBps でパフォーマンス ティアを示します。
kubectl get sc STORAGECLASS_NAME -o yaml
STORAGECLASS_NAME は、StorageClass の名前に置き換えます。
Lustre インスタンス
基盤となる Managed Lustre インスタンスのプロパティを直接確認して、ボリュームのパフォーマンス ティアを特定します。
PVC にバインドされている PV の名前を確認します。
kubectl get pvc PVC_NAMEPVC_NAMEは、PVC の名前に置き換えます。出力は次のようになります。
VOLUME列の PV 名(例:pv-lustre)をメモします。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-lustre Bound pv-lustre 9000Gi RWX lustre-rwx <unset> 26mvolumeHandleフィールドで、ボリュームのロケーションとインスタンス名を確認します。kubectl get pv PV_NAME -o yamlPV_NAMEは、前の手順の PV 名に置き換えます。volumeHandle値はPROJECT_ID/LOCATION/INSTANCE_NAMEの形式になります。次のステップで使用するINSTANCE_NAMEとLOCATIONをメモします。Managed Lustre インスタンスの説明を取得して、パフォーマンス ティアのプロパティを確認します。
gcloud lustre instances describe INSTANCE_NAME --location=LOCATIONINSTANCE_NAMEとLOCATIONは、前のステップの値に置き換えます。出力で
perUnitStorageThroughputフィールドを探します。この値は、パフォーマンス ティアを TiB あたりの MBps で示します。
容量の上限とステップサイズ
パフォーマンス ティアを特定したら、次の表を参照して、関連する容量上限と必要なステップサイズを確認します。
階層(perUnitStorageThroughput) |
最小容量 | 最大容量 | ステップサイズ |
|---|---|---|---|
| TiB あたり 1,000 Mbps | 9,000 GiB | 954,000 GiB(約 1 PiB) | 9,000 GiB |
| TiB あたり 500 MBps | 18,000 GiB | 1,908,000 GiB(約 2 PiB) | 18,000 GiB |
| TiB あたり 250 MBps | 36,000 GiB | 3,816,000 GiB(約 4 PiB) | 36,000 GiB |
| 1 TiB あたり 125 MBps | 72,000 GiB | 7,632,000 GiB(約 8 PiB) | 72,000 GiB |
ボリュームは、階層に割り当てられたステップサイズに従って増やす必要があります。容量の増加は、その特定のステップサイズの倍数である必要があります。たとえば、1,000 Mbps 階層のボリュームの容量が 9,000 GiB の場合、18,000 GiB、27,000 GiB などの倍数に増やすことができます。
トラブルシューティング
このセクションでは、Lustre ボリュームの拡張時に発生する可能性のある一般的な問題の解決策について説明します。
「無効な引数」エラーで拡張が失敗する
症状
- PVC が
Resizing状態になった後、失敗します。 kubectl describe pvc PVC_NAMEコマンドを実行すると、VolumeResizeFailed: rpc error: code = InvalidArgument desc = ...のようなエラーが表示されます。
原因
このエラーは通常、次のいずれかの理由で、リクエストされたストレージ サイズが Lustre ボリュームのパフォーマンス ティアに対して無効であることを意味します。
- リクエストされたサイズが、階層に必要なステップサイズの倍数ではありません。
- リクエストされたサイズが、階層の最小容量を下回っているか、最大容量を上回っています。
解決策
- 容量の上限とステップサイズを確認して、ボリュームのパフォーマンス ティアの有効なステップサイズと容量の上限を確認します。
- PVC を再度編集して、ステップサイズと容量上限を満たす有効なストレージ サイズをリクエストします。
「内部エラー」で拡張が失敗する
症状
- PVC のサイズ変更が失敗します。
kubectl describe pvc PVC_NAMEコマンドを実行すると、code = Internalを含むエラー メッセージを含むVolumeResizeFailedイベントが表示されることがあります。
原因
このエラーは、基盤となる Managed Lustre サービスに問題があることを示します。
解決策
- 新しいリクエスト サイズで PVC マニフェストを再度適用して、拡張を再試行します。これにより、バックエンドの一時的な問題が解決する可能性があります。
- 再試行に失敗した場合は、Cloud カスタマーケアにお問い合わせください。
拡張が「サイズ変更中」の状態で停止する
症状
- PVC が
Resizing状態のまま、長時間経過している(小規模な拡張の場合は 30 分以上、大規模な拡張の場合は 90 分以上)。 DEADLINE_EXCEEDEDエラー メッセージを含むVolumeResizeFailedイベントが表示されることがあります。
原因
この問題は、容量の増加が大きい場合に発生する可能性があり、完了までに最大 90 分かかることがあります。基盤となる拡張オペレーションが進行中であっても、csi-external-resizer コンポーネントは Google Cloud Managed Lustre API のレスポンスを待機中にタイムアウトすることがあります。
解決策
csi-external-resizerは、バックオフ期間後にオペレーションを自動的に再試行します。VolumeResizeSuccessfulイベントの PVC イベントのモニタリングを続行します。- PVC が 90 分以上
Resizing状態のままの場合は、Cloud カスタマーケアにお問い合わせください。
拡張が開始されない、または ExternalExpanding 状態から進まない
症状
- PVC の
spec.resources.requests.storageフィールドを更新しても、PVC のステータスがResizingに変わりません。 kubectl describe pvc PVC_NAMEコマンドを実行すると、イベントログにExternalExpanding状態のみが表示され、Resizing状態に進みません。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalExpanding 21m (x2 over 58m) volume_expand waiting for an external controller to expand this PVC
原因
通常、この動作は次のいずれかの問題を示しています。
- PVC に関連付けられている StorageClass でボリュームの拡張が許可されていない。
- 拡張の開始を担当するコンポーネントである
csi-external-resizerサイドカー コンテナに問題があります。
解決策
StorageClass の構成を確認し、
allowVolumeExpansion: trueフィールドが設定されていることを確認します。kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'allowVolumeExpansionが欠落しているか、falseに設定されている場合は、StorageClass を更新してボリュームの拡張を許可します。StorageClass が正しく構成されている場合、問題はサイズ変更オペレーションを管理する GKE コントロール プレーン コンポーネントにある可能性があります。サポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。
割り当てまたは容量の問題により拡張に失敗する
症状
- PVC のサイズ変更が失敗し、PVC に
VolumeResizeFailedイベントが表示されます。 kubectl describe pvc PVC_NAMEコマンドを実行すると、Managed Lustre バックエンドからのイベント メッセージに割り当てまたは容量の問題が示されます。
原因
リクエストされた有効な拡張は、プロジェクトまたはリージョンの Managed Lustre サービスで使用可能な全体的な容量または割り当てを超えるため、実行できません。
解決策
- PVC を再度編集し、ストレージの増量を減らしてリクエストします。
- 組織の Google Cloud 管理者にお問い合わせのうえ、プロジェクトの Lustre サービスの割り当てまたは容量の全体的な増加をリクエストしてください。
クリーンアップ
このドキュメントで使用したリソースについて Google Cloud アカウントに課金されないようにするには、PVC を削除します。reclaimPolicy が Delete に設定されている場合、このオペレーションでは、関連付けられている PV と基盤となる Managed Lustre インスタンスも削除されます。
kubectl delete pvc PVC_NAME
PVC_NAME は、PVC の名前に置き換えます。
次のステップ
- GKE クラスタのストレージの詳細を確認する。
- GKE 永続ボリュームとプロビジョニングに関するドキュメントを読む。