Pod resourceClaimStatuses フラップバグの修正
概要
複数のResourceClaimを使用するPodで、.status.resourceClaimStatuses がClaimの部分リストの間でフラップ(行ったり来たり)していたバグが修正されました。
背景
Dynamic Resource Allocation (DRA) は、GPU、専用NIC、FPGAなどの特殊なハードウェアリソースをKubernetesのPodに割り当てるための仕組みです。ResourceClaimはPodが必要とするリソースを宣言するオブジェクトで、1つのPodに複数のClaimを割り当てることができます。
詳細
問題の原因:
ResourceClaimControllerの syncPod メソッドは、Server-Side Apply (SSA) を使用してPodのステータスを更新します。しかし、このメソッドは新しいResourceClaimのみをSSAに含め、既存のClaimを含めていませんでした。
SSAはフィールドマネージャーが管理するフィールドを「正しい状態」として適用するため、既存のClaimが含まれていない場合、それらが削除されてしまいます。その結果、更新のたびに「新しいClaimだけある状態」と「既存のClaimだけある状態」の間でフラップが発生していました。
修正: 既存のClaimもSSAのapplyに含めるように変更することで、すべてのClaimが一貫して維持されるようになりました。
影響を受ける環境
- 1つのPodに複数のResourceClaimを使用している環境
- GPUクラスターやHPC(高性能計算)環境など、特殊ハードウェアを複数割り当てるユースケース