场景
一家企业正在将工作负载迁移到Kubernetes集群。初期配置了大量固定节点,导致资源利用率低(<30%),云账单居高不下。目标是实现自动缩放以匹配实际需求,同时控制成本。
症状
- 集群节点CPU/内存使用率持续低于40%。
- 云账单月环比增长超过20%而无业务增长。
- Pod频繁因资源不足而Pending,但节点空闲。
诊断
- 检查Horizontal Pod Autoscaler (HPA)配置:
bash kubectl get hpa -A kubectl describe hpa <name> -n <namespace> - 检查Cluster Autoscaler日志:
bash kubectl logs -n kube-system deployment/cluster-autoscaler - 分析节点利用率:
bash kubectl top nodes kubectl describe node <node-name> - 使用云成本工具(如AWS Cost Explorer)查看按资源类型的支出。
操作命令
设置HPA
kubectl autoscale deployment <deployment-name> --cpu-percent=50 --min=2 --max=10 -n <namespace>
启用Cluster Autoscaler(以AWS EKS为例)
eksctl create iamserviceaccount --name cluster-autoscaler --namespace kube-system \
--cluster <cluster-name> --attach-policy-arn <policy-arn> --approve
kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
kubectl -n kube-system annotate deployment.apps/cluster-autoscaler cluster-autoscaler.kubernetes.io/scale-down-disabled=false
使用Spot实例(如果云提供商支持)
创建节点组:
eksctl create nodegroup --cluster <cluster-name> --node-type t3.medium --nodes-min 2 --nodes-max 20 \
--node-volume-size 20 --spot --asg-access --managed
风险控制
- 设置Pod Disruption Budgets (PDB)防止关键服务中断:
yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: app-pdb spec: minAvailable: 2 selector: matchLabels: app: myapp - 为HPA设置最小和最大副本限制。
- 使用节点选择器和污点/容忍确保专业工作负载。
- 在启用Cluster Autoscaler前,先测试非生产环境。
- 设置预算警告:使用云监控和PagerDuty通知成本异常。
回滚
如果自动缩放导致性能下降或成本上升:
1. 回退HPA:
bash
kubectl delete hpa <name> -n <namespace>
2. 恢复节点组到固定大小:
bash
eksctl scale nodegroup --cluster <cluster-name> --name <ng-name> --nodes 5 --nodes-min 5 --nodes-max 5
3. 删除Cluster Autoscaler:
bash
kubectl delete -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
验证
- 监控HPA状态:
bash kubectl get hpa -w - 观察节点数量变化:
bash kubectl get nodes -w - 在云控制台查看成本趋势(日/周/月)。
- 使用负载测试工具(如Locust)模拟流量,确认缩放反应正常。
何时提交OpsGlobal工单
- 集群自动缩放器无法在预期时间内缩放节点(超过10分钟)。
- HPA目标指标无法达到或无限波动。
- 成本异常激增,尽管缩放策略正常。
- 节点组或自动缩放器配置错误导致服务不可用。
- 需要专家对整体架构进行成本优化审核。
适用场景
适合正在处理 Cloud Migration、Kubernetes, SRE, 云迁移, 自动缩放 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文详细介绍了在云迁移过程中如何通过Kubernetes自动缩放功能优化容量和成本,包括场景分析、症状诊断、操作命令、风险控制、回滚和验证步骤,以及何时应提交OpsGlobal工单。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。