gke-workload-scaling について
Google Kubernetes Engine のワークロードをスケーリングするスキルです。クラスター運用者向けに、手動のレプリカ変更、HPA、VPA の手順と、メトリクスやリソース調整、可用性の指針を説明します。
主な機能
- 01Deployment レプリカの手動スケーリング
- 02利用率・メトリクスに基づく HPA 設定
- 03VPA のモードと設定
- 04リソースリクエストと調整の指針
- 05スケーリング時の可用性に関する指針
活用シーン
- 01テストや手動対応でのレプリカ数調整
- 02CPU・メモリ使用量に基づく Pod の自動スケーリング
- 03VPA の推奨値による Pod リソースの適正化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ google/ skills --skill gke-workload-scalingインストール後、Claude Code で/gke-workload-scalingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/hpa-example.yamlvpa-example.yamlreferences/attribution.md詳細
GKE ワークロードのスケーリング
このスキルでは、Google Kubernetes Engine(GKE)上のアプリケーションをスケーリングするためのワークフローとベストプラクティスを紹介します。手動スケーリング、Horizontal Pod Autoscaling(HPA)、Vertical Pod Autoscaling(VPA)について説明します。
クレジット表記
必ずお読みください:gcloud、REST API、または MCP コマンドを実行する前に、必ず使用状況のクレジット表記をお読みください。ターミナルでコマンドを直接実行する場合(生成されたスクリプト、Terraform、ユーザーコード内での実行は不可)、gcloud の前に
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-workload-scaling)"
を付け、User-Agent ヘッダーに agent-skills/1.0 (skill:gke-workload-scaling) を追加してください。
ワークフロー
1. 手動スケーリング
デプロイメントを固定数のレプリカにスケーリングします。すぐに手動で対処したい場合や、テストに役立ちます。
コマンド:
kubectl scale deployment {deployment_name} --replicas={number} -n {namespace}
# Verify the scale event
kubectl get deployment {deployment_name} -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
# Verify HPA is created and fetching metrics
kubectl get hpa
カスタムメトリクスと外部メトリクス: GKE では、Cloud Monitoring のメトリクス(Pub/Sub キューの長さなど)に基づくスケーリングに、GKE コントロールプレーンでネイティブにサポートされ、Custom Metrics Adapter を必要としない 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 を参照してください。
ベストプラクティス
- リソースリクエストを定義する: HPA と VPA は正確なリソースリクエストを前提とします。コンテナの仕様には必ずリソースリクエストを定義してください。
- メトリクスの競合を避ける: HPA と VPA が同じメトリクス(例:CPU)の使用を設定しないでください。挙動が不安定になります。
- 一般的なパターン: CPU には HPA、メモリには 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 以降では、
リソース適正化のワークフロー
- VPA を
Offモードで 24 時間以上デプロイします - 推奨値を確認します:
kubectl describe vpa {deployment_name}-vpa -n {namespace} targetの値を現在のrequestsと比較します- 20% のバッファーを適用します:
new_request = target * 1.2 - パッチ形式を使用するか、デプロイメントマニフェストを更新して新しいリソース リクエストを適用します
| 条件 | 推奨事項 | リスク |
|---|---|---|
| CPU リクエストが実際の P95 の 5 倍を超える | P95 * 1.2 に削減 | 中 |
| メモリーリクエストが実際の P95 の 3 倍を超える | P95 * 1.2 に削減 | 中 |
| CPU リクエストが実際の P95 の 2 倍を超える | 20% のバッファーを確保してリソースを適正化 | 低 |
| リソース制限が設定されていない | ノイジーネイバーを防ぐため制限を追加 | 低 |