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

332f89cc697355902a817506b6995f2b?s=47 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

332f89cc697355902a817506b6995f2b?s=128

y_taka_23

February 26, 2019
Tweet

Transcript

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

    #28 (2019/02/26)
  2. Scheduler 自作勢の人?

  3. AWS Elastic Container Service

  4. ECS の配置戦略 spread binpack

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

  6. 高度な Scheduling への需要 • Node 管理の自動化 ◦ → クラスタの動的な状態の反映 •

    ステートフルなアプリのデプロイ ◦ → 複数 Pod が連携した Scheduling • ジョブ実行基盤としての利用 ◦ → 実行順序と割込み管理の複雑化
  7. 用途に合わせた Scheduling は不可避

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

  9. Scheduler のカスタマイズ 1. 起動時のポリシ設定 2. Scheduler Extender 3. カスタム Scheduler

    開発 手軽さ 自由度
  10. 2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue

    Preempt Bind to Node Main Loop
  11. 1. 起動時のポリシ設定

  12. 2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue

    Preempt Bind to Node Main Loop
  13. Scheduling Policy • kube-scheduler の --config に指定 ◦ KubeSchedulerConfiguration リソース

    ◦ Pod ごとの設定には複数の Scheduler が必要 • 予め用意された項目を組み合わせる ◦ Node のフィルタリング条件 (predicate) ◦ Node の順位付け関数と重さ (priority)
  14. spread 戦略

  15. binpack 戦略

  16. 2. Scheduler Extender

  17. Scheduler Extender • JSON Webhook による処理の追加 • 拡張できるポイントは 4 つ

    ◦ Filter - Node の候補を絞る ◦ Prioritize - Node の順位付け関数を追加 ◦ Preempt - 追い出される Pod の候補を絞る ◦ Bind - Pod と Node の紐づけを委譲
  18. 2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue

    Preempt Bind to Node Main Loop
  19. None
  20. 1 2 Rank Nodes Filter Nodes Dequeue Preempt HTTP Server

  21. 3. カスタム Scheduler 開発

  22. Scheduler Extender の不足点 • 記述できる処理が限定的 ◦ エラー時の中断や分岐ができない • 実行時のオーバーヘッド ◦

    外部サーバとの JSON のやり取りは遅い • 情報の使いまわしが効かない ◦ 前の拡張点の結果で分岐させるなど
  23. None
  24. Scheduling Framework の目的 • シンプルなコア機能を抽出 ◦ 肥大化しすぎた現在の実装を整理 • 柔軟に拡張できるプラガブルな設計 ◦

    ソースコード中に多数の拡張点を提供 • 大域的な情報を利用可能 ◦ プラグインの処理結果やキャッシュを共有
  25. 2 1 3 Per-Pod Goroutines Rank Nodes Filter Nodes Dequeue

    Preempt Bind to Node Main Loop
  26. https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-16th

  27. まとめ • Scheduling に対する要求の多様化 ◦ ポリシ設定だけでなく拡張点の必要性 • Scheduler Extender の利用と限界

    ◦ JSON Webhook によるプログラマブル拡張 • カスタム Scheduler の開発 ◦ Scheduler Framework によるプラグイン化
  28. 君だけの Scheduler を手に入れろ! Presented by チェシャ猫 (@y_taka_23)