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/メモリ量 |
どちらも併用可能ですが、競合しないよう設計には注意が必要です。