先日行われた Docker Meetup Tokyo #31 で、Kubernetes 1.15 の Scheduler 周りの新機能について発表してきました。
Kubernetes の Pod Preemption を利用すると、より重要な Pod にノードの計算リソースを割り当てる優先的に割り当てることができ、コストの最適化につながります。しかし優先度の低い Pod は実行中に強制的に終了されることとなり、長時間かかるバッチ処理が途中で中断されてしまうという弊害もあります。
本スライドでは、Kubernetes 1.15 から Alpha 機能として導入された NonPreemptingPriority と Scheduling Framework を利用して、中断されたくない Pod に対する Preemption を抑制する手法を提案します。
その他の変更点も含めて、1.15 のリリースノートの完全な解説については以下の記事を参照してください。
参考資料
Scheduler 一般
- Scheduling Special Interest Group
- SIG Scheduling Deep Dive (KubeCon EU 2019)
- kube-schedulerのソースコードを読みながらPodがNodeにBindされるまでを理解する (現状、最も詳しいソースコード解説)
- Configuring Multiple Schedulers (実験用にカスタム Scheduler を追加するとき)
Priority と Preemption
- Pod Priority and Preemption (Non-Preempting PriorityClasses)
- 猫でもわかる Pod Preemption
- Issue: Add non-preempting option to PriorityClasses
Scheduling Framework
- Scheduling Framework (あくまでもデザインプロポーザルの解説で、現状の実装とは一致しない)
- 猫でもわかる Scheduling Framework
- Issue: Scheduling Framework (Scheduling Framework 関連の親 Issue)
- Plugin 有効化のための設定項目
- 各 Plugin の Interface 定義
余談
思えば Scheduler についても色々なイベントで話したものです。今回のスライドを登録したことで Speaker Deck のスライド一覧 がついに 2 ページ目になりました。
そろそろ Scheduler 以外のコンポーネントについても手を広げていきたいなと思っていますが、それはまた別の話。