$30 off During Our Annual Pro Sale. View Details »

君だけの最強 Scheduler を作ろう! #dockertokyo / Docker Meetup Tokyo 28th

y_taka_23
February 26, 2019

君だけの最強 Scheduler を作ろう! #dockertokyo / Docker Meetup Tokyo 28th

Docker Meetup Tokyo #28 で使用したスライドです。

様々なアプリケーションのプラットフォームとして Kubernetes を活用するに当たって、目的に応じて Scheduler の挙動をカスタマイズする方法について解説しています。

イベント概要:https://dockerjp.connpass.com/event/120221/
ブログ記事:https://ccvanishing.hateblo.jp/entry/2019/02/27/032421

y_taka_23

February 26, 2019
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. 君だけの
    最強 Scheduler を
    作ろう!
    チェシャ猫 (@y_taka_23)
    Docker Meetup Tokyo #28 (2019/02/26)

    View Slide

  2. Scheduler 自作勢の人?

    View Slide

  3. AWS Elastic Container Service

    View Slide

  4. ECS の配置戦略
    spread
    binpack

    View Slide

  5. Scheduler 自作したくない勢の人?

    View Slide

  6. 高度な Scheduling への需要
    ● Node 管理の自動化
    ○ → クラスタの動的な状態の反映
    ● ステートフルなアプリのデプロイ
    ○ → 複数 Pod が連携した Scheduling
    ● ジョブ実行基盤としての利用
    ○ → 実行順序と割込み管理の複雑化

    View Slide

  7. 用途に合わせた Scheduling は不可避

    View Slide

  8. (ポジショントーク含む)

    View Slide

  9. Scheduler のカスタマイズ
    1. 起動時のポリシ設定
    2. Scheduler Extender
    3. カスタム Scheduler 開発
    手軽さ 自由度

    View Slide

  10. 2 1 3
    Per-Pod
    Goroutines
    Rank Nodes
    Filter Nodes
    Dequeue
    Preempt
    Bind
    to Node
    Main
    Loop

    View Slide

  11. 1. 起動時のポリシ設定

    View Slide

  12. 2 1 3
    Per-Pod
    Goroutines
    Rank Nodes
    Filter Nodes
    Dequeue
    Preempt
    Bind
    to Node
    Main
    Loop

    View Slide

  13. Scheduling Policy
    ● kube-scheduler の --config に指定
    ○ KubeSchedulerConfiguration リソース
    ○ Pod ごとの設定には複数の Scheduler が必要
    ● 予め用意された項目を組み合わせる
    ○ Node のフィルタリング条件 (predicate)
    ○ Node の順位付け関数と重さ (priority)

    View Slide

  14. spread 戦略

    View Slide

  15. binpack 戦略

    View Slide

  16. 2. Scheduler Extender

    View Slide

  17. Scheduler Extender
    ● JSON Webhook による処理の追加
    ● 拡張できるポイントは 4 つ
    ○ Filter - Node の候補を絞る
    ○ Prioritize - Node の順位付け関数を追加
    ○ Preempt - 追い出される Pod の候補を絞る
    ○ Bind - Pod と Node の紐づけを委譲

    View Slide

  18. 2 1 3
    Per-Pod
    Goroutines
    Rank Nodes
    Filter Nodes
    Dequeue
    Preempt
    Bind
    to Node
    Main
    Loop

    View Slide

  19. View Slide

  20. 1 2
    Rank Nodes
    Filter Nodes
    Dequeue
    Preempt
    HTTP
    Server

    View Slide

  21. 3. カスタム Scheduler 開発

    View Slide

  22. Scheduler Extender の不足点
    ● 記述できる処理が限定的
    ○ エラー時の中断や分岐ができない
    ● 実行時のオーバーヘッド
    ○ 外部サーバとの JSON のやり取りは遅い
    ● 情報の使いまわしが効かない
    ○ 前の拡張点の結果で分岐させるなど

    View Slide

  23. View Slide

  24. Scheduling Framework の目的
    ● シンプルなコア機能を抽出
    ○ 肥大化しすぎた現在の実装を整理
    ● 柔軟に拡張できるプラガブルな設計
    ○ ソースコード中に多数の拡張点を提供
    ● 大域的な情報を利用可能
    ○ プラグインの処理結果やキャッシュを共有

    View Slide

  25. 2 1 3
    Per-Pod
    Goroutines
    Rank Nodes
    Filter Nodes
    Dequeue
    Preempt
    Bind
    to Node
    Main
    Loop

    View Slide

  26. https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-16th

    View Slide

  27. まとめ
    ● Scheduling に対する要求の多様化
    ○ ポリシ設定だけでなく拡張点の必要性
    ● Scheduler Extender の利用と限界
    ○ JSON Webhook によるプログラマブル拡張
    ● カスタム Scheduler の開発
    ○ Scheduler Framework によるプラグイン化

    View Slide

  28. 君だけの Scheduler を手に入れろ!
    Presented by チェシャ猫 (@y_taka_23)

    View Slide