KEDA を使用して Google Kubernetes Engine でゼロへのスケーリングを実現する
Michal Golda
Product Manager
Jean-Marc François
Software Engineer
※この投稿は米国時間 2024 年 12 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Kubernetes Engine(GKE)でアプリケーションを実行しているデベロッパーや企業にとって、アイドル状態のときに Deployment をゼロにスケールダウンできれば、大幅な費用の削減につながります。GKE のクラスタ オートスケーラーはノードプールのサイズを効率的に管理しますが、完全なシャットダウンと起動(ノードプールをゼロまでスケールダウンした後、再びゼロからスケールアップすること)が必要なアプリケーションでは、GKE がゼロへのスケーリング機能をネイティブに提供していないため、代替手段が必要になります。これは、ワークロードが断続的に発生するアプリケーションや、トラフィック パターンが一定でないアプリケーションにとって重要です。
このブログ投稿では、これを実現するためにオープンソースの Kubernetes Event-driven Autoscaler(KEDA)を統合する方法について説明します。KEDA を使用すると、発生する費用をニーズの多寡と直接連動させ、消費したリソースに対してのみ料金を支払うことができます。
ゼロにスケールダウンする理由
ゼロへのスケーリングの主な動機は費用を最小限に抑えることであり、費用の最小化はさまざまなシナリオに当てはまります。技術専門家にとって、これは以下を扱う際に特に重要です。
-
GPU 負荷の高いワークロード: AI / ML ワークロードでは強力な GPU が必要になることが多く、アイドル状態のときにも GPU を稼働させ続けると多大なコストがかかります。
-
ダウンタイムが予測可能なアプリケーション: 使用時間帯が決まっている社内ツール - 営業時間中または特定の曜日にのみ使用されるアプリケーションのリソースをスケールダウンします。
-
季節的なアプリケーション: アクティビティが低い期間が予測可能なアプリケーションでは、オフシーズンの間、ゼロにスケールダウンします。
-
オンデマンドのステージング環境: テストと検証のために本番環境を複製し、テストが完了したらゼロにスケールダウンします。
-
開発、デモ、概念実証環境:
-
短期のデモンストレーション: アプリケーションや機能をクライアントや関係者に紹介し、デモンストレーションが終わったらリソースをスケールダウンします。
-
一時的な概念実証デプロイ: 新しいアイデアや技術を実際の環境でテストし、評価後にゼロにスケールダウンします。
-
開発環境: テスト、コードレビュー、機能ブランチのためにリソースをスピンアップし、不要なときはゼロにスケールダウンして、一時的なワークロードの費用を最適化します。
-
イベント ドリブン アプリケーション:
-
トラフィックが散発的に発生するマイクロサービス: 個々のサービスがアイドル状態のときにはゼロにスケールダウンし、リクエストが到着したときに自動的にスケールアップすることで、予測できないトラフィック パターンに合わせてリソースの使用率を最適化します。
-
サーバーレス ファンクション: サーバーを管理することなくイベントに応答してコードを実行し、非アクティブなときには自動的にゼロにスケールダウンします。
-
障害復旧とビジネスの継続性: 最小限のコアリソースのセットをスタンバイ状態に維持し、障害発生時に迅速にスケールアップできるよう準備しておくことで、費用を最小限に抑えながらビジネスの継続性を確保します。
KEDA for GKE の紹介
KEDA は、さまざまな指標やイベントに基づいて Deployment をスケールできるオープンソースの Kubernetes ネイティブ ソリューションです。メッセージ キューの深さや受信 HTTP リクエストなどの外部イベントに基づいてスケーリング アクションをトリガーできます。また、現在実装されている HorizontalPodAutoscaler(HPA)とは異なり、KEDA はワークロードのゼロへのスケーリングをサポートしているため、断続的なジョブや需要が変動するアプリケーションを処理するための強力な選択肢となります。
ユースケース
KEDA のゼロへのスケーリング機能が役立つ一般的なシナリオとしては、以下のようなものが挙げられます。
1. Pub/Sub ワーカーのスケーリング
-
シナリオ: ある Deployment で、Pub/Sub トピックからのメッセージを処理しています。メッセージがないときにゼロにスケールダウンすると、リソースと費用を節約できます。
-
解決策: KEDA の Pub/Sub スケーラーがメッセージ キューを監視し、状況に応じてスケーリング アクションをトリガーします。ScaledObject リソースを構成することで、キューが空のときに Deployment のレプリカ数をゼロにスケールダウンするよう指定できます。
2. GPU 依存のワークロード(LLM サービング用の Ollama Deployment など)のスケーリング
-
シナリオ: ある Ollama ベースの大規模言語モデル(LLM)で推論タスクを実行しています。GPU の使用量と費用を最小限に抑えるには、推論リクエストがないときに Deployment をゼロにスケールダウンする必要があります。
-
解決策: HTTP-KEDA(KEDA のベータ機能)と Ollama を組み合わせることで、ゼロへのスケーリングが可能になります。Ollama が LLM をサービングしている背後で、HTTP-KEDA が HTTP リクエスト指標に基づいて Deployment をスケールします。
GKE で KEDA を使ってみる
KEDA は、GKE 上でゼロへのスケーリング機能を実現するための強力で柔軟なソリューションを提供します。KEDA のイベント ドリブン型スケーリング機能を活用することで、リソースの使用率を最適化し、費用を最小限に抑え、Kubernetes Deployment の効率を向上させることができます。ゼロへのスケーリングのメカニズムはワークロードのパフォーマンスに影響を与える可能性があるため、使用シナリオを検証することを忘れないでください。ゼロにスケールダウンすると、コールド スタートによるレイテンシが増加する可能性があります。アプリケーションがゼロにスケールダウンされたということは、実行中のインスタンスが存在しないことを意味します。リクエストが到着したときに新しいインスタンスを起動する必要があり、レイテンシが増加します。
状態管理についても考慮する必要があります。インスタンスが終了すると、メモリ内の状態はすべて失われます。
KEDA をすぐに使い始められるように、KEDA を使用して GKE をゼロにスケールダウンするためのガイドを公開しました。このガイドには、GKE で KEDA を使用して Pub/Sub ワーカーをゼロにスケールダウンする手順と、GKE で KEDA を使用して Ollama をゼロにスケールダウンする手順が掲載されています。
KEDA とその各種スケーラーの詳細については、https://keda.sh/docs/latest にある KEDA の公式ドキュメントをご覧ください。
-プロダクト マネージャー Michal Golda
-ソフトウェア エンジニア Jean-Marc François