运维部署
在 GKE 上为工作负载配置 HPA/VPA…
在 Google Kubernetes Engine 上通过手动扩缩、HPA 和 VPA 管理应用副本数与资源请求,并做资源规格合理化。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 GKE 上为工作负载配置 HPA/V特定
解决思路
- 手动扩缩:执行 `kubectl scale deployment {deployment_name} --replicas={number} -n {namespace}`,再用 `kubectl get deployment {deployment_name} -n {namespace}` 验证扩缩结果。
- 配置 HPA 前确保 Metrics Server 正在运行(GKE 默认启用),并在容器中明确定义 resource requests/limits。
- 快速创建 HPA:执行 `kubectl autoscale deployment {deployment_name} --cpu-percent=50 --min=1 --max=10`。
- 推荐用 YAML manifest 方式配置 HPA(参考 assets/hpa-example.yaml),执行 `kubectl apply -f assets/hpa-example.yaml`,再用 `kubectl get hpa` 验证 HPA 已创建并获取指标。
- 基于 Cloud Monitoring 指标(如 Pub/Sub 队列长度)扩缩时,使用 GKE 控制面原生支持的 External 指标类型,无需 Custom Metrics Adapter;基于 Prometheus 应用指标时使用 Google Cloud Managed Service for Prometheus 或 Prometheus Adapter。
- 配置 VPA 前确认集群已启用 VPA:Autopilot 默认启用,Standard 需手动启用,执行 `gcloud container clusters update {cluster_name} --enable-vertical-pod-autoscaling --zone {zone}`。
- 按需选择 VPA 更新模式:`Off` 仅计算建议不应用(适合 dry run 分析);`Initial` 仅在 Pod 创建时分配资源;`Auto` 在建议与请求差异显著时重启 Pod 更新;`InPlaceOrRecreate` 尝试原地更新 Pod 资源,不可行时回退到 `Auto`(需 GKE 1.34+)。
- VPA 配置参考 assets/vpa-example.yaml 模板。
- 始终在容器 spec 中定义 resource requests,因为 HPA 和 VPA 都依赖准确的资源请求。
- 不要让 HPA 和 VPA 使用同一指标(如都用 CPU),否则会产生抖动;典型模式是 HPA 用 CPU、VPA 用 Memory。
- 定义 Pod Disruption Budgets (PDBs),确保扩缩事件或节点升级期间应用可用性。
- 注意 HPA 有稳定窗口(默认 5 分钟)以防止快速波动。
- VPA `Auto` 模式会重启 Pod 来变更资源,确保应用能优雅处理重启(如处理 SIGTERM);默认 VPA 至少需要 2 个副本才会执行驱逐,GKE 1.22+ 可通过 `PodUpdatePolicy` 中的 `minReplicas` 覆盖。
- 资源规格合理化流程:先以 VPA `Off` 模式部署 24 小时以上;执行 `kubectl describe vpa {deployment_name}-vpa -n {namespace}` 读取建议;将 `target` 值与当前 `requests` 对比;按 20% 缓冲应用 `new_request = target * 1.2`;用 patch 格式或更新 deployment manifest 应用新的资源请求。
- 按风险表调整:CPU request >5x P95 实际值 → 降到 `P95 * 1.2`(中风险);Memory request >3x P95 实际值 → 降到 `P95 * 1.2`(中风险);CPU request >2x P95 实际值 → 按 20% 缓冲做合理化(低风险);未设置资源 limits → 添加 limits 防止 noisy-neighbor(低风险)。
适用边界 · 注意事项
- 不适用于集群级自动扩缩(Cluster Autoscaler)、静态集群容量规划或直接配置节点级 machine types。
- 未启用 VPA 的 Standard 集群无法使用 VPA 相关流程,需先手动启用。
- 不要将 HPA 与 VPA 配置为使用同一指标,否则会造成扩缩抖动。