Docker Meetup Tokyo #28 で使用したスライドです。
様々なアプリケーションのプラットフォームとして Kubernetes を活用するに当たって、目的に応じて Scheduler の挙動をカスタマイズする方法について解説しています。
イベント概要:https://dockerjp.connpass.com/event/120221/ ブログ記事:https://ccvanishing.hateblo.jp/entry/2019/02/27/032421
君だけの最強 Scheduler を作ろう!チェシャ猫 (@y_taka_23)Docker Meetup Tokyo #28 (2019/02/26)
View Slide
Scheduler 自作勢の人?
AWS Elastic Container Service
ECS の配置戦略spreadbinpack
Scheduler 自作したくない勢の人?
高度な Scheduling への需要● Node 管理の自動化○ → クラスタの動的な状態の反映● ステートフルなアプリのデプロイ○ → 複数 Pod が連携した Scheduling● ジョブ実行基盤としての利用○ → 実行順序と割込み管理の複雑化
用途に合わせた Scheduling は不可避
(ポジショントーク含む)
Scheduler のカスタマイズ1. 起動時のポリシ設定2. Scheduler Extender3. カスタム Scheduler 開発手軽さ 自由度
2 1 3Per-PodGoroutinesRank NodesFilter NodesDequeuePreemptBindto NodeMainLoop
1. 起動時のポリシ設定
Scheduling Policy● kube-scheduler の --config に指定○ KubeSchedulerConfiguration リソース○ Pod ごとの設定には複数の Scheduler が必要● 予め用意された項目を組み合わせる○ Node のフィルタリング条件 (predicate)○ Node の順位付け関数と重さ (priority)
spread 戦略
binpack 戦略
2. Scheduler Extender
Scheduler Extender● JSON Webhook による処理の追加● 拡張できるポイントは 4 つ○ Filter - Node の候補を絞る○ Prioritize - Node の順位付け関数を追加○ Preempt - 追い出される Pod の候補を絞る○ Bind - Pod と Node の紐づけを委譲
1 2Rank NodesFilter NodesDequeuePreemptHTTPServer
3. カスタム Scheduler 開発
Scheduler Extender の不足点● 記述できる処理が限定的○ エラー時の中断や分岐ができない● 実行時のオーバーヘッド○ 外部サーバとの JSON のやり取りは遅い● 情報の使いまわしが効かない○ 前の拡張点の結果で分岐させるなど
Scheduling Framework の目的● シンプルなコア機能を抽出○ 肥大化しすぎた現在の実装を整理● 柔軟に拡張できるプラガブルな設計○ ソースコード中に多数の拡張点を提供● 大域的な情報を利用可能○ プラグインの処理結果やキャッシュを共有
https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-16th
まとめ● Scheduling に対する要求の多様化○ ポリシ設定だけでなく拡張点の必要性● Scheduler Extender の利用と限界○ JSON Webhook によるプログラマブル拡張● カスタム Scheduler の開発○ Scheduler Framework によるプラグイン化
君だけの Scheduler を手に入れろ!Presented by チェシャ猫 (@y_taka_23)