Kubernetes(K8s)は、コンテナ化されたアプリケーションの自動スケーリング機能を提供し、トラフィックやリソース負荷に応じて柔軟にPodを増減できます。本記事では、Kubernetesのスケーリング方法について詳細に解説します。
1. Kubernetes のスケーリングとは?
Kubernetes のスケーリング(Scaling)とは、負荷やリソースの使用状況に応じて、Pod やノードの数を自動または手動で調整する機能です。
Kubernetes のスケーリングの種類
| スケーリングの種類 | 適用対象 | 概要 |
|---|---|---|
| 手動スケーリング | Deployment / ReplicaSet | 手動でPod数を変更する(kubectl scale) |
| Horizontal Pod Autoscaler(HPA) | Pod | CPU/メモリ使用率に応じてPod数を増減 |
| Vertical Pod Autoscaler(VPA) | Pod | Podのリソース(CPU/メモリ)を動的に調整 |
| Cluster Autoscaler(CA) | ノード | クラスタ全体のノード数を自動調整 |
2. 手動スケーリング(kubectl scale)
✅ 適用シーン
- テストやデバッグ時に手動でPodの数を増減したい場合。
- トラフィックの急増が予測される場合に、事前にPodを増やす。
🚀 設定手順
kubectl scale deployment my-app --replicas=5
上記のコマンドで、my-app Deployment の Pod 数を 5つに増やす ことができます。
✅ 確認コマンド
kubectl get pods
3. Horizontal Pod Autoscaler(HPA)
✅ 適用シーン
- 負荷が一定の閾値を超えたら Pod を増やす
- 負荷が下がったら Pod を削減 し、リソースコストを抑える
🚀 設定手順
-
メトリクスサーバーをセットアップ
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -
HPA を適用する YAML を作成(例:
hpa.yaml)apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: my-app-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 -
適用コマンド
kubectl apply -f hpa.yaml
✅ HPA の動作確認
kubectl get hpa
HPAがCPU使用率に応じてPodをスケールするようになります。
4. Vertical Pod Autoscaler(VPA)
✅ 適用シーン
- Pod の CPU やメモリを自動で最適化 したい場合
- リソース不足による OOM(Out of Memory)を防ぐ
🚀 設定手順
-
VPAを有効化
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vertical-pod-autoscaler.yaml -
VPA の適用 YAML を作成(例:
vpa.yaml)apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-app-vpa spec: targetRef: apiVersion: apps/v1 kind: Deployment name: my-app updatePolicy: updateMode: "Auto" -
適用コマンド
kubectl apply -f vpa.yaml
✅ VPA の動作確認
kubectl get vpa
VPAがPodのリソース要求を自動的に調整します。
5. Cluster Autoscaler(CA)
✅ 適用シーン
- クラウド環境(AWS, GCP, Azure)で ノードの数を動的に変更 したい
- Pod がスケールしても、ノードのリソースが足りなくなる問題を解決
🚀 設定手順(GKEの場合)
-
Cluster Autoscaler を有効化
gcloud container clusters update my-cluster --enable-autoscaling \ --min-nodes=1 --max-nodes=10 --node-pool my-node-pool -
設定確認
kubectl get nodes
Cluster Autoscaler がノードの負荷を監視し、Podが増えた際にノードを自動追加します。
6. Kubernetes スケーリングの実践例(リアルワールド)
✅ ユースケース 1: 機械学習推論API のスケール
- 機械学習の推論APIは、リクエスト数が急増すると負荷が高くなる
- HPA + CA を組み合わせて、Pod とノードのスケールを最適化
✅ ユースケース 2: ECサイトのブラックフライデー対応
- ECサイトは通常時の 10 倍のトラフィックを処理する必要あり。
- 事前に手動スケールで Pod を増加 → HPA で動的対応
✅ ユースケース 3: SaaSアプリのマルチテナント環境
- クラスタのリソースを効率的に利用するために VPA でメモリ最適化
- 低負荷時にはリソース消費を抑え、コスト削減
7. まとめ
| スケーリング方法 | 用途 |
|---|---|
| 手動スケール | テストや特定の負荷対策 |
| HPA | CPU/メモリに応じた Pod の自動増減 |
| VPA | Pod のリソース最適化(CPU/メモリ) |
| Cluster Autoscaler | クラウド上でノード数を動的調整 |
Kubernetes のスケーリング機能を活用することで、システムの パフォーマンス向上、コスト最適化、運用負荷軽減 を実現できます。用途に応じた適切なスケーリング手法を選択しましょう!