Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

#dockertokyo

Slide 7

Slide 7 text

#dockertokyo

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

NonPreemptingPriority #dockertokyo

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

#dockertokyo

Slide 16

Slide 16 text

Scheduling Framework #dockertokyo

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

#dockertokyo

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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