一、弹性伸缩概述:为什么需要弹性伸缩?
大家好,我是你们的老朋友。今天咱们聊聊弹性伸缩。
说实话,我刚开始做PaaS平台那会儿,对弹性伸缩的理解特别浅。就觉得——哦,不就是流量大了加机器,流量小了减机器嘛。但真正在线上跑起来,才发现这里面的门道多着呢。
咱们先搞清楚一个核心问题:为什么需要弹性伸缩?
1.1 业务流量的“过山车”现象
你想想看,任何一个互联网应用,流量都不是平稳的。我见过最夸张的一个案例,某电商平台平时每秒几百个请求,双十一那天直接飙到每秒几十万。差了上千倍。
如果按峰值去部署资源,平时就是巨大的浪费。按平时去部署,峰值来了直接崩。说白了,这就是个两难问题。
弹性伸缩要解决的,就是这个矛盾。
核心价值一:成本与性能的平衡
弹性伸缩让你不用再“赌”流量。低了就缩,高了就弹。我见过不少团队,为了省事直接按2倍峰值部署,结果一年下来多花了40%的服务器成本。这笔账,算下来真不小。
1.2 弹性伸缩的核心价值
我个人习惯把弹性伸缩的价值归纳为三点:
- 降本增效——资源按需使用,不浪费一分钱。我在项目中遇到过,一个业务从100个Pod缩到10个,一个月省了十几万。
- 提升可用性——流量突增时自动扩容,系统不崩。我记得有一次,某新闻App突然上了热搜,HPA自动弹了50个Pod,整个过程用户无感知。
- 运维自动化——不用半夜爬起来加机器。嗯,这个我深有体会。以前没做弹性伸缩的时候,凌晨三点被电话叫醒扩容,那滋味真不好受。
1.3 弹性伸缩面临的挑战
但是,弹性伸缩不是银弹。我踩过的坑,可以给大家列一列。
挑战一:伸缩的“滞后性”
我曾经遇到过,流量已经涨上来了,但HPA还在等指标采集周期。结果就是——扩容还没完成,系统已经扛不住了。说白了,弹性伸缩是“事后”的,不是“事前”的。
为什么会这样?因为Kubernetes的HPA默认指标采集间隔是15秒,加上扩容的启动时间,整个过程可能需要1-2分钟。对于突发流量,这个时间窗口足够让系统雪崩。
我的建议:对于已知的流量高峰(比如秒杀、大促),提前做“预扩容”。不要完全依赖自动伸缩。我习惯的做法是,在流量高峰前10分钟,手动或通过CronJob把Pod数先弹上去。
1.4 另一个大坑:缩容的“抖动”
你想想看,如果流量一会儿高一会儿低,弹性伸缩频繁触发,会怎么样?
我见过一个真实案例:某个业务配置了HPA,指标稍微波动一下,Pod就缩了又弹、弹了又缩。结果整个集群都在频繁调度,业务反而更不稳定了。
这就是所谓的“抖动”问题。说白了,弹性伸缩不能太敏感。
核心价值二:稳定性优先
弹性伸缩的前提是“稳定”。如果伸缩本身导致系统不稳定,那还不如不伸缩。我建议设置冷却时间(Cooldown),让伸缩动作不要太频繁。
1.5 资源规划的复杂性
还有一个挑战,很多人容易忽略——资源规划。
你弹上来的Pod,得有地方放吧?集群的节点资源够不够?我记得有一次,HPA触发了扩容,但集群里所有节点的CPU都快满了,结果Pod一直Pending。扩容了个寂寞。
所以,弹性伸缩不是只调HPA就完事了。它需要和集群的节点自动伸缩(Cluster Autoscaler)配合。说白了,Pod层要弹,节点层也要弹。
1.6 总结一下
弹性伸缩的核心,说白了就是一句话:用最少的资源,扛住最大的流量。
但实现起来,要考虑的东西很多:
- 指标选什么?CPU、内存还是自定义指标?
- 伸缩策略怎么配?快速弹、慢速缩?
- 怎么避免抖动?冷却时间设多少?
- 节点资源够不够?要不要配合Cluster Autoscaler?
这些内容,咱们后面的章节会一个一个拆开来讲。今天先把“为什么需要弹性伸缩”和“核心价值与挑战”理清楚。后面的路,咱们一步一步走。
嗯,今天就先聊到这儿。下一节,咱们深入讲讲HPA的配置和实战技巧。