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

Podのオートスケーリングに苦戦し続けている話

Ojima Hikaru
September 25, 2024

 Podのオートスケーリングに苦戦し続けている話

"2024/09/27 [みてね x アソビュー] EKS運用お困り事例紹介" の発表資料です。

EKS上でWebサーバーやジョブワーカーを運用する際に、Podオートスケーリングで困っている話を紹介しています。

Ojima Hikaru

September 25, 2024
Tweet

More Decks by Ojima Hikaru

Other Decks in Technology

Transcript

  1. ©MIXI Podオートスケーリングとは? 負荷に応じてPodの数を自動的に増減させる仕組み Pod Pod Pod Pod Pod Pod Pod

    Pod Pod Pod ユーザーが増えてきたら Podも増やす ユーザーが減ってきたら Podも減らす
  2. ©MIXI HorizontalPodAutoscaler (HPA) • Kubernetesでは HorizontalPodAutoscaler を利用する • HorizontalPodAutoscalerでは、Pod数を調整したい対象のDeploymentと、オートスケー リングの基準となるメトリクス、その目標値を定義します。

    • メトリクスはサービスの負荷と連動するものを選びます • 指定したメトリクスが目標値くらいになるようにPod数を調整する。 • よく使われるメトリクスは “CPU利用率” CPU利用率が下がってき たら… CPU利用率が目標値まで上がるように Podを減らす CPU利用率が上がってき たら… CPU利用率が目標値まで下がるように Podを増やす
  3. ©MIXI みてねとPodオートスケーリング • 『家族アルバム みてね』(以下、みてね)のバックエンドは、主に2種類のコンポー ネントで構成されている • ① Webサーバー ◦

    ユーザーからのリクエストを直接受ける ◦ レスポンスの遅延は許されない • ② ジョブワーカー ◦ 非同期ジョブを実行する ◦ 多少の遅延は許される • それぞれにPodオートスケーリングを適用している Webサーバー ジョブ キュー ジョブワーカー
  4. ©MIXI CPU利用率を基準にしたオートスケーリングのお困りポイント • CPU利用率が意図せぬ要因により下がってしまうことがある。 ◦ 本来は、サービスの負荷の低下にともなってCPU利用率が下がることを期待している。 • 例えば… ◦ サービスから呼び出している外部APIのレスポンスタイムが悪化する

    ◦ 異常に大きなファイルを処理することによりIO処理の比率が増える そうなると サービス負荷は下がっていないのに、CPU利用率が低下する → サービス負荷は下がっていないのに、Pod数が減少する → 必要なPod数を下回り、サービスのパフォーマンスが悪化する❗ (障害に発展したことも複数回…)
  5. ©MIXI ジョブワーカーのオートスケーリング • CPU利用率以外のメトリクスを使いたい そこで、KEDA と Prometheus を組み合わせて、任意のメトリクスをオートスケーリングの 基準として使えるようにしました。 各種

    Prometheus Exporter 各種 コンポーネン ト 各種 コンポーネン ト 各種 コンポーネン ト 各種 Prometheus Exporter 各種 Prometheus Exporter Prometheus KEDA Horizontal Pod Autoscaler 詳しくは弊社ブログで紹介しています https://team-blog.mitene.us/k8s-scale-pods-with-keda-4bac421735a0
  6. ©MIXI ジョブワーカーのオートスケーリング ③「補正付きワーカー稼働率」を基準にしたオートスケーリング • 「補正付きワーカー稼働率」が100%になるように調整する • 負荷が上がっていく時 – ジョブが滞留し始めると、ワーカー稼働率120%と見なされス ケールアウトする

    • 負荷が下がっていく時 – ワーカーが暇になり始めると、稼働率100%になるようにス ケールインする → とてもいい感じ! ←切り替えのタイミング 黄色 – プロセス数 緑色 – 稼働中のプロセス数