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

猫でもわかる Scheduling Framework #k8sjp / Kubernetes Meetup Tokyo 16th

y_taka_23
February 19, 2019

猫でもわかる Scheduling Framework #k8sjp / Kubernetes Meetup Tokyo 16th

Kubernetes Meetup Tokyo #16 で使用したスライドです。

Kubernetes を目的特化したユースケースで使用する場合、デフォルトの Scheduler の挙動を変更したくなることはしばしばあります。一方、kube-scheduler の実装は歴史的事情から抽象度が比較的低く、拡張性にも限界が見えてきています。

この問題を解決するために Kubernetes 開発チーム Scheduling SIG では、より柔軟な拡張を可能とする Scheduling Framework が提案されています。本スライドでは、Scheduler の拡張手法として以前から提供されていた Extender Webhook と 新しい Scheduling Framework を比較し、その概要をつかむことを目的としています。

イベント概要:https://k8sjp.connpass.com/event/116799/
録画:https://www.youtube.com/watch?v=mAGmmeylj_4 (2:33:20)
ブログ記事:https://ccvanishing.hateblo.jp/entry/2019/02/22/193916

y_taka_23

February 19, 2019
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. 猫でもわかる
    Scheduling Framework
    チェシャ猫 (@y_taka_23)
    Kubernetes Meetup Tokyo #16 (2019/02/19)
    #k8sjp

    View Slide

  2. Scheduler 自作勢の人?
    #k8sjp

    View Slide

  3. 変則 Scheduling が欲しいとき
    ● 奥から詰めて配置したい
    ○ お金が無いので Node 数を節約したい
    ● 一度にまとめて配置したい
    ○ クラスタを構成する Pod が一個だけ取り残される
    ● 途中で実行を中断されたくない
    ○ 長時間かかる Job が無駄になる
    ○ でも場合によっては割込み機能も欲しい
    #k8sjp

    View Slide

  4. 開発中の Alternative Scheduler
    ● kube-batch
    ○ バッチ処理に特化
    ○ All or Nothing のスケジューリングに対応
    ○ 実証済み機能が kube-flow に移植されている
    ● Poseidon
    ○ Firmament Scheduler の Kubernetes 向け実装
    ○ 制約をグラフ上の最小費用流問題に帰着
    #k8sjp

    View Slide

  5. カスタマイズでは駄目?
    #k8sjp

    View Slide

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

    View Slide

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

    View Slide

  8. Scheduler Extender
    ● Webhook による処理の追加
    ○ 指定した外部サーバと JSON をやり取り
    ● 拡張できるポイントは 4 つ
    ○ Filter - Node の候補を絞る
    ○ Prioritize - Node の順位付け関数を追加
    ○ Preempt - 追い出される Pod の候補を絞る
    ○ Bind - Pod と Node の紐づけを委譲
    #k8sjp

    View Slide

  9. Scheduler Extender の不足点
    ● 記述できる処理が限定的
    ○ 特にエラー時の分岐や中断が難しい
    ● 実行時のオーバヘッド
    ○ 外部サーバへの JSON Webhook は遅い
    ● 情報の使いまわしが効かない
    ○ 前の拡張点で得られた処理結果
    ○ Scheduler 本体が持っているキャッシュ
    #k8sjp

    View Slide

  10. Scheduling Framework
    #k8sjp

    View Slide

  11. #k8sjp

    View Slide

  12. Scheduling Framework の目的
    ● シンプルなコア機能を抽出
    ○ 肥大化しすぎた現在の実装を整理
    ● 柔軟に拡張できるプラガブルな設計
    ○ Scheduler 再開発の労力を低減
    ○ ただし実行速度のためプラグインごとコンパイル
    ● 情報共有の機構を提供
    ○ プラグインが得た結果の再利用を可能に
    #k8sjp

    View Slide

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

    View Slide

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

    View Slide

  15. 提案されている 12 個の拡張点
    ● メインループ内
    ○ Scheduling Queue Sort
    ○ Pre-Filter, Filter, Post-Filter, Scoring, Post-Scoring
    ○ Reserve
    ● 各 Pod ごとに分岐した goroutine 内
    ○ Permit, Reject
    ○ Pre-Bind, Bind, Post-Bind
    #k8sjp

    View Slide

  16. 特筆すべき拡張点
    ● Scheduling Queue Sort
    ○ キュー内の Pod が dequeue される順を変更できる
    ○ Pod の比較結果 (=, <, >) を返す
    ● Permit / Reject
    ○ 個別の goroutine 分岐後、Pod を待機させる
    ○ permit, deny, wait のいずれかを返す
    ○ reject した場合にはロールバック処理
    #k8sjp

    View Slide

  17. (というのはあくまで予定)
    #k8sjp

    View Slide

  18. Scheduling Framework の現状
    ● プラグインは interface として定義
    ● 実装済みの拡張点は 2 個
    ○ Reserve - Pod ごとに分岐前にリソースを確認
    ○ Pre-Bind - 実際にリソースを確保
    ● プラグイン間データ共有は実装済み
    ○ スレッドセーフな Key-Value Map が使用可
    ○ ただしライフタイムは一回のメインループ中のみ
    #k8sjp

    View Slide

  19. Plugin のインタフェース
    #k8sjp

    View Slide

  20. データ共有用のシングルトン
    #k8sjp

    View Slide

  21. まとめ
    ● 用途に応じたスケジューリングの需要
    ○ 従来だとスクラッチ開発が必要
    ● 既存実装 + Extender の限界
    ○ できる処理が限定的、パフォーマンスに難
    ● Scheduler Framework
    ○ ソースコードレベルで処理を差し込み
    ○ 現時点では未実装の部分が多く、今後に期待
    #k8sjp

    View Slide

  22. #k8sjp

    View Slide

  23. You Ain’t Scheduled Nothin’ Yet!
    Presented by チェシャ猫 (@y_taka_23)
    #k8sjp

    View Slide