通过HPA+CronHPA组合应对业务复杂弹性伸缩场景

打印 上一主题 下一主题

主题 862|帖子 862|积分 2586

本文分享自华为云社区《通过HPA+CronHPA组合应对业务复杂弹性伸缩场景》,作者:云容器大未来。
背景

在k8s集群中,容器程度自动伸缩(HPA),可以根据容器资源的使用量,在设置好的副本范围内,自动扩缩容工作负载副本数(replicas)。HPA是基于指标阈值举行伸缩的,常见的指标有CPU和内存。也可以通过自定义指标,例如QPS、毗连数等举行伸缩。但是存在一种场景:基于指标的伸缩存在一定的时延,这类时延主要包含:采集时延(分钟级) 、 判定时延(分钟级) 和伸缩时延(分钟级)。此类分钟级时延,无法适应在短期内极速上涨的业务流量,可能会导致应用CPU飚高,相应时间变长。
容器定时程度自动伸缩(CronHPA)是对HPA的一种补充,对于有固定时间段高峰期的业务,可以提前将容器的实例数量扩容完毕,防止业务流量突发造成性能不敷,导致业务耽误。而在业务低谷时,触发定时回收资源。
在某些业务场景下,存在突发流量的同时,又具有明显的波峰波谷,若同时设置CronHPA和HPA两种策略,可能出现如下环境:在业务高峰到来前,CronHPA定时任务提前扩容业务容器副本,而此时HPA可能会检测到资源使用率很低而触发实例缩容,导致预扩容的策略失效。
华为云CCE服务支持联动设置CronHPA策略和HPA策略,通过动态设置HPA的副本范围上下限,来调解业务容器实例数。

使用示例

日常生活中,许多业务场景在流量突发的同时具有明显的波峰波谷,且对相应时延很敏感,例如:
1. 网络游戏:X游戏客户,旗下某大型网络游戏,在晚上或周末、节假日等高峰期间,玩家数量会急剧增加,导致游戏服务器的负载瞬间飙升,此时负载副本数若扩容较慢,可能导致网络卡顿,游戏体验显著下降;
2. 视频直播:X视频直播APP,在某些大型活动、比赛等直播活动开始时,观众数量会迅速上升,导致服务器负载急剧增加,网络时延也会随之增加,进而导致观看直播的用户体验下降;
3. 电商促销:X电商平台,在其促销活动时,通常会引起用户的热情高涨,导致用户访问量大幅增加,服务器负载也会急剧增加,若业务容器扩容不及时,很可能导致用户体验下降,严肃的可能导致业务制止;
4. 金融交易:X金融交易平台,旗下涉及多款金融产品,均必要实时相应,网络时延对交易效率和准确性有很大影响。在高峰期,交易量会急剧增加,网络时延也会随之增加。
以上业务场景都必要高效、稳固的网络支持,对网络时延很敏感。假如业务容器扩容不及时,会导致网络时延过高,用户体验下降,甚至影响业务的正常运营。
下面以视频直播服务为例,介绍怎样举行弹性伸缩设置。假如每天晚上的8点半到10点有一场热门直播,在此期间,用户的访问量会暴增,随后流量缓慢下降直至到达低谷。为了节约成本,可按照如下设置,在流量高峰到来前,提前扩容业务容器实例数,在流量高峰退去后,根据业务流量,缓慢缩容:
1. 在CCE控制台,单击集群名称进入集群。
2. 单击左侧导航栏的“工作负载”,在目的工作负载的操纵列中单击“更多 > 弹性伸缩”。

3. 策略范例选择“HPA+CronHPA策略”,启用HPA策略,并同时启用CronHPA策略。此时CronHPA会定时调解HPA策略的最大和最小实例数。
4. 设置HPA策略
设置实例范围与系统策略,如下图, HPA会根据当前业务容器的CPU利用率,在1-10范围内动态调节容器的实例数,当CPU利用率大于80%时自动扩容,在CPU利用率低于60%时自动缩容业务容器实例数。

5. 设置CronHPA策略
设置定时任务,如下图所示
策略一:20:00调解HPA策略实例数范围,从1-10变为8-10;
策略二:22:30调解HPA策略实例数范围,从8-10变为1-10。

6. 重复以上步骤,您可以添加多条策略规则,但策略的触发时间不能雷同。
7. 设置完成后,单击“创建”
按照上述设置完成后,CronHPA会在流量高峰到来前的20:00调解HPA策略实例数范围,从1-10变为8-10,此时, HPA会将业务实例数至少扩容为8,为即将到来的流量高峰做准备。等到流量高峰过去后的22:30调解HPA策略实例数范围,从8-10变为1-10,此时,HPA会根据业务流量环境,缩容业务容器实例数到合适的值,低落用户使用成本。
CronHPA与HPA联动解析

HPA是用来控制Pod程度伸缩的控制器,HPA周期性查抄Pod的资源使用率数据,计算满足HPA资源所设置的目的数值所需的副本数,进而调解目的资源(如Deployment)的replicas字段。
CronHPA支持定时调解HPA策略的最大和最小实例数,以此实现与HPA的联动,以满足复杂场景下的工作负载伸缩。
由于HPA与CronHPA均作用于同一个deployment对象时存在辩论问题,两个伸缩策略相互独立,后执行的操纵会覆盖先执行的操纵,导致伸缩效果不符合预期,因此需避免这种环境发生。

为避免上述问题,我们通过增强CronHPA,支持将CronHPA规则作用于HPA策略之上,CronHPA仅调解HPA的策略设置,而业务容器的实例数仅由HPA操纵,从而实现两种弹性策略的协同工作。
 总结

k8s社区提供的HPA策略支持在设置的实例数范围内,根据业务容器的CPU、内存等资源使用率实现自动扩缩容。叠加定时扩容策略CronHPA,期望在业务高峰到来前,先通过CronHPA定时任务提前扩容业务容器副本数,然而此时可能会因HPA检测到资源使用率很低而触发实例缩容,导致预扩容的策略失效。华为云CCE服务通过将HPA与CronHPA组合,实现指标弹性策略与定时弹性策略的有机协同,满足了客户业务复杂的弹性伸缩场景。
参考文档:

https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/
https://support.huaweicloud.com/usermanual-cce/cce_10_0415.html
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表