gke-scaling について
GKE ワークロードのスケーリングを扱う運用ガイドです。HPA、VPA、ノードの自動プロビジョニングに加え、標準設定とリソース適正化の手順を説明します。
主な機能
- 01HPA と VPA の設定
- 02ノード自動プロビジョニング
- 03VPA 推奨値の確認
- 04標準スケーリング設定の適用
- 05ワークロードリソースの適正化
活用シーン
- 01Deployment の HPA 設定
- 02CPU とメモリ要求の見直し
- 03負荷に応じたノード数の調整
- 04GKE ワークロードの過剰リソース削減
MCP 対応
Kubernetes リソースや GKE クラスター、ノードプールを取得・変更する MCP ツールを記載しています。MCP でマニフェスト適用や VPA 推奨値の確認、クラスター設定の更新ができますが、手動スケーリングと簡易 HPA 設定には kubectl が必要です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ google/ skills --skill gke-scalingインストール後、Claude Code で/gke-scalingを入力して読み込まれたか確認します。
同梱ファイルassets/hpa-example.yamlassets/vpa-example.yaml
詳細
GKE ワークロードのスケーリング
このリファレンスでは、GKE でのワークロードのスケーリングについて説明します。ゴールデンパスでは、VPA、OPTIMIZE_UTILIZATION オートスケーリングプロファイル、Node Auto Provisioning がデフォルトで有効になっています。
MCP ツール:
get_k8s_resource、describe_k8s_resource、apply_k8s_manifest、patch_k8s_resource、get_cluster、update_cluster、update_node_pool
ゴールデンパスのスケーリングのデフォルト設定
| 設定 | ゴールデンパスの値 | 備考 |
|---|---|---|
autoscaling.autoscalingProfile | OPTIMIZE_UTILIZATION | コスト削減のため積極的にスケールダウンします |
verticalPodAutoscaling.enabled | true | VPA の推奨値を利用できます |
autoscaling.enableNodeAutoprovisioning | true | NAP は必要に応じてノードプールを作成します |
| GPU リソースの上限(T4、A100) | 各 1000000000 | NAP は GPU ノードをプロビジョニングできます |
スケーリングの仕組み
1. 手動スケーリング
kubectl のみ —
kubectl scaleに相当する MCP の機能はありません。kubectl を直接使用してください。
kubectl scale deployment <DEPLOYMENT> --replicas=<N> -n <NAMESPACE>
2. 水平ポッドオートスケーリング(HPA)
メトリクスに基づいてポッド数をスケーリングします。
簡単な設定(kubectl のみ — kubectl autoscale に相当する MCP の機能はありません):
kubectl autoscale deployment <DEPLOYMENT> --cpu-percent=50 --min=1 --max=10
マニフェストを使用する方法(推奨 — MCP の apply_k8s_manifest を使用):
テンプレートについては、assets/hpa-example.yaml を参照してください。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: <DEPLOYMENT>-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: <DEPLOYMENT>
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
3. 垂直ポッドオートスケーリング(VPA)
実際の使用状況に合わせて、CPU とメモリのリクエストを調整します。ゴールデンパスではデフォルトで有効になっています。
更新モード:
Off— 推奨値のみを提示します(最も安全なため、まずはこちらを使用してください)Initial— ポッドの作成時にのみリソースを設定しますAuto— 新しいリソース値を適用するためにポッドを再起動しますInPlaceOrRecreate— 可能な場合は再起動せずにリソースを更新します(GKE 1.34+)
推奨モードで VPA を作成する:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: <DEPLOYMENT>-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: <DEPLOYMENT>
updatePolicy:
updateMode: "Off"
推奨値を読み取る(MCP の describe_k8s_resource を推奨):
# MCP (preferred)
describe_k8s_resource(parent="...", resourceType="verticalpodautoscaler", name="<DEPLOYMENT>-vpa", namespace="<NAMESPACE>")
# kubectl fallback
kubectl get vpa <DEPLOYMENT>-vpa -o jsonpath='{.status.recommendation}'
完全なテンプレートについては、assets/vpa-example.yaml を参照してください。
4. クラスターオートスケーラー/Node Auto Provisioning(NAP)
Autopilot(ゴールデンパス)では、ノードのスケーリングは完全に管理されます。NAP はワークロードの需要に基づいて、ノードプールを自動的に作成し、サイズを調整します。
Standard クラスターの場合:
# Enable cluster autoscaler on a node pool
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
--enable-autoscaling --node-pool <POOL_NAME> \
--min-nodes <MIN> --max-nodes <MAX> \
--quiet
# Enable NAP
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
--enable-autoprovisioning \
--min-cpu <MIN_CPU> --max-cpu <MAX_CPU> \
--min-memory <MIN_MEM> --max-memory <MAX_MEM> \
--quiet
オートスケーリングプロファイル:
| プロファイル | 動作 | ゴールデンパス? |
|---|---|---|
BALANCED | GKE のデフォルト。控えめにスケールダウンします | いいえ |
OPTIMIZE_UTILIZATION | 積極的にスケールダウンし、アイドル状態を減らします | はい |
| : : リソース : : |
ベストプラクティス
- リソースリクエストを定義する:HPA と VPA は正確なリクエスト値に依存します。必ず設定してください。
- メトリクスの競合を避ける:同じメトリクスに対して HPA と VPA を使用しないでください。一般的なパターンは、CPU に HPA、メモリに VPA を使用する方法です。
- ポッド中断予算:スケーリング時の可用性を確保するため、本番環境のすべてのワークロードに PDB を定義してください。
- HPA の安定化:HPA の安定化ウィンドウはデフォルトで 5 分です。必要に応じて、応答を速めるために
behaviorを調整してください。 - VPA の「Auto」モードに関する注意:Auto モードではポッドが再起動されます。アプリが SIGTERM を適切に処理できることを確認してください。VPA はデフォルトで、エビクションに少なくとも 2 つのレプリカを必要とします。
- ComputeClasses を使用する:ワークロード固有のノード指定(Spot のフォールバック、GPU、特定のマシンファミリー)には、ノードセレクターの代わりに ComputeClasses を使用してください。
適正化ワークフロー
- VPA を
Offモードで 24 時間以上デプロイします - 推奨値を確認します:
kubectl describe vpa <NAME> targetの値を現在のrequestsと比較します- 20% のバッファーを適用します:
new_request = target * 1.2 - パッチ形式を使用して Deployment を更新します
| 条件 | 推奨事項 | リスク |
|---|---|---|
| CPU request が実測 P95 の 5 倍超 | P95 * 1.2 に削減 | 中 |
| メモリー request が実測 P95 の 3 倍超 | P95 * 1.2 に削減 | 中 |
| CPU request が実測 P95 の 2 倍超 | 20% のバッファーを加えて適正化 | 低 |
| リソース制限が未設定 | noisy-neighbor を防ぐため制限を追加 | 低 |