Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2025-10-21-TRIAL-Meetup-1.pdf
Search
inuverse
October 21, 2025
58
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2025-10-21-TRIAL-Meetup-1.pdf
inuverse
October 21, 2025
More Decks by inuverse
See All by inuverse
待ち行列理論で考えるGKEの最適なポッド数
inuverse
0
64
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
How to train your dragon (web standard)
notwaldorf
97
6.8k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
690
Code Review Best Practice
trishagee
74
20k
Transcript
Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 1
Kubernetesのポッドへ負荷 検証をトライ! ~待ち行列理論を添えて~ 兒玉 樹 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて Compassアカウント名: Inuverse TRIAL Meeetup #1 最近トライしたこと/
兒玉 樹(Inuverse) 2
目次 0. 自己紹介 1. 動機と示したいこと 2. 準備 3. ローカルのKubernatesでトライする 4.
結果 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 3
0. 自己紹介 兒玉 樹(こだま たつき) 24卒 基幹システムのo11y計装、API開発、負荷検証 趣味:物理学(初期宇宙論) Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて X: https://x.com/mochi_dog_phys TRIAL
Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 4
1. 動機と示したいこと 動機 負荷検証でGKEのポッドにAPIで大量のリクエスト Cloud LoggingやCloud Traceで負荷状況を観測 負荷とポッドリソースはどのような関係か? 示したいこと 負荷と処理能力を軸にして、どれくらいのポッドの数であれば安全?
SLOを満たすポッド数は? Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて 負荷 処理能力 の微分方程式を当初予想した。 負荷 処理能力を厳密に定義しているわけなく、個人的な想像である。例えば負荷が 負荷 のときを 想定すると、明らかに上記の式は破綻する。 TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 5
2. 準備: Kubernatesとは Kubernetesとは携帯可能、拡張可能なコンテナ化されたワークロードととサービスを管理するためのオープンソースプラッ トフォームであり、宣言的な設定と自動化の両方を促進します。広大で、非常に早く成長するエコシステムを持ちます。 Kubernetesのサービス、サポート、そしてツールは広く利用可能です。 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて https://kubernetes.io/docs/concepts/overview/ TRIAL Meeetup
#1 最近トライしたこと/ 兒玉 樹(Inuverse) 6
2. 準備:待ち行列理論とは Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて Image by John Yorke https://queue-it.com/blog/queuing-theory/ TRIAL Meeetup
#1 最近トライしたこと/ 兒玉 樹(Inuverse) 7
2. 準備:待ち行列理論 とは 確率が時間発展し、混雑状況が時事刻々と変化する系を記述するための理論 到着過程 (arrival process) サービス過程 (service process)
M/M/cモデル 今回採用するモデル リクエストがランダムに到着し、処理の時間もランダムで、それを実行してくれるサーバが 個存在する Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて 到着がランダム Poissn分布、処理時間がランダム 指数分布 A. K. Erlang (1909) TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 8
2. 準備:解析計算結果 理論的に右のプロットが得られ る 95パーセンタイル時間が 以内 平均リクエスト数 件 平均処理数 件
等高線 Kubernetesのポッドへ負荷検証をトライ!待ち行列理 論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 9
3. ローカルのKubernatesでトライする:ローカルに構築する Kind (Kubernetes in Docker) Locust (負荷ツール) Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて ※
簡単のため、HPAはしない TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 10
3. ローカルのKubernatesでトライする:結果 Locust, Prometheus, Kindを使い、ポッド数6個のケースを検証 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse)
11
4. 結論と展望 M/M/cモデルによる待ち行列理論による制限を、実測は回避。平衡状態の解析がある程度現象を 説明する能力があることを示唆 理論だけではわからない実践的な負荷試験における重要な学び(誤差・実際の負荷は平衡状態で はない) バースト負荷がかかる場合の予言、コストを考慮した最適ポッド数の算出、HPAによる動的スケ ーリングの挙動をモデル化 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL
Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 12
Appendix Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 13
Appendix: PrometheusのPodディスカバリ設定 今回の実験では、当初PrometheusがRPSを著しく低く報告する問題に直面しました。 原因は、多数あるPodのうち、1つしか監視できていなかったためです。ここではその 解決策を解説します。 問題点:サービスIPへのスクレイピング 当初の設定です。 scrape_configs: - job_name:
'queueing-app' static_configs: - targets: ['queueing-app-service:8000'] queueing-app-service はロードバランサとして機能する単一のIP(ClusterIP)に解決 されるため、Prometheusは常に1つのPodからしかメトリクスを取得できませんでし た。 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 14
Appendix: Prometheus設定の変更点 (Before) Before: 静的設定 (static_configs ) # prometheus.yml (変更前)
scrape_configs: - job_name: 'queueing-app' # ... static_configs: - targets: ['queueing-app-service:8000'] 問題: queueing-app-service という名前は、単一の仮想IP(ClusterIP)を指します。これによ り、Prometheusはロードバランサを介してランダムな1つのPodしか見つけられませんでした。 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 15
Appendix: Prometheus設定の変更点 (After) After: Kubernetesサービスディスカバリ (kubernetes_sd_configs ) # prometheus.yml (変更後)
scrape_configs: - job_name: 'queueing-app' # ... kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_label_app] action: keep regex: queueing-app # ... (relabel_configs to format address) 解決策: role: pod を指定することで、PrometheusはKubernetes APIに「クラスタ内の全てのPod のリストを教えてほしい」と問い合わせます。 その後、 relabel_configs を使って、リストの中から app: queueing-app というラベルを持つ Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 16
ポアソン分布 平均リクエスト数を とする。 観測時間を とし、 となるように分割。 中にリクエストが来る確率は十分小さいと する 平均リクエスト数を とする
時間 中に 回のリクエスト なので、このリクエストが来る確率を とすると...... Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 17
ポアソン分布 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 18
指数分布 1つのポッドあたりの単位時間あたりの平均処理数を 上記がポアソン過程であるとする(単位時間あたりに 個の処理を捌く) までの間、一度も処理されない確率は? つまり、処理時間が を超える確率は 逆に、時間 以内に処理が完了する確率は、上記の余事象を考えれば良くて 以下で処理が完了する確率密度関数は
Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 19
(i) ポッド数未満のリクエスト 単位時間あたりの処理数は 詳細釣り合いの式 待ち Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse)
20
(ii) ポッド数以上のリクエスト( ) Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 21
を求める です。左辺を計算すると Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 22
を求める よって、 です。 なので、行列になんの処理もない確率は上記のようになります。 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 23
平均待ち行列長 リクエストが処理を待っているときの行列の平均の長さ Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 24
平均待ち行列長 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 25
平均待ち行列長 もともと であったので、 待ち です。これで「待ち」が発生する確率を表すことができ、それゆえ、 を「待 ち」の長さとみなすことができます。 Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup
#1 最近トライしたこと/ 兒玉 樹(Inuverse) 26