Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
君だけの 最強 Scheduler を 作ろう! チェシャ猫 (@y_taka_23) Docker Meetup Tokyo #28 (2019/02/26)
Slide 2
Slide 2 text
Scheduler 自作勢の人?
Slide 3
Slide 3 text
AWS Elastic Container Service
Slide 4
Slide 4 text
ECS の配置戦略 spread binpack
Slide 5
Slide 5 text
Scheduler 自作したくない勢の人?
Slide 6
Slide 6 text
高度な Scheduling への需要 ● Node 管理の自動化 ○ → クラスタの動的な状態の反映 ● ステートフルなアプリのデプロイ ○ → 複数 Pod が連携した Scheduling ● ジョブ実行基盤としての利用 ○ → 実行順序と割込み管理の複雑化
Slide 7
Slide 7 text
用途に合わせた Scheduling は不可避
Slide 8
Slide 8 text
(ポジショントーク含む)
Slide 9
Slide 9 text
Scheduler のカスタマイズ 1. 起動時のポリシ設定 2. Scheduler Extender 3. カスタム Scheduler 開発 手軽さ 自由度
Slide 10
Slide 10 text
2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue Preempt Bind to Node Main Loop
Slide 11
Slide 11 text
1. 起動時のポリシ設定
Slide 12
Slide 12 text
2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue Preempt Bind to Node Main Loop
Slide 13
Slide 13 text
Scheduling Policy ● kube-scheduler の --config に指定 ○ KubeSchedulerConfiguration リソース ○ Pod ごとの設定には複数の Scheduler が必要 ● 予め用意された項目を組み合わせる ○ Node のフィルタリング条件 (predicate) ○ Node の順位付け関数と重さ (priority)
Slide 14
Slide 14 text
spread 戦略
Slide 15
Slide 15 text
binpack 戦略
Slide 16
Slide 16 text
2. Scheduler Extender
Slide 17
Slide 17 text
Scheduler Extender ● JSON Webhook による処理の追加 ● 拡張できるポイントは 4 つ ○ Filter - Node の候補を絞る ○ Prioritize - Node の順位付け関数を追加 ○ Preempt - 追い出される Pod の候補を絞る ○ Bind - Pod と Node の紐づけを委譲
Slide 18
Slide 18 text
2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue Preempt Bind to Node Main Loop
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
1 2 Rank Nodes Filter Nodes Dequeue Preempt HTTP Server
Slide 21
Slide 21 text
3. カスタム Scheduler 開発
Slide 22
Slide 22 text
Scheduler Extender の不足点 ● 記述できる処理が限定的 ○ エラー時の中断や分岐ができない ● 実行時のオーバーヘッド ○ 外部サーバとの JSON のやり取りは遅い ● 情報の使いまわしが効かない ○ 前の拡張点の結果で分岐させるなど
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
Scheduling Framework の目的 ● シンプルなコア機能を抽出 ○ 肥大化しすぎた現在の実装を整理 ● 柔軟に拡張できるプラガブルな設計 ○ ソースコード中に多数の拡張点を提供 ● 大域的な情報を利用可能 ○ プラグインの処理結果やキャッシュを共有
Slide 25
Slide 25 text
2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue Preempt Bind to Node Main Loop
Slide 26
Slide 26 text
https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-16th
Slide 27
Slide 27 text
まとめ ● Scheduling に対する要求の多様化 ○ ポリシ設定だけでなく拡張点の必要性 ● Scheduler Extender の利用と限界 ○ JSON Webhook によるプログラマブル拡張 ● カスタム Scheduler の開発 ○ Scheduler Framework によるプラグイン化
Slide 28
Slide 28 text
君だけの Scheduler を手に入れろ! Presented by チェシャ猫 (@y_taka_23)