Kubernetes のオートスケーリングは、パフォーマンスの維持とコスト最適化を両立する鍵です。しかし、HPA・VPA・KEDA・Cluster Autoscaler など複数のツールがあり、「いつ・何を・どう組み合わせるか」は多くのチームにとって悩みの種です。
CNCF 2025 ベンチマークによれば、これらのツールを適切に組み合わせることで、静的プロビジョニングと比較して 30〜50% のコスト削減 が可能です。本記事では、各ツールの特徴を深掘りし、実践的な組み合わせパターンを解説します。
Kubo は月額48,000円〜のマネージド Kubernetes で、オートスケーリングの設定・運用を容易にします。
HPA(Horizontal Pod Autoscaler):水平スケーリングの基本
HPA の仕組み
Kubernetes 公式ドキュメントによれば、HPA はメトリクスに基づいて Pod のレプリカ数を自動調整します。CloudPilot AI の比較分析では、HPA は「CPU またはメモリがボトルネックとなるステートレスワークロードに最適」と評価されています。
基本設定例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 5分間の安定化期間
policies:
- type: Percent
value: 10
periodSeconds: 60 # 1分あたり最大10%削減
scaleUp:
stabilizationWindowSeconds: 0 # 即座にスケールアップ
policies:
- type: Percent
value: 100
periodSeconds: 15 # 15秒で最大100%増加
カスタムメトリクスによるスケーリング
CPU/メモリだけでなく、Prometheus のカスタムメトリクスでスケーリングできます:
metrics:
- type: Pods
pods:
metric:
name: http_requests_per_second
target:
type: AverageValue
averageValue: "1000"
HPA のベストプラクティス
minReplicasは可用性要件に基づき最低2以上に設定behaviorでスケールダウンの安定化期間を設定し、フラッピングを防止- CPU 使用率の閾値は 70〜80% が一般的(Sedai のガイド参照)
VPA(Vertical Pod Autoscaler):リソースの適正化
VPA の仕組み
Kubeify の分析によれば、VPA は Pod の CPU/メモリの requests と limits を実際の使用状況に基づいて自動調整します。ステートフルワークロード、モノリス、バッチジョブなど、安定した予測可能な使用パターンを持つワークロードに最適です。
VPA の3つの動作モード
| モード | 動作 | 推奨用途 |
|---|---|---|
| Off | 推奨値を生成するが適用しない | 分析・計画フェーズ |
| Initial | Pod 作成時のみ推奨値を適用 | 段階的な導入 |
| Auto | 推奨値を自動適用(Pod 再起動あり) | 安定したワークロード |
Goldilocks による可視化
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: api-server-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
updatePolicy:
updateMode: "Off" # 推奨値の確認のみ
resourcePolicy:
containerPolicies:
- containerName: api
minAllowed:
cpu: "100m"
memory: "128Mi"
maxAllowed:
cpu: "2"
memory: "4Gi"
Goldilocks を併用することで、namespace 全体のリソース推奨値をダッシュボードで確認できます。
VPA の重要な注意点
HPA と VPA の競合に注意: VPA の Auto モードと HPA の CPU/メモリベーススケーリングを同時に使用してはいけません。両コントローラーが競合します。正しい組み合わせは「VPA(Off/Initial モード)+ HPA(カスタムメトリクス)」、または「KEDA で HPA を置き換える」です。
Captain.AI では、AI ワーカーのリソース要件が動的に変動するため、VPA の推奨値を活用した継続的なライトサイジングが重要です。
KEDA:イベント駆動型オートスケーリング
KEDA の革新性
KEDA は Kubernetes ベースのイベント駆動型オートスケーラーで、HPA だけではカバーできない外部イベントソースに基づくスケーリングを実現します。バージョン 2.19 の時点で 70以上のビルトインスケーラー を提供しています。
KEDA の最大の強み:Scale to Zero
Spectro Cloud の解説によれば、イベントがない場合は Pod を0にスケールダウンでき、開発環境やバッチ処理で大幅なコスト削減を実現します。
メッセージキューベースのスケーリング例
RabbitMQ のキュー深度に基づくスケーリング:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: worker-scaler
namespace: production
spec:
scaleTargetRef:
name: queue-worker
pollingInterval: 10 # 10秒ごとにチェック
cooldownPeriod: 60 # 60秒のクールダウン
minReplicaCount: 0 # Scale to Zero!
maxReplicaCount: 20
triggers:
- type: rabbitmq
metadata:
host: "amqp://rabbitmq.production.svc.cluster.local:5672"
queueName: tasks
queueLength: "5" # キュー内5メッセージごとに1 Pod
Prometheus メトリクスによるスケーリング
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: api-scaler
spec:
scaleTargetRef:
name: api-server
minReplicaCount: 1
maxReplicaCount: 50
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus.monitoring.svc.cluster.local:9090
metricName: http_request_duration_seconds_p99
threshold: "0.5" # P99 レイテンシが 500ms を超えたらスケールアップ
query: |
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{service="api"}[5m])) by (le))
Cron ベースのスケーリング
予測可能なトラフィックパターンに対応:
triggers:
- type: cron
metadata:
timezone: Asia/Tokyo
start: "0 8 * * 1-5" # 平日8時にスケールアップ
end: "0 20 * * 1-5" # 平日20時にスケールダウン
desiredReplicas: "10"
組み合わせパターンとベストプラクティス
推奨構成パターン
DEV Community の比較記事と Tasrie IT のベンチマークに基づく推奨パターン:
| ワークロードタイプ | 推奨構成 |
|---|---|
| Web API(ステートレス) | HPA(CPU/カスタムメトリクス)+ Cluster Autoscaler |
| バッチ処理 | KEDA(キュー深度)+ Scale to Zero |
| データベース(ステートフル) | VPA(Auto)+ 手動ノード管理 |
| AI 推論 | KEDA(Prometheus メトリクス)+ Karpenter |
| 開発環境 | KEDA(Cron)+ Scale to Zero |
Karpenter との統合
Karpenter は CNCF 2025 ベンチマークで、Cluster Autoscaler より 40% 高速なノードプロビジョニングを実証しています。Pod レベルのスケーリング(HPA/KEDA)とノードレベルのスケーリング(Karpenter)を組み合わせることで、最大の効率を実現します。
コスト影響の定量化
| 最適化手法 | 期待削減率 |
|---|---|
| HPA のみ | 10〜20% |
| HPA + VPA(Off モード分析) | 20〜30% |
| KEDA(Scale to Zero) | 30〜50%(非本番) |
| 全ツール統合 + Karpenter | 30〜50%(本番含む) |
Kubo なら、月額48,000円〜の明瞭な料金体系でこれらのオートスケーリング機能をフル活用できます。
まとめ:適切なツール選択でコストとパフォーマンスを両立
Kubernetes のオートスケーリングは、単一のツールではなく複数のツールの適切な組み合わせで最大の効果を発揮します:
- hpa: cpu-メモリベースの水平スケーリングの標準。ステートレスワークロードに
- VPA: リソースの適正化。まずは Off モードで分析から開始
- KEDA: 70以上のイベントソースによるスケーリングと Scale to Zero
- Karpenter / Cluster Autoscaler: ノードレベルの自動プロビジョニング
Kubo は、これらのオートスケーリングツールがすぐに使えるマネージド Kubernetes 環境を月額48,000円〜で提供しています。 Captain.AI との統合で AI ワークロードの自動スケーリングも実現できます。
オートスケーリングの設計・導入のご相談は お問い合わせ まで。