Kubernetes 1.15 の新機能で Preemption を制御せよ #dockertokyo / Docker Meetup Tokyo 31st
by
y_taka_23
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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