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)