gke-workload-scaling について
GKE の運用担当者向けに、手動スケーリング、HPA、VPA、クラスタ自動スケーリングの手順を構成例とともに案内します。
主な機能
- 01Deployment のレプリカ数を手動調整
- 02メトリクスに基づく HPA の設定
- 03VPA のリソース推奨値の設定
- 04ノードプールの自動スケーリング
- 05スケーリングのベストプラクティス
活用シーン
- 01Deployment のレプリカを一時的に増加
- 02CPU や外部メトリクスに応じたスケーリング
- 03実使用量に合わせた Pod リソース調整
- 04スケーリング中の可用性計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ googlecloudplatform/ gke-mcp --skill gke-workload-scalingインストール後、Claude Code で/gke-workload-scalingを入力して読み込まれたか確認します。
同梱ファイルassets/hpa-example.yamlassets/vpa-example.yaml
詳細
GKE ワークロードのスケーリング
このスキルでは、Google Kubernetes Engine(GKE)上のアプリケーションをスケーリングするためのワークフローとベストプラクティスを紹介します。手動スケーリング、Horizontal Pod Autoscaling(HPA)、Vertical Pod Autoscaling(VPA)について説明します。
ワークフロー
1. 手動スケーリング
デプロイメントのレプリカ数を指定した数にすばやくスケーリングします。手動での即時対応やテストに役立ちます。
コマンド:
kubectl scale deployment <deployment-name> --replicas=<number> -n <namespace>
2. Horizontal Pod Autoscaling(HPA)
CPU 使用率、メモリ使用率、またはカスタムメトリクスの観測値に基づいて、Pod 数を自動的にスケーリングします。
前提条件:
- Metrics Server が稼働している必要があります(GKE ではデフォルトで有効です)。
- コンテナでリソースのリクエストと上限が明確に定義されている必要があります。
クイックコマンド:
kubectl autoscale deployment <deployment-name> --cpu-percent=50 --min=1 --max=10
マニフェストを使用する方法(推奨): バージョン管理された設定には YAML マニフェストを使用します。 テンプレートについては、assets/hpa-example.yaml を参照してください。
kubectl apply -f assets/hpa-example.yaml
カスタムメトリクスと外部メトリクス: GKE では、Cloud Monitoring のメトリクス(例:Pub/Sub キューの長さ)に基づくスケーリングには、Custom Metrics Adapter を必要とせず、GKE コントロールプレーンでネイティブにサポートされる External メトリクスタイプを使用する方法が、現在推奨されています。Prometheus で公開されるアプリケーション固有のメトリクスには、Google Cloud Managed Service for Prometheus または Prometheus Adapter を使用できます。
3. Vertical Pod Autoscaling(VPA)
実際の使用量に合わせて、Pod の CPU とメモリの予約量を自動的に調整します。ワークロードの適正なリソースサイズを決定するうえで重要です。
前提条件:
- クラスターで VPA が有効になっている必要があります。
- Autopilot: デフォルトで有効です。
- Standard: 手動で有効にする必要があります。
Standard クラスターで VPA を有効にする:
gcloud container clusters update <cluster-name> --enable-vertical-pod-autoscaling --zone <zone>
更新モード:
Off:推奨値を計算しますが、適用はしません。「ドライラン」分析に適しています。Initial:Pod の作成時にのみリソースを割り当てます。Auto:推奨値とリクエストの差が大きい場合、実行中の Pod を再起動して更新します。InPlaceOrRecreate:Pod を再作成せずに Pod リソースを更新しようとします。インプレース更新ができない場合は、Autoモードに切り替わります(GKE 1.34 以降が必要です)。
例: 設定テンプレートについては、assets/vpa-example.yaml を参照してください。
4. Cluster Autoscaler
ワークロードレベルのスケーラーではありませんが、Cluster Autoscaler は、スケーリングされた Pod の実行に必要な数のノードをクラスターに確保するために不可欠です。
ノードプールで有効にする:
gcloud container clusters update <cluster-name> \
--enable-autoscaling \
--node-pool <node-pool-name> \
--min-nodes <min> \
--max-nodes <max> \
--zone <zone>
ベストプラクティス
- リソースリクエストを定義する: HPA と VPA は、正確なリソースリクエストに依存します。コンテナの仕様には必ず定義してください。
- メトリクスの競合を避ける: HPA と VPA に同じメトリクス(例:どちらも CPU)を使用するよう設定しないでください。挙動が不安定になります。
- 一般的なパターン: HPA は CPU、VPA はメモリを使用します。
- Pod Disruption Budget(PDB): スケーリング時やノードのアップグレード時にアプリケーションの可用性を確保できるよう、PDB を定義します。
- HPA の遅延: HPA には急激な変動を防ぐための安定化期間(デフォルトは 5 分)があります。
- VPA の「Auto」モードのリスク: 「Auto」モードでは、リソースを変更するために VPA が Pod を再起動します。アプリケーションが再起動に適切に対応できること(例:SIGTERM を処理できること)を確認してください。
- 注: デフォルトでは、VPA が退避を実行するには少なくとも 2 つのレプリカが必要です。GKE 1.22 以降では、
PodUpdatePolicyにminReplicasを設定してこの条件を変更できます。
- 注: デフォルトでは、VPA が退避を実行するには少なくとも 2 つのレプリカが必要です。GKE 1.22 以降では、