Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
kube-scheduler-simulatorを用いたSchedulerのシミュレーションと...
Search
sanposhiho
September 28, 2021
1
530
kube-scheduler-simulatorを用いたSchedulerのシミュレーションとその仕組み
Kubernetes Meetup Tokyo #45 での資料です
https://k8sjp.connpass.com/event/223232/
sanposhiho
September 28, 2021
Tweet
Share
More Decks by sanposhiho
See All by sanposhiho
kube-scheduler: from 101 to the frontier
sanposhiho
1
110
A Tale of Two Plugins: Safely Extending the Kubernetes Scheduler with WebAssembly
sanposhiho
0
95
人間によるKubernetesリソース最適化の”諦め” そこに見るリクガメの可能性
sanposhiho
2
1.9k
Don't try to tame your autoscalers, tame Tortoises!
sanposhiho
0
630
メルカリにおけるZone aware routing
sanposhiho
2
920
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
sanposhiho
1
430
メルカリにおけるプラットフォーム主導のKubernetesリソース最適化とそこに生まれた🐢の可能性
sanposhiho
1
770
MercariにおけるKubernetesのリソース最適化のこれまでとこれから
sanposhiho
8
3.9k
The Kubernetes resource management and the behind systems in Mercari
sanposhiho
0
310
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Gamification - CAS2011
davidbonilla
80
5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
How to Ace a Technical Interview
jacobian
276
23k
Adopting Sorbet at Scale
ufuk
73
9.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Happy Clients
brianwarren
98
6.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
What's new in Ruby 2.0
geeforr
343
31k
Transcript
kube-scheduler-simulatorを用いたSchedulerのシミュ レーションとその仕組み Kensei Nakada @sanposhiho 1
自己紹介 中田 健誠 / Kyoto Uni (4th year) 普段はバックエンドエンジニアをしてます
Twitter: @sanpo_shiho GitHub: @sanposhiho member of Kubernetes/Kubernetes SIGs
もくじ 1. Kubernetes schedulerの概要 2. Kubernetes scheduler simulatorについて 3. Kubernetes
scheduler simulatorの仕組みについて 3
Kubernetes schedulerについて 4
Kubernetes scheduler PodをどのNodeに割り当てるかを決定するコンポーネント 様々なリソースの状況からPodに最適なNodeを決定する 5
Scheduling Framework 公式Doc: 「Scheduling Framework | Kubernetes」より引用 6
Scheduling Framework 7 ## Scheduling Cycle PodをどのNodeで実行するかを決定する ## Binding Cycle
Scheduling Cycle での決定を実際にクラスターに適応する
Scheduling Framework 公式Doc: 「Scheduling Framework | Kubernetes」より引用 8
Scheduling Framework Scheduling Framework (の Scheduling Cycle) のうち、 • Filter
(+ PreFilter) • Score (+ PreScore) • Normalized Score の結果が主にNodeの決定に影響している (+ Plugin Weight) ※ Extenderについては今回は割愛して説明します。 (scheduler simulatorでもExtenderには現状対応していません。) 9
10
Scheduling Framework Filter Podを実行できない(したくない)Nodeを候補から除外する 例えば… ・リソース不足でPodが実行できないNode ・nodeSelectorの条件に一致しないNode を除外する 11
12 × × 何かしらの観点でNodeを フィルタリングする
13 × × 何かしらの観点でNodeを フィルタリングする × × × × もしこの段階で候補のNodeが全滅した場合
→ Preemptionする → 諦める (Unscheduled)
Preemption Podは priority(優先度)を持つことができます。 優先度は他のPodに対する相対的なPodの重要度を示します。 もしPodをスケジューリングできないときには、スケジューラーはそのPodをスケジューリ ングできるようにするため、優先度の低いPodをプリエンプトする(追い出す)ことを試み ます。
14 公式Doc: 「Pod Priority and Preemption | Kubernetes」より引用
15 × × 何かしらの観点でNodeを フィルタリングする
Scheduling Framework Score 残った候補のNodeをスコアリングする。 例えば… ・全体のNodeのリソースの使用量のバランスがちょうど良くなるNodeを優先 ・Podを実行するコンテナイメージをすでに持っているNodeを優先 16
Scheduling Framework Normalize Score 全てのScoreの結果を踏まえてScoreを修正する 17
18 何かしらの観点でNodeを スコアリングする
Scheduling Framework Plugin Weight Plugin ごとにScoreの重み付けをできる。 (そのプラグインのスコア) × Plugin
Weight 19
20 Score B プラグインの Weightが1 → 10 → 50 Score
A プラグインの Weightが10 → 300 → 500
21 → 10 → 50 Node1 が最終的に選ばれる → 300
→ 500 350 510
仕組みざっくりまとめ Scheduler は Scheduling Framework の流れに沿って動作 • Filter で実行できない/したくないNodeを弾き、 •
Score, Normalized Score でNodeをスコアリングし、 • 最後にPlugin Weightを加味して、 • どのNodeでPodを実行するか決定する 22
Scheduler Configuration 実行する Plugin と Plugin Weightを変更できる (詳しくは公式Doc) 23
[宣伝] 詳しい話は CloudNative Days で 24
web-based Kubernetes scheduler simulator 25
Kubernetes scheduler simulator Web 上から Scheduler の動作をシミュレートすることができるWebApp。 ↓ Kubernetes
SIGs のOrg元で公開 26
Kubernetes scheduler simulator • フロントエンド + バックエンド +
etcd を立ち上げるだけ ◦ 内部的に Kubernetes のクラスターを立ち上げているわけではない ◦ docker image をk8s.gcr.ioから公開予定 27
Background • Scheduler がその Node を選んだ理由は簡単に見ることができない ◦ ログレベルをあげる必要がある (v=10)
◦ ログを確認するには強い権限が必要 ◦ ログだと見にくい (主観) • Scheduler の検証には実際のクラスターを立ち上げる必要がある ◦ そのクラスター上で特定のリソースの状況を作るのもめんどくさい 28
29
特徴 • Web 上からリソースを作成し、クラスターの特定の状態を再現できる 通常の Kubernetes と同様のyaml を使用する
スケジューリングに影響し得る リソースの作成に対応
Pod を作成するとどのNodeに配置 されたかみることができる
特徴 • プラグインごとの結果を全て可視化 ( 次スライド )
どのプラグインがどのNodeに対し てどのような判断を下したかを表 で確認できる
特徴 • Scheduler の設定を Web 上から変更することができる 35
こういうことに使えるよ • Scheduler 自体や Scheduler のプラグインごとの動作の検証 • Scheduler の動作原理の学習 に使用することができる
36
展望 37
展望 38
展望 39
Kubernetes scheduler simulator の仕組み 40
Kubernetes scheduler simulator の仕組み どうやってクラスターを立ち上げずにシミュレートしているの? 41
Kubernetes scheduler simulator の仕組み Scheduler に必要なコンポーネントのみを実行 (scheduler_perfの仕組みを参考にしている) scheduler_perfについて詳しくは
こちらのスライドを参照 → https://speakerdeck.com/sanposhiho/kuberneteshaschedulerfalsepahuomansuwodofalseyouniji-ce-siteiruka 42
Simulator に必要なコンポーネント • kube-apiserver (+ etcd) • scheduler • pv
controller 43
Kubernetes scheduler simulator の機能 • 各リソースの作成/変更/更新/削除 • schedulerの設定の変更 • プラグインごとのスケジューリング結果の収集/閲覧
44
Scheduler の設定変更 1. 現在動いているSchedulerを停止させる 2. ユーザーがリクエストしたKubeSchedulerConfigurationを元にSimulator向けの設定 を生成 3. Schedulerを2の設定で起動する
45
Scheduler の設定変更 1. 現在動いているSchedulerを停止させる 2. ユーザーがリクエストしたKubeSchedulerConfigurationを元にSimulator向けの設定 を生成 ← ? 3.
Schedulerを2の設定で起動する 46
プラグインの結果の収集 プラグイン = interfaceを満たすことで実装できる ←プラグインのFilterメソッドを実行 ↓↑結果の記録 47
プラグインの結果の収集 • どのプラグインが • どのNodeに対して • どのような結果を出したのか を全て収集する ←プラグインのFilterメソッドを実行
↓↑結果の記録 48
プラグインの結果の収集 結果を記録できるようにした新たなプラグインを動的に生成し、 デフォルトのプラグインの代わりに使用している 49
プラグインの結果の収集 結果を記録できるようにした新たなプラグインを動的に生成し、 デフォルトのプラグインの代わりに使用している 例えばFilterだとこんな感じ↓(/scheduler/plugin/plugins.go#L292) ←元のFilterプラグインのFilterメソッドを実行 結果の記録 50
プラグインの結果の収集 各プラグインは同一の resultstore を持っており、そこに結果が貯められていく 51
プラグインの結果の収集 各プラグインは同一の resultstore を持っており、そこに結果が貯められていく ↓ Schedulingの終了時に全ての結果をまとめたものがPodのAnnotationに反映される 52
プラグインの結果の収集 各プラグインは同一の resultstore を持っており、そこに結果が貯められていく ↓ Schedulingの終了時に全ての結果をまとめたものがPodのAnnotationに反映される ↓ フロントエンドがPodのAnnotationから表にして表示 53
プラグインの結果の収集まとめ 1. スケジュールの際に Filter メソッドが呼び出される 2. Filter メソッド内で元のプラグインの Filter メソッドを呼び出して結果を取得
3. 取得した結果を resultstore に記録 4. (スケジュールが進む) 5. スケジュールの終了時にresultstore が結果を Pod の annotation に記録 ↓↑結果の記録 54
まとめ • Scheduler では内部で様々なPluginが動作している • Kubernetes scheduler simulatorでは、Pluginごとの動作を検証しつつ、Schedulerを シミュレートできる •
内部的にはSchedulerに必要なコンポーネントのみを立ち上げ、Pluginを動的に入 れ替えることでPluginの結果の取得を可能にしている • feature request/bug報告などお待ちしています 55