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

Kubernetes 1.15 の新機能で Preemption を制御せよ #dockertokyo / Docker Meetup Tokyo 31st

Kubernetes 1.15 の新機能で Preemption を制御せよ #dockertokyo / Docker Meetup Tokyo 31st

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

Kubernetes の Pod Preemption を利用すると、より重要な Pod にノードの計算リソースを割り当てる優先的に割り当てることができ、コストの最適化につながります。しかし優先度の低い Pod は実行中に強制的に終了されることとなり、長時間かかるバッチ処理が途中で中断されてしまうという弊害もあります。

このような問題に対して本スライドでは、Kubernetes 1.15 から Alpha 機能として導入された NonPreemptingPriority と Scheduling Framework を利用して、中断されたくない Pod に対する Preemption を抑制する手法を提案します。

イベント概要:https://dockerjp.connpass.com/event/135043/
ブログ記事:https://ccvanishing.hateblo.jp/entry/2019/07/06/213029

y_taka_23

July 05, 2019
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. K8s 1.15 の新機能で
    Preemption を制御せよ
    チェシャ猫 (@y_taka_23)
    Docker Meetup Tokyo #31 (2019/07/05)
    #dockertokyo

    View Slide

  2. Preemption 完全にマスターした人?
    #dockertokyo

    View Slide

  3. Node 1
    A
    Batch
    B
    Node 2 Node 3
    App
    A
    B B
    Scheduling Priority Queue
    #dockertokyo

    View Slide

  4. Node 1
    B
    Batch
    B
    Node 2 Node 3
    App
    A
    A B
    Scheduling Priority Queue
    #dockertokyo

    View Slide

  5. Pod Preemption
    ● Pod に優先度を定義
    ○ PriorityClass リソースを作成
    ○ 数字が大きいほど優先度が高い
    ● Node のリソース不足の際に発動
    ○ 低優先度の Pod を追い出して余裕を作る
    ○ 追い出しの被害が少ない Node を選択
    ○ Node のスケーリングより高速
    #dockertokyo

    View Slide

  6. #dockertokyo

    View Slide

  7. #dockertokyo

    View Slide

  8. https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-10th
    #dockertokyo

    View Slide

  9. しかし現にバッチは死ぬ
    #dockertokyo

    View Slide

  10. Preemption の問題点
    ● Preempt されると Pod は終了
    ○ そこまでに費やした計算リソースが無駄に
    ○ 処理自体は冪等だとしても辛い
    ● 優先度を高くすれば死なない?
    ○ 優先度キュー内での順位も高くなってしまう
    ○ バッチ処理系の Pod は、後回しでもいいが
    一度動き出したら中断してほしくない
    #dockertokyo

    View Slide

  11. v1.15 の機能で何とかする
    #dockertokyo

    View Slide

  12. https://kubernetes.io/blog/2019/06/19/kubernetes-1-15-release-announcement/
    #dockertokyo

    View Slide

  13. NonPreemptingPriority
    #dockertokyo

    View Slide

  14. NonPreemptingPriority
    ● PreemptingPolicy の導入
    ○ PriorityClass の属性として設定
    ○ Never / PreemptLowerPriority (デフォルト)
    ○ 1.15 では FeatureGates で有効化
    ● Preemption を行わなくなる
    ○ Preemption「する」側に設定
    ○ キュー内の順序には影響を与えない
    #dockertokyo

    View Slide

  15. #dockertokyo

    View Slide

  16. Scheduling Framework
    #dockertokyo

    View Slide

  17. Scheduling Framework の目的
    ● Scheduler のコア機能を抽出
    ○ 肥大化した現在の実装を整理
    ● ユーザはプラグインを実装
    ○ スクラッチから開発する労力を軽減
    ○ 一緒にコンパイルして実行時の速度を保つ
    ● プラグイン間で共有データにアクセス
    ○ 他のプラグインの計算結果を再利用可能
    #dockertokyo

    View Slide

  18. https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-16th
    #dockertokyo

    View Slide

  19. 2 1 3
    Rank Nodes
    Filter Nodes
    Dequeue
    Preempt
    Binding Cycle
    (per Pod)
    Bind
    to Node
    Scheduling
    Cycle
    (serial)
    #dockertokyo

    View Slide

  20. 今回実装された拡張点 (1)
    ● Queue sort
    ○ 優先度キュー内の順序関数を変更
    ● Reserve
    ○ Node のリソースをあらかじめ予約
    ● Permit
    ○ Node が決定した後、Pod を一時待機させる
    ○ v1.15 だと待機を解除する機能がない(?)
    #dockertokyo

    View Slide

  21. 今回実装された拡張点 (2)
    ● Pre-bind
    ○ Kubernetes がサポートしている以外の
    ネットワークボリュームなどをバインド
    ● Post-bind
    ○ リソースの後処理
    ● Unreserve
    ○ 他プラグインのエラー時のクリーンアップ
    #dockertokyo

    View Slide

  22. 優先度キュー内の順序を変更
    #dockertokyo

    View Slide

  23. #dockertokyo

    View Slide

  24. https://ccvanishing.hateblo.jp/entry/2019/07/05/155146
    #dockertokyo

    View Slide

  25. まとめ
    ● Pod Preemption への不満
    ○ バッチ処理系の Pod が中断される
    ○ Priority だけだと充分に制御できない
    ● NonPreemptingPriority
    ○ Preemption「する」側に付ける新属性
    ● Scheduling Framework
    ○ Queue sort プラグインで POP 順序が変更可能
    #dockertokyo

    View Slide

  26. Preempt New Features!
    Presented by チェシャ猫 (@y_taka_23)
    #dockertokyo

    View Slide