Horizontal Pod Autoscaler

Kubernetes で Pod のレプリカ数を CPU 使用率やカスタムメトリクスに基づいて自動調整する仕組み

Kubernetesスケーリング

Horizontal Pod Autoscaler とは

Horizontal Pod Autoscaler (HPA) は、Kubernetes で Pod のレプリカ数を CPU 使用率、メモリ使用率、カスタムメトリクスに基づいて自動的にスケールイン/スケールアウトする仕組みである。トラフィックの増減に応じて Pod 数を動的に調整し、リソース効率とパフォーマンスを両立する。

基本的な設定

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-server-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-server
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70  # CPU 使用率 70% を目標
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80

CPU 使用率が 70% を超えると Pod を追加し、下回ると削減する。

スケーリングの仕組み

desiredReplicas = ceil(currentReplicas × (currentMetric / targetMetric))

例: 現在 3 Pod、CPU 使用率 90%、目標 70%
desiredReplicas = ceil(3 × (90 / 70)) = ceil(3.86) = 4

HPA コントローラーは 15 秒ごとにメトリクスを確認し、必要に応じてレプリカ数を調整する。

カスタムメトリクスによるスケーリング

CPU/メモリだけでなく、アプリケーション固有のメトリクス (リクエスト数、キューの深さ) でスケーリングできる。

metrics:
  - type: Pods
    pods:
      metric:
        name: http_requests_per_second
      target:
        type: AverageValue
        averageValue: 100  # Pod あたり 100 req/s を目標

Prometheus Adapter や KEDA (Kubernetes Event-Driven Autoscaling) を使って、外部メトリクスソースと連携する。

スケーリングの安定化

急激なスケールイン/スケールアウトを防ぐため、HPA にはクールダウン期間がある。

behavior:
  scaleDown:
    stabilizationWindowSeconds: 300  # 5分間の安定化期間
    policies:
      - type: Percent
        value: 10                     # 1回で最大10%削減
        periodSeconds: 60
  scaleUp:
    stabilizationWindowSeconds: 0    # スケールアップは即座に
    policies:
      - type: Percent
        value: 100                    # 1回で最大100%追加
        periodSeconds: 60

スケールダウンは慎重に (5 分の安定化期間)、スケールアップは即座に行うのが一般的だ。

VPA (Vertical Pod Autoscaler) との違い

種類 スケール方向 調整対象
HPA 水平 (Pod 数を増減) レプリカ数
VPA 垂直 (リソースを増減) CPU/メモリの requests/limits

HPA と VPA は同じメトリクス (CPU) で同時に使うと競合する。HPA で Pod 数を調整し、VPA で個々の Pod のリソースを最適化する場合は、VPA を CPU 以外のメトリクスで使う。

HPA vs VPA vs KEDA

ツール スケール対象 メトリクス
HPA Pod 数 (水平) CPU, メモリ
VPA Pod のリソース (垂直) CPU, メモリ
KEDA Pod 数 (水平) SQS, カスタム

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語