Slide 1

Slide 1 text

より適応的な Scheduling を目指して チェシャ猫 (@y_taka_23) Container SIG Meet-up 2018 Fall (2018/10/24) #containersig

Slide 2

Slide 2 text

Node 1 1G Replicas: 3 1G Node 2 Node 3 Manifest Scheduling Queue 1G 1G #containersig

Slide 3

Slide 3 text

実際は一筋縄ではいかない #containersig

Slide 4

Slide 4 text

欲しい Pod がブロックされる #containersig

Slide 5

Slide 5 text

Node 1 F Batch B Node 2 Node 3 Scheduling Queue B B Frontend F #containersig

Slide 6

Slide 6 text

Node 1 B B Batch B Node 2 Node 3 Scheduling Queue F Frontend F #containersig

Slide 7

Slide 7 text

Resource Request が不正確 #containersig

Slide 8

Slide 8 text

Node 1 Replicas: 1 2G Node 2 Node 3 Manifest Scheduling Queue 2G #containersig

Slide 9

Slide 9 text

Node 1 Replicas: 1 2G Node 2 Node 3 Manifest Scheduling Queue 2G #containersig

Slide 10

Slide 10 text

Node 1 Replicas: 1 2G Node 2 Node 3 Manifest Scheduling Queue 1G #containersig

Slide 11

Slide 11 text

Node 間のバランスが崩れる #containersig

Slide 12

Slide 12 text

Node 1 Node 2 Node 3 Scheduling Queue #containersig

Slide 13

Slide 13 text

Node 1 Node 2 Node 3 (failure) Scheduling Queue #containersig

Slide 14

Slide 14 text

Node 1 Node 2 Node 3 (failure) Scheduling Queue #containersig

Slide 15

Slide 15 text

Node 1 Node 2 Node 3 Scheduling Queue #containersig

Slide 16

Slide 16 text

素朴な Scheduler の問題点 ● 先着順でしか処理できない ○ 重要な Pod がブロックされる可能性 ● 実際のリソース使用量が反映されない ○ 無駄にコストが掛かる可能性 ● 配置の判断は Pod 生成時のみ ○ 特に Node の追加に追従できない ○ 結果として冗長性が損なわれる可能性 #containersig

Slide 17

Slide 17 text

動的な状況が反映されない #containersig

Slide 18

Slide 18 text

もっと適応的 (adaptive) に #containersig

Slide 19

Slide 19 text

18.06 18.09 18.12 #containersig

Slide 20

Slide 20 text

18.06 18.09 18.12 v1.11: Priority + Preemption (beta) https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ #containersig

Slide 21

Slide 21 text

Priority と Preemption ● Priority ○ 各 Pod に優先度を定義 ○ Scheduler のデキューが優先度順になる ● Preemption ○ Pod を配置できる Node がないときに発動 ○ 稼働中の低優先度 Pod を強制的に evict ○ 影響が小さくなる Node を選ぶ #containersig

Slide 22

Slide 22 text

Node 1 Batch B Node 2 Node 3 Scheduling Queue B Frontend F #containersig F B

Slide 23

Slide 23 text

18.06 18.09 18.12 v1.11: Priority + Preemption (beta) https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ v1.12: Vertical Pod Autoscaler (beta) https://github.com/kubernetes/autoscaler/ #containersig

Slide 24

Slide 24 text

Vertical Pod Autoscaler ● Resource Request の推奨値を算出 ○ Metrics Server から得た実データを参照 ○ 許容できる Request の範囲を計算 ● 自動的に推奨値を適用 ○ 実データを元にした Scheduling が可能に ○ 許容範囲に収まらない Pod を evict ○ Admission Webhook で Pod 作成に割込み #containersig

Slide 25

Slide 25 text

Node 1 Replicas: 1 2G Node 2 Node 3 Manifest Scheduling Queue 1G #containersig

Slide 26

Slide 26 text

18.06 18.09 18.12 v1.11: Priority + Preemption (beta) https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ v1.12: Vertical Pod Autoscaler (beta) https://github.com/kubernetes/autoscaler/ v1.13: Descheduler (incubator 卒業?) https://github.com/kubernetes-incubator/descheduler #containersig

Slide 27

Slide 27 text

Descheduler ● 運用中に崩れた Pod のバランスを回復 ○ 現状デーモンではなく使い切りのコマンド ○ クラスタ構成の変化後に実行 ● 特定の条件下で Pod を evict ○ Replica が同じ Node に固まっている ○ リソース利用率が一定以下の Node がある ○ Affinity の条件に違反している #containersig

Slide 28

Slide 28 text

Node 1 Node 2 Node 3 Scheduling Queue #containersig

Slide 29

Slide 29 text

まとめ:適応的な Scheduling ● Priority と Preemption ○ 重要な Pod を優先的に配置 ● Vertical Pod Autoscaler ○ 実使用量を見て Resource Request を調整 ● Descheduler ○ 運用中に生じた Pod の偏りを修正 ○ Contributor が足りないらしいので是非 #containersig

Slide 30

Slide 30 text

Have a Nice Scheduling! Presented by チェシャ猫 (@y_taka_23) #containersig