Kubernetes には、ワークロードの負荷に応じてリソースを自動で調整する オートスケーリング機能 があります。その代表的な手法が Horizontal Pod Autoscaler(HPA) と Vertical Pod Autoscaler(VPA) です。
これらは 目的が異なるスケーリング手法 なので、それぞれの特長を理解し、適切に使い分けることが重要です。
1. Horizontal Pod Autoscaler(HPA)とは?
概要
HPA は Pod の数を動的に増減する ことで負荷に対応する仕組みです。
- CPU 使用率、メモリ使用量、カスタムメトリクス(例: リクエスト数)を基にスケール
- トラフィック増加時に Pod を増やし(スケールアウト)、負荷が減ると Pod を削減(スケールイン)
- アプリケーションの可用性を向上させ、リソースの無駄を削減
HPA の仕組み
- Kubernetes の メトリクスサーバー からリソース使用状況を取得
- 事前設定したしきい値を超えた場合、Pod を増加
- 負荷が減少すると、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 の仕組み
- Kubernetes の リソースメトリクス を監視
- CPU・メモリの使用率に応じて、Pod のリソースを変更
- 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 の運用を効率化しましょう!