关于 gke-workload-scaling
面向 GKE 运维人员的工作流指南,涵盖手动扩缩容、HPA、VPA 与集群自动扩缩容,并提供配置示例和操作建议。
主要功能
- 01手动调整 Deployment 副本数
- 02按指标配置 HPA
- 03按资源使用量配置 VPA
- 04启用节点池自动扩缩容
- 05提供扩缩容最佳实践
适用场景
- 01临时增加 Deployment 副本
- 02依据 CPU 或外部指标自动扩容
- 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 队列长度)进行扩缩容时,现代且推荐的方式是使用 External 指标类型。GKE 控制平面原生支持此方式,无需 Custom Metrics Adapter。对于通过 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+ 中,可以通过在