首页 > 其他分享 >通过HPA+CronHPA组合应对业务复杂弹性伸缩场景

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

时间:2024-05-17 10:19:08浏览次数:27  
标签:容器 CronHPA 伸缩 策略 业务 实例 HPA

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

背景

在k8s集群中,容器水平自动伸缩(HPA),可以根据容器资源的使用量,在设置好的副本范围内,自动扩缩容工作负载副本数(replicas)。HPA是基于指标阈值进行伸缩的,常见的指标有CPU和内存。也可以通过自定义指标,例如QPS、连接数等进行伸缩。但是存在一种场景:基于指标的伸缩存在一定的时延,这类时延主要包含:采集时延(分钟级) 、 判断时延(分钟级) 和伸缩时延(分钟级)。此类分钟级时延,无法适应在短期内极速上涨的业务流量,可能会导致应用CPU飚高,响应时间变长。

容器定时水平自动伸缩(CronHPA)是对HPA的一种补充,对于有固定时间段高峰期的业务,可以提前将容器的实例数量扩容完毕,防止业务流量突发造成性能不足,导致业务延迟。而在业务低谷时,触发定时回收资源。

在某些业务场景下,存在突发流量的同时,又具有明显的波峰波谷,若同时配置CronHPA和HPA两种策略,可能出现如下情况:在业务高峰到来前,CronHPA定时任务提前扩容业务容器副本,而此时HPA可能会检测到资源使用率很低而触发实例缩容,导致预扩容的策略失效。

华为云CCE服务支持联动设置CronHPA策略和HPA策略,通过动态设置HPA的副本范围上下限,来调整业务容器实例数。

1.jpg

使用示例

日常生活中,许多业务场景在流量突发的同时具有明显的波峰波谷,且对响应时延很敏感,例如:

1. 网络游戏:X游戏客户,旗下某大型网络游戏,在晚上或周末、节假日等高峰期间,玩家数量会急剧增加,导致游戏服务器的负载瞬间飙升,此时负载副本数若扩容较慢,可能导致网络卡顿,游戏体验显著下降;

2. 视频直播:X视频直播APP,在某些大型活动、比赛等直播活动开始时,观众数量会迅速上升,导致服务器负载急剧增加,网络时延也会随之增加,进而导致观看直播的用户体验下降;

3. 电商促销:X电商平台,在其促销活动时,通常会引起用户的热情高涨,导致用户访问量大幅增加,服务器负载也会急剧增加,若业务容器扩容不及时,很可能导致用户体验下降,严重的可能导致业务中断;

4. 金融交易:X金融交易平台,旗下涉及多款金融产品,均需要实时响应,网络时延对交易效率和准确性有很大影响。在高峰期,交易量会急剧增加,网络时延也会随之增加。

以上业务场景都需要高效、稳定的网络支持,对网络时延很敏感。如果业务容器扩容不及时,会导致网络时延过高,用户体验下降,甚至影响业务的正常运营。

下面以视频直播服务为例,介绍如何进行弹性伸缩配置。假如每天晚上的8点半到10点有一场热门直播,在此期间,用户的访问量会暴增,随后流量缓慢下降直至到达低谷。为了节约成本,可按照如下配置,在流量高峰到来前,提前扩容业务容器实例数,在流量高峰退去后,根据业务流量,缓慢缩容:

1. 在CCE控制台,单击集群名称进入集群。

2. 单击左侧导航栏的“工作负载”,在目标工作负载的操作列中单击“更多 > 弹性伸缩”。

2.jpg

3. 策略类型选择“HPA+CronHPA策略”,启用HPA策略,并同时启用CronHPA策略。此时CronHPA会定时调整HPA策略的最大和最小实例数。

4. 设置HPA策略

设置实例范围与系统策略,如下图, HPA会根据当前业务容器的CPU利用率,在1-10范围内动态调节容器的实例数,当CPU利用率大于80%时自动扩容,在CPU利用率低于60%时自动缩容业务容器实例数。

3.png

5. 设置CronHPA策略

设置定时任务,如下图所示

策略一:20:00调整HPA策略实例数范围,从1-10变为8-10;

策略二:22:30调整HPA策略实例数范围,从8-10变为1-10。

4.png

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对象时存在冲突问题,两个伸缩策略相互独立,后执行的操作会覆盖先执行的操作,导致伸缩效果不符合预期,因此需避免这种情况发生。

5.jpg

为避免上述问题,我们通过增强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

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

 

标签:容器,CronHPA,伸缩,策略,业务,实例,HPA
From: https://www.cnblogs.com/huaweiyun/p/18197349

相关文章

  • HPA* (Near Optimal hierarchical Path-finding) —— 外网的讲解blog
    原地址:https://alexene.dev/2019/06/02/Hierarchical-pathfinding.html讲解视频:https://www.youtube.com/watch?v=qSbSb8vMbLI目标问题:为不同的分割区建立door,也就是两个分割器有两个相邻的小格,这两个小格子是可以联通的,下图中指的是在黄色线两侧的相邻的两个蓝色小格......
  • HPA* (Near Optimal hierarchical Path-finding)算法的效果图
    本文中的图全部来自:https://mohitsharma0690.blogspot.com/2016/01/hierarchical-pathfinding.html图的说明:Hereisanexampleofhowclustersarecreatedinanopenspaceenvironment.Thewhitesquaresrepresentwalkablegrids.Non-walkablegridspacesaremark......
  • 根据Nginx Ingress指标对指定后端进行HPA
    本文分享自华为云社区《根据NginxIngress指标对指定后端进行HPA》,作者:可以交个朋友。背景生产场景下,NginxIngress的流量会通过域名和path路径最终转发至不同的应用,而有时候cpu和内存并不是nginx的性能瓶颈,此时可以基于nginx_ingress_controller_requests指标,为其对应的应用配......
  • redis自学(37)集群伸缩
    集群伸缩添加一个节点到集群:Redis-cli--cluster提供了很多操作集群的命令,可以通过下面方式查看:  比如,添加节点的命令  先输入新增的ip和端口号,后输入集群已经有的ip和端口号好指定添加到哪个集群。默认是增加master节点,加上--cluster-slave是变成了slave。--cluster......
  • Qt实现遮罩效果并可以拖动伸缩
    qml实现遮罩实现遮罩容易,但是如果可以任意拖动就需要动动脑子了,在经过大神的提示后,根据截图的界面思考,可以由五个矩形来实现(一个中心矩形和四个锚定在四周的矩形,它们一起充满程序窗口区域)QGraphicsView实现遮罩由于没有qml锚定布局,模拟锚定费时间,需要换一种思路,还是截图的灵感,......
  • 构建高性能,可伸缩,高可用,安全,自动化,可溯源,整体式应用构架体系【0到1架构系列】
    系统架构图高性能,可伸缩,高可用,安全,自动化,可溯源构架-----------------------目录------------------------------------1.1系统架构图-----------------------前置------------------------------------2.1ESXI6.5零基础从安装到批量生成/管理虚拟机简易教程--------......
  • 云容器引擎CCE弹性伸缩
    CCE弹性伸缩介绍CCE的弹性伸缩能力分为如下两个维度:工作负载弹性伸缩:即调度层弹性,主要是负责修改负载的调度容量变化。例如,HPA是典型的调度层弹性组件,通过HPA可以调整应用的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。节点弹性伸缩:即资源层弹......
  • 云容器引擎CCE弹性伸缩
    CCE弹性伸缩介绍CCE的弹性伸缩能力分为如下两个维度:工作负载弹性伸缩:即调度层弹性,主要是负责修改负载的调度容量变化。例如,HPA是典型的调度层弹性组件,通过HPA可以调整应用的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。节点弹性伸缩:即资源层弹性,主......
  • SDC可伸缩的高维约束基准和算法
    可伸缩的高维约束基准和算法​ 在过去二十年里,进化约束多目标优化受到了广泛的关注和研究,并且已经提出了一些基准测试约束多目标进化算法(CMOEAs)。特别地,约束函数与目标函数值有紧密的联系,这使得约束特征太单调并且与真实世界的问题不同。因此,之前的CMOEAs不能特别好的解决现实......
  • 前端问题:Watchpack Error:too many open files
    近日在前端上偶遇WatchpackError:toomanyopenfiles这一奇葩问题,经过一番检索,先将修复过程记录.核心问题:WatchpackError(watcher):Error:EMFILE:toomanyopenfiles,watch'/home/bizuser/work/net-work/abp02/angular/node_modules/@babel/runtime/helpers'W......