🥲

/var/log/it's very yayakoshi...

2024/09/03に公開

思い出に 📃メモ を書いておきます。

QueueingHintFn

QHintという便利な機能がスケジューラに追加されました。これはスケジューラの Requeue に対してヒントを与えようという機能です。Requeue を無駄にされるとスケジューリングサイクルを無駄に消費するということもありますが、プリエンプションが起きる可能性があがるのでできるだけ賢く requeue したいです。興味のある方は KEP-4247: Per-plugin callback functions for efficient requeueing in the scheduling queue をどうぞ!最初のモチベーションは DRA だったり明日話せる小話も書いてあります。
そこで QHint を各スケジューラプラグインがQHintに対応するためにいっぱい実装する話したありました。
https://github.com/kubernetes/kubernetes/issues/118893

QueueingHint for CSILimit

僕も嬉々として CSILimit プラグインに対する QHint の実装に着手しました。
出来上がったPRはこちら!ぱっとみ変更は少ないですね。
https://github.com/kubernetes/kubernetes/pull/121508/files

リリースノートに書いてある通り、非常にシンプルな実装です。

kube-scheduler implements scheduling hints for the CSILimit plugin.
The scheduling hints allow the scheduler to retry scheduling a Pod that was previously rejected by the CSILimit plugin if a deleted pod has a PVC from the same driver.

ただ、実は初期の実装は以下の者ではるかに、はるかに、非常に複雑でした。
https://github.com/kubernetes/kubernetes/blob/efa738f31c2abd7aac611d3ce160b1418cb61937/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go#L89-L141

It's very yayakoshi...

sanposhiho on Feb 4
It's very yayakoshi...
https://github.com/kubernetes/kubernetes/pull/121508#discussion_r1477202686

Pod が消去されたイベントが来た場合に消去された Pod が持っている PVC がスケジューリング対象の Pod の PVC と関係があれば requeue したいものです。察しのよい方はわかるかも知れませんが、消去されたの Pod の PVC の消去タイミングとスケジュールしようとしている Pod の関係やタイミングをいろいろ考える必要があったんです。例えば、Pod の消去イベントが来て QHint を呼ばれてるときは既に消去された Pod の PVC が消されている可能性が...

It's very yayakoshi... ですね。
ということで、「これは複雑すぎる!!!!!」となりました。
https://github.com/kubernetes/kubernetes/issues/118893#issuecomment-2061431139

その結果、最初のようなとてもシンプルな実装になりました。

おわりに

最終的にはいろいろ消したんですが、いろいろ勉強になりました。Scheduler / Storage や Scheduler / DRA などのスケジューラ絡みのコラボはなかなか難しいです。
メンテナ、レビュワーのみなさんありがとうございます。
Special thanks to Kensei Nakada!

Discussion