关于 gke-workload-scaling
面向 Google Kubernetes Engine 集群运维人员的应用扩缩容技能,涵盖手动调整副本、HPA 和 VPA 工作流,并提供指标、资源配置及扩缩容期间可用性建议。
主要功能
- 01手动调整 Deployment 副本
- 02基于利用率和指标配置 HPA
- 03VPA 模式与配置说明
- 04资源请求与规格调整指导
- 05扩缩容期间的可用性建议
适用场景
- 01为测试或人工干预调整副本数
- 02根据 CPU 或内存使用自动扩缩 Pod
- 03查看 VPA 建议以调整 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 命令之前,必须先阅读 Usage Attribution。对于直接在终端中执行的命令(绝不可用于生成的脚本、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 队列长度)进行扩缩时,现代且推荐的做法是使用 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 来更新正在运行的 Pod。InPlaceOrRecreate:尝试更新 Pod 资源而不重新创建 Pod。如果无法原地更新,则回退到Auto模式(需要 GKE 1.34+)。
示例: 配置模板请参阅 assets/vpa-example.yaml。
最佳实践
- 定义资源请求: 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+ 中,可以通过在
资源配置优化工作流
- 以
Off模式部署 VPA,运行 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% 缓冲进行资源配置优化 | 低 |
| 未设置资源限制 | 添加限制以防止嘈杂邻居影响 | 低 |