本文へスキップ
DevOps

Kubernetesオートスケール完全攻略:HPA/VPA/Cluster Autoscalerの組み合わせ

Deploy 編集部
Deploy編集部。DevOps・クラウドインフラ・AI活用の実装知見を、実際の支援実績にもとづいて発信しています。
2026年04月26日
3分で読める
HPA・VPA・Cluster Autoscalerの役割分担と、コスト・パフォーマンスを両立させる設定。
#Kubernetes #オートスケール #HPA #VPA
Kubernetesオートスケール完全攻略:HPA/VPA/Cluster Autoscalerの組み合わせ

Kubernetesオートスケール完全攻略:HPA/VPA/Cluster Autoscalerの組み合わせ

Kubernetes のオートスケーリングには HPA(Horizontal Pod Autoscaler)・VPA(Vertical Pod Autoscaler)・ Cluster Autoscaler という役割の異なる3つの仕組みがあり、どれか1つだけでは「Podは増えたがノードが足りない」 「リソース要求が過大でコストだけ膨らむ」といった問題が起きる。結論から言えば、Pod数はHPA、Podサイズの初期値調整はVPA、 ノード数はCluster Autoscalerという役割分担が基本形であり、この3つを正しく組み合わせることでコストとパフォーマンスを両立できる。

3つのオートスケーラーの役割分担

仕組み スケールする対象 判断基準 反映速度の目安
HPA(Horizontal Pod Autoscaler) Podのレプリカ数 CPU/メモリ使用率、カスタムメトリクス 15秒間隔でメトリクス評価、数十秒〜数分で反映
VPA(Vertical Pod Autoscaler) Pod単体のCPU/メモリ requests・limits 過去の実績使用量 Recreateモードは再起動を伴うため数分単位
Cluster Autoscaler ノード(ワーカー)の台数 Pending状態のPodの有無 クラウドのインスタンス起動時間に依存、数分程度

HPAとCluster Autoscalerの組み合わせ

最も一般的な構成は、HPAでPod数を需要に応じて増減させ、Podが配置しきれなくなったらCluster Autoscalerがノードを追加する形である。 典型的な設定例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-server
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-server
  minReplicas: 3
  maxReplicas: 30
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

CPU使用率70%を閾値にすると、突発的なトラフィック増にも数十秒〜数分で追随できる一方、 ノードのプロビジョニング(多くのクラウドで2〜5分程度)が追いつかない間はPodがPending状態になる点に注意する。 これを避けるため、平常時から一定のバッファ(例: 常時20%程度の余剰キャパシティ)を残しておく運用が現実的である。

VPAとの併用における注意点

VPAとHPAを同じメトリクス(CPU使用率)で併用すると、互いに競合して不安定になることがある。 VPAは「Podあたりのリソース量」を、HPAは「Podの数」を変えるため、両方が同じシグナルに反応すると スケールの意図が二重になってしまう。実務では、VPAは推奨モード(Off/Recommendationのみ)で使い、 実際のrequests/limits調整は人間がレビューして反映する運用か、HPAとVPAで参照するメトリクスを分離する (例: HPAはリクエスト数、VPAはメモリ使用量)運用のいずれかが安全である。

実装上の落とし穴と対策

  • スケールの振動(フラッピング):閾値ギリギリでPodの増減を繰り返すと、リソースを浪費しつつサービスも不安定になる。HPAの behavior フィールドでスケールダウンの安定化ウィンドウ(例: 300秒)を設定し、急激な縮小を抑える。
  • ノード追加の遅延によるリクエスト超過:Cluster Autoscalerのノード起動を待つ間にリクエストが溢れる場合は、Pod Disruption Budgetとあわせて、常時起動する最小レプリカ数(minReplicas)を余裕を持って設定する。
  • コストの見えにくい増加:VPAの推奨値をそのまま反映し続けると、リソース要求が徐々に肥大化しコストが積み上がることがある。月次でrequests/limitsの実績使用率をレビューする運用を組み込む。

まとめ

HPA・VPA・Cluster Autoscalerはそれぞれ異なるレイヤーを担当するため、「どれか1つを入れれば解決」という発想ではなく、 Pod数・Podサイズ・ノード数という3つの軸で役割を分担させることが重要である。まずはHPA + Cluster Autoscalerの 基本構成から始め、リソース要求の最適化が課題になった段階でVPAを慎重に組み込む、という順序が実務では扱いやすい。

公式ドキュメント: Kubernetes公式 - オートスケーリングの概要

よくある質問

HPAとVPAを同時に使っても問題ないですか?

同じメトリクス(CPU使用率など)で両方を動かすと競合して不安定になります。VPAは推奨モードに留めて人がレビューする、またはHPAとVPAで参照するメトリクスを分けるといった対策が必要です。

Cluster Autoscalerのノード追加はどれくらい時間がかかりますか?

クラウドのインスタンス起動時間に依存しますが、目安として数分程度です。この間はPodがPending状態になりうるため、平常時に一定のバッファキャパシティを残しておく運用が現実的です。

HPAのスケールダウンが不安定になる場合はどうすればよいですか?

behaviorフィールドでスケールダウンの安定化ウィンドウ(例: 300秒)を設定し、閾値付近での振動(フラッピング)を抑えます。
この記事をシェア

関連記事

Deploy 編集部

Deploy編集部。DevOps・クラウドインフラ・AI活用の実装知見を、実際の支援実績にもとづいて発信しています。