0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Horizontal Pod Autoscaler(HPA)とVertical Pod Autoscaler(VPA)とは?

Posted at

Kubernetes には、ワークロードの負荷に応じてリソースを自動で調整する オートスケーリング機能 があります。その代表的な手法が Horizontal Pod Autoscaler(HPA)Vertical Pod Autoscaler(VPA) です。

これらは 目的が異なるスケーリング手法 なので、それぞれの特長を理解し、適切に使い分けることが重要です。


1. Horizontal Pod Autoscaler(HPA)とは?

概要

HPA は Pod の数を動的に増減する ことで負荷に対応する仕組みです。

  • CPU 使用率、メモリ使用量、カスタムメトリクス(例: リクエスト数)を基にスケール
  • トラフィック増加時に Pod を増やし(スケールアウト)、負荷が減ると Pod を削減(スケールイン)
  • アプリケーションの可用性を向上させ、リソースの無駄を削減

HPA の仕組み

  1. Kubernetes の メトリクスサーバー からリソース使用状況を取得
  2. 事前設定したしきい値を超えた場合、Pod を増加
  3. 負荷が減少すると、Pod の数を減らす

HPA の設定例

以下は、CPU 使用率が 50% を超えたら Pod 数を増やす 設定です。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

この設定では、

  • 最低 2 Pod、最大 10 Pod までスケール
  • CPU 使用率が 50% を超えたら新しい Pod を追加

HPA のメリット

動的スケーリングでトラフィック変動に対応
高可用性を確保しつつ、リソースを最適化
スケールイン・スケールアウトが自動化され、運用コスト削減

HPA のデメリット

⚠️ Pod の起動に時間がかかる(急激な負荷増に弱い)
⚠️ メモリ使用量の増減には対応しづらい


2. Vertical Pod Autoscaler(VPA)とは?

概要

VPA は Pod の CPU・メモリリソースを動的に調整する ことで最適なリソース配分を実現します。

  • 個々の Pod に 最適なリソース割り当て を行う
  • スケールアウトせずに、既存の Pod のリソースを増やす
  • CPU やメモリの不足・過剰配分を防ぎ、リソース効率を向上

VPA の仕組み

  1. Kubernetes の リソースメトリクス を監視
  2. CPU・メモリの使用率に応じて、Pod のリソースを変更
  3. Pod を一時停止し、新しいリソース割り当てで再起動

VPA の設定例

以下は、Pod の CPU・メモリを自動調整する VPA の設定です。

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: example-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  updatePolicy:
    updateMode: Auto
  resourcePolicy:
    containerPolicies:
      - containerName: '*'
        minAllowed:
          cpu: "100m"
          memory: "256Mi"
        maxAllowed:
          cpu: "2"
          memory: "4Gi"

この設定では、

  • CPU 100m ~ 2コア、メモリ 256Mi ~ 4Gi の範囲で自動調整
  • リソースの変更が必要な場合、Pod を再起動して適用

VPA のメリット

リソースの最適化により、過剰プロビジョニングを防げる
HPA と組み合わせると、より効率的なスケーリングが可能
Pod の数を増やさずに、処理能力を向上できる

VPA のデメリット

⚠️ Pod の再起動が必要(ダウンタイムが発生する可能性あり)
⚠️ トラフィック急増には対応できない(HPA と併用推奨)


3. HPA と VPA の使い分け

HPA(水平スケーリング) VPA(垂直スケーリング)
動作方式 Pod の数を増減する Pod のリソース(CPU・メモリ)を調整する
適用対象 トラフィック増減に対応 リソースの最適化(過剰 or 不足の防止)
スケール方式 スケールアウト/スケールイン リソース増減(Pod 再起動)
メリット 即時対応が可能、可用性向上 リソース効率が良くコスト削減できる
デメリット CPU 以外のリソース調整が難しい Pod の再起動が必要(ダウンタイムあり)
適用例 Web アプリ・API サーバー バッチ処理・機械学習モデル

4. HPA & VPA のベストプラクティス

✅ HPA と VPA を組み合わせる(Hybrid Scaling)

  • VPA を「オフライン最適化」用に設定し、リソースを適正化
  • HPA を「リアルタイムスケーリング」用に設定し、即応性を確保

✅ 事前にメトリクスを分析して閾値を設定

  • Prometheus や Datadog で負荷パターンを分析
  • 最適な CPU 使用率の閾値を決める

5. まとめ

  • HPA は「スケールアウト」 に向いており、トラフィック急増時に有効
  • VPA は「リソース最適化」 に向いており、過剰プロビジョニングを防ぐ
  • HPA と VPA を併用することで、最適なスケーリングが可能

適切なスケーリング戦略を選び、Kubernetes の運用を効率化しましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?