mcpField
G
gke-scaling

gke-scaling

github.com/googleクラウド・DevOps21.6k968 回インストール今日更新
リポジトリ

gke-scaling について

GKE ワークロードのスケーリングを扱う運用ガイドです。HPA、VPA、ノードの自動プロビジョニングに加え、標準設定とリソース適正化の手順を説明します。

主な機能

  1. 01HPA と VPA の設定
  2. 02ノード自動プロビジョニング
  3. 03VPA 推奨値の確認
  4. 04標準スケーリング設定の適用
  5. 05ワークロードリソースの適正化

活用シーン

  1. 01Deployment の HPA 設定
  2. 02CPU とメモリ要求の見直し
  3. 03負荷に応じたノード数の調整
  4. 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.autoscalingProfileOPTIMIZE_UTILIZATIONコスト削減のため積極的にスケールダウンします
verticalPodAutoscaling.enabledtrueVPA の推奨値を利用できます
autoscaling.enableNodeAutoprovisioningtrueNAP は必要に応じてノードプールを作成します
GPU リソースの上限(T4、A100)各 1000000000NAP は 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

オートスケーリングプロファイル:

プロファイル動作ゴールデンパス?
BALANCEDGKE のデフォルト。控えめにスケールダウンしますいいえ
OPTIMIZE_UTILIZATION積極的にスケールダウンし、アイドル状態を減らしますはい
: : リソース : :

ベストプラクティス

  1. リソースリクエストを定義する:HPA と VPA は正確なリクエスト値に依存します。必ず設定してください。
  2. メトリクスの競合を避ける:同じメトリクスに対して HPA と VPA を使用しないでください。一般的なパターンは、CPU に HPA、メモリに VPA を使用する方法です。
  3. ポッド中断予算:スケーリング時の可用性を確保するため、本番環境のすべてのワークロードに PDB を定義してください。
  4. HPA の安定化:HPA の安定化ウィンドウはデフォルトで 5 分です。必要に応じて、応答を速めるために behavior を調整してください。
  5. VPA の「Auto」モードに関する注意:Auto モードではポッドが再起動されます。アプリが SIGTERM を適切に処理できることを確認してください。VPA はデフォルトで、エビクションに少なくとも 2 つのレプリカを必要とします。
  6. ComputeClasses を使用する:ワークロード固有のノード指定(Spot のフォールバック、GPU、特定のマシンファミリー)には、ノードセレクターの代わりに ComputeClasses を使用してください。

適正化ワークフロー

  1. VPA を Off モードで 24 時間以上デプロイします
  2. 推奨値を確認します:kubectl describe vpa <NAME>
  3. target の値を現在の requests と比較します
  4. 20% のバッファーを適用します:new_request = target * 1.2
  5. パッチ形式を使用して Deployment を更新します
条件推奨事項リスク
CPU request が実測 P95 の 5 倍超P95 * 1.2 に削減中
メモリー request が実測 P95 の 3 倍超P95 * 1.2 に削減中
CPU request が実測 P95 の 2 倍超20% のバッファーを加えて適正化低
リソース制限が未設定noisy-neighbor を防ぐため制限を追加低

コメント