このドキュメントでは、アプリケーションを中断することなく、Google Kubernetes Engine(GKE)でステートフル ワークロードの Managed Lustre ボリュームのストレージ容量を動的に増やす方法について説明します。
たとえば、実行時間の長い AI/ML トレーニング ジョブのストレージ要件が動的で予測できない場合は、Managed Lustre ボリュームの拡張を有効にして、既存の Managed Lustre PersistentVolume(PV)のストレージ容量を増やします。
このドキュメントは、GKE でステートフル ワークロードのストレージを管理するプラットフォーム管理者とオペレーター、DevOps、ストレージ管理者、機械学習(ML)エンジニアを対象としています。
ボリュームを拡張すると、標準の Cloud de Confiance by S3NS Managed Lustre の料金に基づいて、新しい大容量の容量に応じて費用が増加します。
始める前に
要件
次の要件を満たしていることを確認してください。
- GKE クラスタ バージョン 1.35.0-gke.2331000 以降が必要です。
- 既存のクラスタで Managed Lustre CSI ドライバを有効にする必要があります。ドライバは、Standard クラスタと Autopilot クラスタの両方でデフォルトで無効になっています。
制限事項
- 既存のボリュームのサイズを増やすことはできますが、縮小はできません。
ReadOnlyManyアクセスモードでは、ボリューム拡張を使用できません。- Lustre ボリュームのサイズを変更する場合は、ボリュームのパフォーマンス ティアで設定された最小容量と最大容量の上限、ステップサイズに従ってください。詳しくは、パフォーマンスに関する考慮事項をご覧ください。
- Lustre ボリュームのサイズは、1,000 の倍数として GiB で指定します。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エディタで、
allowVolumeExpansion: trueフィールドを StorageClass 構成に追加します。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 |
| 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 ボリュームを拡張する際に発生する可能性のある一般的な問題の解決策について説明します。
「Invalid Argument」エラーで拡張が失敗する
症状
- PVC が
Resizing状態になりますが、失敗します。 kubectl describe pvc PVC_NAMEコマンドを実行すると、VolumeResizeFailed: rpc error: code = InvalidArgument desc = ...のようなエラーが表示されます。
原因
通常、このエラーは、次のいずれかの理由で、リクエストされたストレージ サイズが Lustre ボリュームのパフォーマンス ティアに対して有効でないことを意味します。
- リクエストされたサイズが、階層に必要なステップサイズの倍数ではありません。
- リクエストされたサイズが、階層の最小容量または最大容量を超えています。
解決策
- 容量の上限とステップサイズを確認して、ボリュームのパフォーマンス ティアの有効なステップサイズと容量の上限を確認します。
- PVC を再度編集して、ステップサイズと容量の上限を満たす有効なストレージ サイズをリクエストします。
「Internal Error」で拡張が失敗する
症状
- PVC のサイズ変更が失敗します。
kubectl describe pvc PVC_NAMEコマンドを実行すると、code = Internalを含むエラー メッセージでVolumeResizeFailedイベントが表示されることがあります。
原因
このエラーは、基盤となる Managed Lustre サービスに問題があることを示しています。
解決策
- 新しいリクエスト サイズで PVC マニフェストを再度適用して、拡張を再試行します。これにより、一時的なバックエンドの問題が解決する可能性があります。
- 再試行に失敗した場合は、Cloud カスタマーケアにお問い合わせください。
拡張が「Resizing」状態のままになる
症状
- PVC が
Resizing状態のまま長時間経過します(小規模な拡張の場合は 30 分以上、大規模な拡張の場合は 90 分以上)。 DEADLINE_EXCEEDEDエラー メッセージでVolumeResizeFailedイベントが表示されることがあります。
原因
この問題は、容量を大幅に増やす場合に発生する可能性があり、完了までに最大 90 分かかることがあります。基盤となる拡張オペレーションが進行中でも、Google Cloud Managed Lustre API の応答を待機している間に csi-external-resizer コンポーネントがタイムアウトする可能性があります。
解決策
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 を再度編集して、ストレージの増加を小さくリクエストします。
- 組織の管理者に連絡して、プロジェクトの Lustre サービス全体の割り当てまたは容量の増加をリクエストします。 Cloud de Confiance by S3NS
クリーンアップ
このドキュメントで使用したリソースについてアカウントに課金されないようにするには、PVC を削除します。 Cloud de Confiance by S3NS このオペレーションでは、reclaimPolicy が Delete に設定されている場合、関連付けられている PV と基盤となる Managed Lustre インスタンスも削除されます。
kubectl delete pvc PVC_NAME
PVC_NAME は PVC の名前に置き換えます。
次のステップ
- GKE クラスタのストレージの詳細を確認する。
- GKE 永続ボリュームとプロビジョニングに関するドキュメントを読む。