Kubernetes Learning 第23章:Horizontal Pod Autoscaler(HPA) 〜負荷に応じてPodの数を自動で調整〜

Kubernetesの魅力のひとつが「オートスケーリング」です。つまり、アクセスが増えたときには自動でPodを増やし、落ち着いたら減らす、という 自律的なスケーリング を実現できます。

その仕組みの中心にあるのが Horizontal Pod Autoscaler(HPA) です。


🎯 Horizontal Pod Autoscalerとは?

HPAは「CPUやメモリなどの負荷を見て、Podの数を増減する仕組み」です。

  • 水平スケーリング(Horizontal):Podの数を増やす・減らす
  • 垂直スケーリング(Vertical):Pod内のCPU/メモリの割当量を増やす(HPAとは別)

HPAは「Deployment」や「StatefulSet」などのリソースに対して設定できます。


🧪 動作のイメージ

例えば、WebアプリのPodに負荷がかかってCPU使用率が80%を超えたとします。HPAはこれを検知して、自動的にPod数を増やします。

負荷が高い 🚀 → Podを3つから5つに増やす
負荷が下がる 💤 → Podを5つから2つに減らす

このように、常に目標のCPU使用率を維持するようにPodの数を調整してくれます。


⚙️ HPAの仕組み

HPAは以下のコンポーネントと連携します:

  • Metrics Server:リソース使用状況(CPU/メモリ)を収集
  • HPAコントローラー:一定間隔でMetricsを見て、必要なPod数を計算

🛠️ HPAの作成例

まず、Metrics Serverが動いている必要があります(Minikubeでは minikube addons enable metrics-server)。

次に、以下のようにHPAを作成します:

kubectl autoscale deployment myapp \
  --cpu-percent=50 \
  --min=2 \
  --max=5

これで、CPU使用率が50%を超えたらPodを増やし、下回れば減らします。


📄 YAML形式での例

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

この設定により、CPU使用率が50%前後になるようPod数を自動調整します。


📊 メトリクスの種類

HPAはCPU以外にも、次のような指標でスケーリングできます:

  • cpu:CPU使用率(%)
  • memory:メモリ使用率(HPA v2以降)
  • external:外部のメトリクス(Prometheusなどと連携)
  • custom:独自メトリクス

✅ どんなときに使う?

  • 負荷が変動するWebアプリやAPIサーバー
  • マイクロサービスの自動リソース最適化
  • 運用コストの最適化(不要なリソースを削減)

⚠️ 注意点

  • Metrics Serverが必須(ないとHPAは機能しません)
  • レスポンス時間には限界(Podの起動には多少の時間がかかる)
  • 急激なアクセスには対応しきれないケースも → その場合は「事前スケーリング」が有効

📌 まとめ

特徴内容
対象DeploymentやStatefulSetなど
指標CPU, メモリ, 外部メトリクスなど
目的負荷に応じてPodの数を自動で調整する
メリット手動でPod数を調整する手間が不要、リソースの無駄が減る

💡 補足:Vertical Pod Autoscaler(VPA)との違い

種類概要調整対象
HPA水平方向のスケーリングPodの数
VPA垂直方向のスケーリングPodのCPU/メモリ量

どちらも併用可能ですが、競合しないよう設計には注意が必要です。

mh

Related Posts

Kubernetes Learning 第25章:Replica数と冗長性の設計 〜止まらないシステムのために〜

Kubernetes Learning 第24章:Liveness / Readiness Probe 〜Podの健康チェック〜

You Missed

Kubernetes Learning 第25章:Replica数と冗長性の設計 〜止まらないシステムのために〜

  • 投稿者 mh
  • 5月 29, 2025
  • 1 views

Android application development 第29章:キーストアと署名

  • 投稿者 mh
  • 5月 29, 2025
  • 1 views

現場で使えるChrome DevTools実践ガイド 第5章:Consoleパネルの活用

  • 投稿者 mh
  • 5月 28, 2025
  • 5 views

現場で使えるChrome DevTools実践ガイド 第4章:StylesパネルとComputedパネル

  • 投稿者 mh
  • 5月 28, 2025
  • 10 views

Kubernetes Learning 第24章:Liveness / Readiness Probe 〜Podの健康チェック〜

  • 投稿者 mh
  • 5月 28, 2025
  • 10 views

Android application development 第28章:ビルドタイプとプロダクトフレーバー

  • 投稿者 mh
  • 5月 28, 2025
  • 10 views