🔥

Security groups for podsとKubernetes Job

2021/05/11に公開

前提

問題

Podはスケジューリングされたが、IPアドレスの割り当てに失敗して、起動しない

という状態のままスタックする場合がある。

stuck

原因

(Jobから生まれて)完了したPodはIPアドレスを持ち続ける
=Branch network interfacesも持ち続ける

一方、スケジューリング時には、完了したPodのresources.requestsは計算に入らない。

セキュリティグループ割り当て対象のPodには自動的にvpc.amazonaws.com/pod-eniのrequestとlimitが追加される。

request-and-limit

このPodをスケジューリングするとき、vpc.amazonaws.com/pod-eniに関してもPod自身のrequestと、ノード上の他のPodのrequest合計から、受け入れが可能か考慮される。

「ノード上のPodのrequest合計」は、NodeInfo.Requestedに入っている。

findNodesThatPassFiltersの先頭で取得され、後続の関数に引数として渡されて参照される。

nodeInfoListupdateNodeInfoSnapshotListで更新される。

updateNodeInfoSnapshotListUpdateSnapshotから呼ばれる。

schedulerCache構造体のnodesの中にあるframework.NodeInfoが情報源。

「他のPodのrequest合計」=NodeInfo.Requested
これを計算するときに、終了したPodの分は含まれない。
→終了したPodがvpc.amazonaws.com/pod-eniをリクエストしていたらそれも考慮されない。
m5.largeのノードに終了したPodを含めてvpc.amazonaws.com/pod-eniをリクエストするPodが9個ある場合、
Branch network interfaceはもう持てないが、スケジューラーはまだいけると判断する。
→スケジュールされたものの、Branch network interfaceが持てないのでIPアドレスの割り当てができない。

cf

Discussion