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
520
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
98
A Tale of Two Plugins: Safely Extending the Kubernetes Scheduler with WebAssembly
sanposhiho
0
94
人間によるKubernetesリソース最適化の”諦め” そこに見るリクガメの可能性
sanposhiho
2
1.9k
Don't try to tame your autoscalers, tame Tortoises!
sanposhiho
0
630
メルカリにおけるZone aware routing
sanposhiho
2
900
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
sanposhiho
1
420
メルカリにおけるプラットフォーム主導のKubernetesリソース最適化とそこに生まれた🐢の可能性
sanposhiho
1
760
MercariにおけるKubernetesのリソース最適化のこれまでとこれから
sanposhiho
8
3.9k
The Kubernetes resource management and the behind systems in Mercari
sanposhiho
0
310
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
YesSQL, Process and Tooling at Scale
rocio
167
14k
How to Think Like a Performance Engineer
csswizardry
19
1.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
Done Done
chrislema
181
16k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Speed Design
sergeychernyshev
24
570
KATA
mclloyd
29
13k
Making the Leap to Tech Lead
cromwellryan
132
8.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Into the Great Unknown - MozCon
thekraken
31
1.5k
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