场景
某企业正在将电商平台迁移至云端,业务流量呈现明显的波峰波谷特征(如促销活动)。迁移初期,团队手动调整节点和Pod数量,导致资源利用率低(平均仅30%)且成本高昂。目标是在保证性能的前提下,通过自动扩缩容优化成本。
症状
- 云账单月度环比增长20%以上,但CPU/内存利用率中位数低于40%。
- 高峰时段出现Pod启动延迟、请求超时(5xx错误率>2%)。
- 集群节点数在非高峰时段无变化,但负载已下降。
诊断
- 检查Pod资源请求与限制:
kubectl describe pods -n production,发现部分容器请求过高。 - 查看HPA状态:
kubectl get hpa -n production,确认HPA未配置或阈值不合理。 - 分析集群节点利用率:使用
kubectl top nodes和云监控工具(如AWS CloudWatch)查看CPU/内存。 - 检查Cluster Autoscaler日志:
kubectl logs -n kube-system cluster-autoscaler-xxx,确认扩缩容事件是否被触发。
命令
配置HPA(基于CPU)
kubectl autoscale deployment my-app --cpu-percent=60 --min=3 --max=20 -n production
启用VPA(推荐最小和最大限制)
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: "*
minAllowed:
cpu: 100m
memory: 100Mi
maxAllowed:
cpu: 1
memory: 1Gi
配置Cluster Autoscaler(以AWS为例)
kubectl edit deployment/cluster-autoscaler -n kube-system
# 添加 --nodes=1:10:eks-worker-group-1 参数
风险控制
- 设置HPA最小/最大副本数,避免扩缩过于激进。
- 使用PodDisruptionBudget保护关键服务:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app
- 开启云预算告警(如GCP Budget Alerts),超过阈值自动通知。
- 分阶段部署:先在测试环境验证,再灰度到生产。
回滚
如果出现异常(如持续扩容导致成本飙升或扩缩不稳定):
1. 立即暂停Cluster Autoscaler:kubectl scale deployment/cluster-autoscaler --replicas=0 -n kube-system
2. 恢复HPA的原始配置:kubectl delete hpa my-app -n production或调整阈值。
3. 如果VPA导致Pod重启,删除VPA资源:kubectl delete vpa my-app-vpa -n production
4. 手动调整Deployment副本数至安全值:kubectl scale deployment my-app --replicas=5 -n production
验证
- 自动扩缩事件检查:
kubectl describe hpa my-app -n production,观察Last Scale Time。 - 成本监控:对比云账单周环比,利用率应提升至60%以上。
- 性能指标:高峰时段5xx错误率<1%,P95响应时间<200ms。
何时提交OpsGlobal工单
- 您已按照上述步骤操作,但扩缩容仍不生效或出现严重抖动。
- 需要优化复杂场景(如基于自定义指标的HPA、多种扩展策略组合)。
- 云成本异常增长(如因Spot实例中断导致频繁迁移)。
- 集群节点数超过配额,需要调整云账户限制。
OpsGlobal的SRE专家可在30分钟内介入,协助配置生产级自动扩缩容方案,并建立成本治理仪表板。
适用场景
适合正在处理 Cloud Migration、Kubernetes, 自动扩缩容, 成本优化 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文介绍云迁移过程中如何通过Kubernetes自动扩缩容(HPA、VPA、集群自动伸缩)实现容量与成本的平衡,包含诊断、命令、风险控制与回滚流程。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。