Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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