Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2025-10-21-TRIAL-Meetup-1.pdf

Avatar for inuverse inuverse
October 21, 2025
58

 2025-10-21-TRIAL-Meetup-1.pdf

Avatar for inuverse

inuverse

October 21, 2025

Transcript

  1. 目次 0. 自己紹介 1. 動機と示したいこと 2. 準備 3. ローカルのKubernatesでトライする 4.

    結果  Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 3
  2. 1. 動機と示したいこと 動機 負荷検証でGKEのポッドにAPIで大量のリクエスト Cloud LoggingやCloud Traceで負荷状況を観測 負荷とポッドリソースはどのような関係か? 示したいこと 負荷と処理能力を軸にして、どれくらいのポッドの数であれば安全?

    SLOを満たすポッド数は?  Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて   負荷 処理能力 の微分方程式を当初予想した。 負荷 処理能力を厳密に定義しているわけなく、個人的な想像である。例えば負荷が 負荷 のときを 想定すると、明らかに上記の式は破綻する。 TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 5
  3. 2. 準備:待ち行列理論 とは 確率が時間発展し、混雑状況が時事刻々と変化する系を記述するための理論 到着過程 (arrival process) サービス過程 (service process)

    M/M/cモデル 今回採用するモデル リクエストがランダムに到着し、処理の時間もランダムで、それを実行してくれるサーバが 個存在する  Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて 到着がランダム Poissn分布、処理時間がランダム 指数分布 A. K. Erlang (1909) TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 8
  4. 2. 準備:解析計算結果 理論的に右のプロットが得られ る 95パーセンタイル時間が 以内 平均リクエスト数 件 平均処理数 件

    等高線  Kubernetesのポッドへ負荷検証をトライ!待ち行列理 論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 9
  5. 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
  6. 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
  7. 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
  8. ポアソン分布 平均リクエスト数を とする。 観測時間を とし、 となるように分割。 中にリクエストが来る確率は十分小さいと する 平均リクエスト数を とする

    時間 中に 回のリクエスト なので、このリクエストが来る確率を とすると......  Kubernetesのポッドへ負荷検証をトライ!待ち行列理論を添えて TRIAL Meeetup #1 最近トライしたこと/ 兒玉 樹(Inuverse) 17