写点什么

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

  • 2024-05-17
    广东
  • 本文字数:2200 字

    阅读完需:约 7 分钟

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

本文分享自华为云社区《通过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


点击关注,第一时间了解华为云新鲜技术~

发布于: 2024-05-17阅读数: 18
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
通过HPA+CronHPA组合应对业务复杂弹性伸缩场景_云原生_华为云开发者联盟_InfoQ写作社区