Security groups for podsとKubernetes Job
前提
- Security groups for pods - Amazon EKSを導入した
- RDSと通信するPodに使っている
- Kubernetes Jobを使ったDBアクセスをするPodがいる
問題
Podはスケジューリングされたが、IPアドレスの割り当てに失敗して、起動しない
という状態のままスタックする場合がある。
原因
(Jobから生まれて)完了したPodはIPアドレスを持ち続ける
=Branch network interfacesも持ち続ける
一方、スケジューリング時には、完了したPodのresources.requests
は計算に入らない。
セキュリティグループ割り当て対象のPodには自動的にvpc.amazonaws.com/pod-eni
のrequestとlimitが追加される。
このPodをスケジューリングするとき、vpc.amazonaws.com/pod-eni
に関してもPod自身のrequestと、ノード上の他のPodのrequest合計から、受け入れが可能か考慮される。
-
Schedule
-
findNodesThatFitPod
-
findNodesThatPassFilters
-
PodPassesFiltersOnNode
-
RunFilterPlugins
-
Filter
※RunFilterPlugin
の中でrunFilterPlugin
から呼ばれるうちの一つ -
fitsRequest
「ノード上のPodのrequest合計」は、NodeInfo.Requested
に入っている。
findNodesThatPassFilters
の先頭で取得され、後続の関数に引数として渡されて参照される。
-
https://github.com/kubernetes/kubernetes/blob/02cf58102a61b6d1e021e256381ff750573ce55d/pkg/scheduler/core/generic_scheduler.go#L294
- ここで取得しているのは
Snapshot
構造体のnodeInfoList
フィールド
- ここで取得しているのは
nodeInfoList
はupdateNodeInfoSnapshotList
で更新される。
updateNodeInfoSnapshotList
はUpdateSnapshot
から呼ばれる。
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
- Kubernetes: kube-scheduler をソースコードレベルで理解する - チェシャ猫の消滅定理
-
https://github.com/aws/amazon-vpc-cni-k8s/issues/1245#issuecomment-806016472
-
Kube-scheduler that is running in EKS is vanilla.
-
-
QoS, "Node allocatable" and the Kubernetes Scheduler
- 少し古いが知りたいこと大体書いてた
- 調査時点の利用バージョン(
v1.19.6
)との差分的な情報は↓- Move informer event handlers to scheduler by krmayankk · Pull Request #69504 · kubernetes/kubernetes
-
Remove pod status.phase check from pod event handlers by bsalamat · Pull Request #69592 · kubernetes/kubernetes
-
The scheduler pod informer already filters out pods which are terminated (succeeded or failed).
-
Discussion