Blank white background with no objects or features visible.

TrueFoundryはSeldon AIの買収を発表し、エンタープライズAI向けコントロールプレーンを拡張します。プレスリリース全文はこちら→

Kubernetesにおけるスケール・トゥ・ゼロ:Elastiの深掘り

By TrueFoundry

Published: July 4, 2026

Elasti は、アイドル時にサービスをゼロにスケールダウンし、オンデマンドでスケールアップできるようにすることで、Kubernetesのリソース使用量を最適化するよう設計された革新的なオープンソースソリューションです。Kubernetesコントローラーとリクエストリゾルバーという2つのコンポーネントアーキテクチャで構築されており、Elastiはコストを最小限に抑えながら、サービスの可用性をシームレスに管理します。この記事では、そのアーキテクチャ、インストール、運用フローについて技術的な解説を行い、Kubernetes環境でElastiを効果的に統合し、拡張できるようになることを目指します。

💡この機能はTruefoundryのオートスケーリングスイートに含まれています。詳細については、 ドキュメント

ゼロスケールの現状

KubernetesはHPAやKEDAのようなソリューションを通じて堅牢なスケーリング機能を提供していますが、レプリカをゼロにスケールすることは依然として困難です。既存のアプローチは通常、2つのカテゴリに分類されます。

  1. ネイティブKEDAスケーリング - KEDAはイベントメトリクスを使用してデプロイメントをゼロにスケールできますが、スケールアップ時のコールドスタート期間中に受信リクエストが失われる可能性があります。
  2. フルサービスメッシュ (例:Knative) - 包括的なゼロスケールを提供しますが、大幅なアーキテクチャ変更と高い運用オーバーヘッドを伴います。
  3. HTTPプロキシ (例:KEDA HTTPアドオン) - 永続的なプロキシレイヤーを維持し、サービスがスケールアップした後でもレイテンシーを発生させます。

なぜElastiなのか?

Elastiはこれらの制限に対処するために、3つの主要な設計目標を掲げて作成されました。

  1. 軽量な統合 - コード変更なしで既存のデプロイメント/サービスと連携します。
  2. プロキシによるオーバーヘッドなし - サービスがスケールアップしたら、リクエストパスから外れる。
  3. コスト最適化スケーリング - 常に稼働するコンポーネントを維持することなく、真のゼロスケールを実現。

仕組み

Elastiは、サービスのスケーリングを管理するために連携して動作する2つの主要コンポーネントで構成されています。

コントローラー(オペレーター):

  • Kubernetesクラスター内のElastiServiceリソースを監視します。
  • リアルタイムのトラフィックメトリクスに基づいて、サービスを0から1の間で動的にスケールします。

リゾルバー:

  • サービスがスケールダウンされている場合、受信リクエストを傍受するプロキシとして機能します。
  • これらのリクエストをキューに入れ、コントローラーにサービスをスケールアップするよう通知し、リクエストが失われないようにします。

サービスへのリクエストの定常状態フロー

このモードでは、すべてのリクエストはサービスポッドによって直接処理されます。Elastiリゾルバーはリクエストパスに関与しません。Elastiコントローラーは、設定されたクエリでPrometheusをポーリングし続け、その結果を閾値と比較して、サービスをスケールダウンできるかどうかを確認します。

定常状態フロー

リクエストがない場合の0へのスケールダウン

Prometheusからのクエリが閾値未満の値を返した場合、Elastiはサービスを0にスケールダウンします。0にスケールする前に、リクエストをElastiリゾルバーに転送するようにリダイレクトし、その後、Rollout/Deploymentを0レプリカに修正します。また、Kedaが使用されている場合はKedaを一時停止し、KedaはminReplicasが1に設定されているため、サービスがスケールアップされるのを防ぎます。

0へのスケールダウン

最初のリクエストが到着した際の0からのスケールアップ。

サービスが0にスケールダウンされているため、すべてのリクエストはElastiリゾルバーに到達します。最初のリクエストが到着すると、Elastiはサービスを設定されたminTargetReplicasまでスケールアップします。その後、急なリクエストの急増に備えて、Kedaを再開しオートスケーリングを継続します。また、ポッドが起動すると、サービスを実際のサービスポッドを指すように変更します。ElastiResolverに到達したリクエストは6分間リトライされ、クライアントに応答が返されます。ポッドの起動に6分以上かかる場合、リクエストは破棄されます。

現在0にスケール済み
リクエストを受信中

はじめに

Elastiでシンプルなアプリケーションをデプロイする

  1. ローカルクラスターの作成

minikube start

または

kind create cluster --name elasti-demo

または


Docker Desktopでローカルクラスターを作成する

  1. Prometheusのセットアップ

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
 --namespace monitoring \
 --create-namespace \
 --set alertmanager.enabled=false \
 --set grafana.enabled=false \
 --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

Prometheusを monitoring 名前空間にインストールおよび設定します。

Prometheusはnginx ingressからメトリクスを読み取り、そのメトリクスはElastiによってクエリされ、サービスをゼロにスケールしたり、ゼロからスケールしたりするタイミングの決定に利用されます。

  1. nginx ingressのセットアップ

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
 --namespace ingress-nginx \
 --set controller.metrics.enabled=true \
 --set controller.metrics.serviceMonitor.enabled=true \
 --create-namespace

nginxコントローラーを ingress-nginx 名前空間にデプロイします。

このコントローラーは、デモのhttpbinサービスへのトラフィックをルーティングするために使用されます。

4. Elastiのセットアップ:

helm repo add elasti https://charts.truefoundry.com/elasti
helm repo update
helm install elasti oci://tfy.jfrog.io/tfy-helm/elasti \
 --namespace elasti --create-namespace

elastiネームスペースにhelmでElastiをインストールする

Elastiがインストールされると、その主要な2つのコンポーネントが稼働しているのが確認できます。

  • コントローラー/オペレーター: メトリクスを監視することで、トラフィックの切り替えとスケーリングを管理します。
  • リゾルバー: 受信リクエストをインターセプトし、キューに入れ、プロキシします。

より高度な設定については、以下を参照してください。 values.yaml helmのバリューファイルにあるすべての設定オプションを確認してください。

  1. デモアプリケーションをデプロイする

kubectl create namespace elasti-demo
kubectl apply -n elasti-demo -f \
https://raw.githubusercontent.com/truefoundry/elasti/refs/heads/main/playground/config/demo-application.yaml

httpbinサービスを elasti-demo ネームスペースにデプロイしています。

このhttpbinサービスは、Elasti経由でトラフィックを処理するサービスの設定方法をデモンストレーションするために使用されます。

  1. ElastiServiceリソースの作成:

ElastiService用のYAMLファイルを以下の設定で作成します。

apiVersion: elasti.truefoundry.com/v1alpha1
kind: ElastiService
metadata:
 name: httpbin-elasti
 namespace: elasti-demo
spec:
 minTargetReplicas: 1
 service: httpbin
 cooldownPeriod: 5
 scaleTargetRef:
   apiVersion: apps/v1
   kind: deployments
   name: httpbin
 triggers:
   - type: prometheus
     metadata:
       query: sum(rate(nginx_ingress_controller_nginx_process_requests_total[1m])) or vector(0)
       serverAddress: http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090
       threshold: "0.5"

demo-elasti-service.yaml

ファイルが作成されたら、ElastiServiceを適用します。

kubectl apply -f https://raw.githubusercontent.com/truefoundry/elasti/refs/heads/main/playground/config/demo-elastiService.yaml

CRDスペックの主なフィールドは次のとおりです。

  • minTargetReplicas: 最初のリクエストが到着したときに起動する最小レプリカ数。
  • cooldownPeriod: スケールアップ後、スケールダウンを検討するまでに待機する最小時間(秒単位)。
  • triggers: スケールダウンのタイミングを決定する条件のリスト(現在はPrometheusメトリクスのみをサポート)。
  • scaleTargetRef:  HorizontalPodAutoscalerで使用されるものと同様のスケールターゲットへの参照。

詳細およびご自身のユースケースに合わせたElastiServiceの設定については、このドキュメントを参照してください。

セットアップのテスト

これらの手順により、以下のものが利用可能になりました。

  • Ingress nginx がIngressコントローラーとして稼働しています。
  • Prometheus がメトリクス(Ingress NGINXからのものを含む)をスクレイピングするように設定されています。
  • httpbin Ingressルート経由でデプロイされ、アクセス可能です。

この設定により、実際のルーティングシナリオをテストし、Ingressトラフィックのパフォーマンスとメトリクスを監視できます。

この設定をテストするには、nginxロードバランサーにリクエストを送信し、デモサービスのPodを監視します。

kubectl port-forward svc/nginx-ingress-nginx-controller \
 -n ingress-nginx 8080:80

nginxコントローラーへのポートフォワード

kubectl get pods -n elasti-demo -w

httpbinサービスでウォッチを開始する

これで、リクエストを送信できます http://localhost:8080/httpbin すると、サービスがElastiによって1レプリカにスケールされていることが確認できます。

curl -v http://localhost:8080/httpbin

httpbinサービスにリクエストを送信する

その後、サービスはアクティビティがない場合、 cooldownPeriod 秒間(この場合は5秒)ElastiServiceで指定された時間が経過すると、再度スケールダウンされます。

Elastiのアンインストール

Elastiをアンインストールするには、 まず、インストールされているすべてのElastiServiceを削除する必要があります。 その後、インストールファイルを削除するだけです。

kubectl delete elastiservices --all
helm uninstall elasti -n elasti
kubectl delete namespace elasti

比較

機能比較表:

Feature Elasti Knative KEDA HTTP Addon
Scale to Zero
Works with existing services
Zero additional latency
Resource footprint Low High Low
Setup complexity Low High Medium

Elastiを選ぶべき時

Elastiは、次のような場合に最適な選択肢です。

  • 既存のHTTPサービスにスケール・トゥ・ゼロ機能を追加する必要がある場合
  • スケーリング操作中にリクエストの損失がゼロであることを確実にしたい場合
  • 最小限の設定で軽量なソリューションを好む場合
  • 既存のオートスケーラー (HPA/KEDA) との統合が必要な場合

最後に

Elastiは、Kubernetesにおける特定の課題、すなわち、リクエストの整合性を損なうことなく、また過度なオーバーヘッドを課すことなく真のスケール・トゥ・ゼロを実装するという必要性から開発されました。このソリューションは、HPAおよびKEDAによるネイティブなオートスケーリングをサポートしており、既存のサービス設定を変更することなく、効率的なリソース利用を実現します。

このツールをオープンソース化することで、真のスケール・トゥ・ゼロ、リクエスト損失ゼロ、そして最小限の運用負荷を必要とする環境に対し、堅牢なソリューションを提供することを目指しています。

コミュニティからの貢献やフィードバックを歓迎します。詳細については、 開発ドキュメント をご覧ください。

The fastest way to build, govern and scale your AI

Sign Up
Table of Contents

One Gateway for Every LLM, Agent and MCP Server

Book a 30-min with our AI expert

Book a Demo

The fastest way to build, govern and scale your AI

Book Demo
Summarize with
ChatGPT logo by OpenAI
Perplexity AI logo
Blurry red snowflake on white background, symmetrical frosty design with soft edges and abstract shape.

Discover More

November 5, 2025
|
5 min read

エージェンティックAI時代におけるデータレジデンシー:AIゲートウェイはいかに主権的規模とコンプライアンスを実現するか

October 5, 2023
|
5 min read

<Webinar> 企業向け生成AIショーケース

Best Fine Tuning Tools for Model Training
May 3, 2024
|
5 min read

モデルトレーニング向けファインチューニングツール主要6選:2026年版

May 25, 2023
|
5 min read

Open Source LLMs: Embrace or Perish

OpenRouter vs AI Gateway
July 4, 2026
|
5 min read

OpenRouter 対 AIゲートウェイ:どちらがあなたに最適ですか?

comparison
July 4, 2026
|
5 min read

プロンプトエンジニアリング:LLMとの対話方法を学ぶ

Thought Leadership
LLMs & GenAI
July 4, 2026
|
5 min read

True ML Talks #12 - Llama-Index共同創設者

True ML Talks
July 4, 2026
|
5 min read

AIワークロードがクラウド料金を膨らませていませんか?

Thought Leadership
No items found.

Recent Blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.

Frequently asked questions

What does Kubernetes scale to zero mean?

Kubernetes scale to zero means reducing the number of running pods for a workload all the way down to zero replicas during periods of inactivity. When no traffic or demand is present, the deployment consumes no compute resources and incurs no cloud costs. When a new request arrives, the system automatically scales back up from zero and serves the workload.

Which tools enable scale to zero in Kubernetes?

The primary tools enabling scale to zero in Kubernetes include KEDA (Kubernetes Event-Driven Autoscaling), which scales based on external event sources like queues and HTTP traffic, and Knative Serving, which provides serverless-style scale-to-zero behavior for containerized workloads. TrueFoundry's deployment infrastructure also builds on these primitives to offer scale-to-zero for ML model serving, reducing GPU and CPU costs during idle periods.

Does Kubernetes support scale to zero natively?

Kubernetes does not support scale to zero natively through its built-in Horizontal Pod Autoscaler (HPA), as HPA has a minimum replica count of one. Achieving true scale-to-zero requires additional tools such as KEDA or Knative, which extend Kubernetes' autoscaling capabilities to include zero-replica deployments triggered by external events or HTTP request-based scaling.

Take a quick product tour
Start Product Tour
Product Tour