0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

应用现代化中的弹性伸缩简介

OSC开源社区 来源:享受生活的云计算工程师 2023-06-05 09:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

应用现代化中的弹性伸缩

这两年应用现代化的步伐飞快,19年我在很多企业部署虚拟化,介绍虚拟网络和虚拟存储。23年,这些企业都已经上了云原生或考虑云原生了。对于高流量的Web应用程序,实时数据分析,大规模数据处理、移动应用程序等业务,容器比虚拟机更适合,因为它轻量级,快速响应,可轻松移植,并具有很强的弹性伸缩能力。

为什么需要弹性伸缩呢?

•峰值负载应对:促销活动、节假日购物季或突发事件根据需求快速扩展资源,保证应用可用性和性能。

•提高资源利用率:根据实际资源负载动态调整资源规模,避免基础设施资源浪费,降低TCO。

•应对故障和容错多实例部署和快速替换,提高业务连续性和可用性。

•跟随需求变化:匹配前端的业务需求及压力,快速调整规模,提高事件应对能力,满足需求和期望。

Horizontal Pod Autoscaling

Kubernetes自身提供一种弹性伸缩的机制,包括Vertical Pod Autoscaler (VPA)和Horizontal Pod Autoscaler (HPA)。HPA根据 CPU 、内存利用率增加或减少副本控制器的 pod 数量,它是一个扩缩资源规模的功能特性。

HPA依赖Metrics-Server捕获CPU、内存数据来提供资源使用测量数据,也可以根据自定义指标(如Prometheus)进行扩缩。

ffe1150a-031b-11ee-90ce-dac502259ad0.png

由上图看出,HPA持续监控Metrics-Server的指标情况,然后计算所需的副本数动态调整资源副本,实现设置目标资源值的水平伸缩。

但也有一定局限性:

•无外部指标支持。如不同的事件源,不同的中间件/应用程序等,业务端的应用程序变化及依赖是多样的,不只是基于CPU和内存扩展。

•无法1->0。应用程序总有0负载的时候,此时不能不运行工作负载吗?

所以就有了Kubernetes-based Event-Driven Autoscaling(KEDA)!

KEDA

KEDA基于事件驱动进行自动伸缩。什么是事件驱动?我理解是对系统上的各种事件做出反应并采取相应行动(伸缩)。那么KEDA就是一个HPA+多种触发器。只要触发器收到某个事件被触发,KEDA就可以使用HPA进行自动伸缩了,并且,KEDA可以1-0,0-1!

架构

fff9a296-031b-11ee-90ce-dac502259ad0.png

KEDA自身有几个组件:

•Agent: KEDA激活和停止Kubernetes 工作负载(keda-operator主要功能)

• Metrics: KEDA作为一个Kubernetes指标服务器,向Horizontal Pod Autoscaler提供丰富的事件数据,从源头上消费事件。(keda-operator-metrics-apiserver主要作用)。

Admission Webhooks: 自动验证资源变化,以防止错误配置。

• Event sources: KEDA 更改 pod 数量的外部事件/触发源。如Prometheus、Kafka。

• Scalers: 监视事件源,获取指标并根据事件触发伸缩。

• Metrics adapter:从Scalers获取指标并发送给HPA。

• Controller: 根据Adapter提供的指标进行操作,调谐到 ScaledObject 中指定的资源状态。Scaler根据 ScaledObject 中设置的事件源持续监视事件,发生任何触发事件时将指标传递给Metrics Adapter。Metrics Adapter调整指标并提供给Controller组件,Controller根据 ScaledObject 中设置的缩放规则扩大或缩小Deployment。

总的来说,KEDA设置一个ScaledObject,定义一个事件触发器,可以是来自消息队列的消息、主题订阅的消息、存储队列的消息、事件网关的事件或自定义的触发器。基于这些事件来自动调整应用程序的副本数量或处理程序的资源配置,以根据实际负载情况实现弹性伸缩。

CRD

• ScaledObjects:代表事件源(如 Rabbit MQ)和 Kubernetes Deployment、StatefulSet 或任何定义 / 规模子资源的自定义资源之间的所需映射。

• ScaledJobs:事件源和Kubernetes Jobs之间的映射。根据事件触发调整Job规模。

• TriggerAuthentications:触发器的认证参数

• ClusterTriggerAuthentications:集群维度认证

部署KEDA

helmrepoaddkedacorehttps://kedacore.github.io/charts
helmrepoupdate
kubectlcreatenamespacekeda
helminstallkedakedacore/keda--namespacekeda

kubectlapply-fhttps://github.com/kedacore/keda/releases/download/v2.10.1/keda-2.10.1.yaml
root@node-1:/#kubectlgetall-nkeda
NAMEREADYSTATUSRESTARTSAGE
pod/keda-metrics-apiserver-7d89dbcb54-v22nl1/1Running044s
pod/keda-operator-5bb9b49d7c-kh6wt0/1Running044s
NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/keda-metrics-apiserverClusterIP10.233.44.19443/TCP,80/TCP45s
NAMEREADYUP-TO-DATEAVAILABLEAGE
deployment.apps/keda-metrics-apiserver1/11145s
deployment.apps/keda-operator0/11045s
NAMEDESIREDCURRENTREADYAGE
replicaset.apps/keda-metrics-apiserver-7d89dbcb5411145s
replicaset.apps/keda-operator-5bb9b49d7c11045s
#kubectlgetcrd|grepkeda
clustertriggerauthentications.keda.sh2023-05-11T0906Z
scaledjobs.keda.sh2023-05-11T0907Z
scaledobjects.keda.sh2023-05-11T0907Z
triggerauthentications.keda.sh2023-05-11T0907Z

KubeSphere部署KEDA

kubectleditcc-nkubesphere-system(kubesphere3.4+)
spec:
···
autoscaling:
enabled:true
···

扩展工作负载CRD

ScaledObject对象主要定义要扩展的目标对象,如Deployment、Statefulset、CRD等,Triggers部分声明对应的触发器,在进行这些参数设置后,一个KEDA的自定义伸缩就可以启用了。

apiVersion:keda.sh/v1alpha1
kind:ScaledObject
metadata:
name:{scaled-object-name}
spec:
scaleTargetRef:
apiVersion:{api-version-of-target-resource}#Optional.Default:apps/v1
kind:{kind-of-target-resource}#Optional.Default:Deployment
name:{name-of-target-resource}#Mandatory.MustbeinthesamenamespaceastheScaledObject
envSourceContainerName:{container-name}#Optional.Default:.spec.template.spec.containers[0]
pollingInterval:30#Optional.Default:30seconds
cooldownPeriod:300#Optional.Default:300seconds
idleReplicaCount:0#Optional.Default:ignored,mustbelessthanminReplicaCount
minReplicaCount:1#Optional.Default:0
maxReplicaCount:100#Optional.Default:100
fallback:#Optional.Sectiontospecifyfallbackoptions
failureThreshold:3#Mandatoryiffallbacksectionisincluded
replicas:6#Mandatoryiffallbacksectionisincluded
advanced:#Optional.Sectiontospecifyadvancedoptions
restoreToOriginalReplicaCount:true/false#Optional.Default:false
horizontalPodAutoscalerConfig:#Optional.SectiontospecifyHPArelatedoptions
name:{name-of-hpa-resource}#Optional.Default:keda-hpa-{scaled-object-name}
behavior:#Optional.UsetomodifyHPA'sscalingbehavior
scaleDown:
stabilizationWindowSeconds:300
policies:
-type:Percent
value:100
periodSeconds:15
triggers:
#{listoftriggerstoactivatescalingofthetargetresource}

Demo

KEDA目前支持53种Scalers,如Kafka,Elasticsearch,MySQL,RabbitMQ,Prometheus等等。此处演示一个Prometheus和Kafka的例子。

Prometheus & KEDA

0016a396-031c-11ee-90ce-dac502259ad0.png

部署一个Web应用,使用Prometheus监控Web应用http请求指标。为寻求演示效果,此处部署了一个有点击,互动的Demo APP,

进入KubeSphere项目,新建一个自定义伸缩:

004bd796-031c-11ee-90ce-dac502259ad0.png

设置最小副本数为1,最大副本数为10,轮询间隔5秒,等待时间为1分钟:

0061c470-031c-11ee-90ce-dac502259ad0.png

KubeSphere支持Cron、Prometheus,和自定义触发器:

0073d1e2-031c-11ee-90ce-dac502259ad0.png

触发器设置Prometheus,设置请求为30s内的增长率总和,当阈值大于3时事件驱动触发缩放:

009522fc-031c-11ee-90ce-dac502259ad0.png

设置一些其他设置,如资源删除后是否恢复指本来的副本数,以及扩缩策略设置:

00b49bc8-031c-11ee-90ce-dac502259ad0.png

00db94bc-031c-11ee-90ce-dac502259ad0.png

现在并发访问Web App:

可以在自定义监控看到监控指标的变化:

00fe0e34-031c-11ee-90ce-dac502259ad0.png

Web App的副本数开始横向扩展:

0114564e-031c-11ee-90ce-dac502259ad0.png

最终扩展到ScaledObject中定义的10个副本:

0147cefc-031c-11ee-90ce-dac502259ad0.png

在访问停止后,可以看到监控指标的数值在慢慢变小:

015fe794-031c-11ee-90ce-dac502259ad0.png

Deployment开始缩容:

01732070-031c-11ee-90ce-dac502259ad0.png

Kafka & KEDA

KEDA使用Kafka事件源演示的整体拓扑如下:

01876652-031c-11ee-90ce-dac502259ad0.png

打开KubeSphere应用商店,查看DMP数据库中心

01ab7da8-031c-11ee-90ce-dac502259ad0.png

选择Kafka,进行安装

01c1f92a-031c-11ee-90ce-dac502259ad0.png

01d56280-031c-11ee-90ce-dac502259ad0.png

02001930-031c-11ee-90ce-dac502259ad0.png

0211fb50-031c-11ee-90ce-dac502259ad0.png

安装好Kafka后,创建一个测试的Kafka Topic,Topic分区设置为5,副本设置为1:

0228a012-031c-11ee-90ce-dac502259ad0.png023d00de-031c-11ee-90ce-dac502259ad0.png

创建Kafka Producer服务:

025356e0-031c-11ee-90ce-dac502259ad0.png

026f627c-031c-11ee-90ce-dac502259ad0.png

向主题发送订单:

028dd432-031c-11ee-90ce-dac502259ad0.png

02a12230-031c-11ee-90ce-dac502259ad0.png

创建Consumer服务:

02d2ee6e-031c-11ee-90ce-dac502259ad0.png

02e4763e-031c-11ee-90ce-dac502259ad0.png

发送新订单看Consumer服务是否消费:

02f6b8c6-031c-11ee-90ce-dac502259ad0.png

现在可以来做自动伸缩了,创建一个ScaledObject,设置最小副本数为0,最大为10,轮询间隔为5s,Kafka LagThreshold为10:

apiVersion:keda.k8s.io/v1alpha1
kind:ScaledObject
metadata:
name:kafka-scaledobject
namespace:default
labels:
deploymentName:kafka-consumer-deployment#RequiredNameofthedeploymentwewanttoscale.
spec:
scaleTargetRef:
deploymentName:kafka-consumer-deployment#RequiredNameofthedeploymentwewanttoscale.
pollingInterval:5
minReplicaCount:0#OptionalDefault0
maxReplicaCount:10#OptionalDefault100
triggers:
-type:kafka
metadata:
#Required
BootstrapeServers:radondb-kafka-kafka-external-bootstrap.demo:9092#Kafkabootstrapserverhostandport
consumerGroup:order-shipper#Makesurethatthisconsumergroupnameisthesameoneastheonethatisconsumingtopics
topic:test
lagThreshold:"10"#Optional.Howmuchthestreamislaggingonthecurrentconsumergroup

创建自定义伸缩:

031033f0-031c-11ee-90ce-dac502259ad0.png

032331d0-031c-11ee-90ce-dac502259ad0.png

03363f46-031c-11ee-90ce-dac502259ad0.png

0354b4ee-031c-11ee-90ce-dac502259ad0.png

03807728-031c-11ee-90ce-dac502259ad0.png

039664ac-031c-11ee-90ce-dac502259ad0.png

03aa0cb4-031c-11ee-90ce-dac502259ad0.png

现在,让我们向队列提交大约 100,000 条订单消息,看看自动缩放的实际效果。你会看到随着队列中多余消息的增长,将会产生更多的 kafka-consumer pod。

03bdb872-031c-11ee-90ce-dac502259ad0.png

03d4b41e-031c-11ee-90ce-dac502259ad0.png

03eaeb4e-031c-11ee-90ce-dac502259ad0.png

此处我们看到最大到5个副本,没有到10个副本,因为默认最大副本数不会超过Kafka主题分区数量,上面设置了分区为5,可以激活allowIdleConsumers: true来禁用这个默认行为。重新编辑自定义伸缩后,最大副本变化成10:

040198a8-031c-11ee-90ce-dac502259ad0.png

在无消息消费时,副本变化为0:

041a8598-031c-11ee-90ce-dac502259ad0.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 触发器
    +关注

    关注

    14

    文章

    2065

    浏览量

    63529
  • 虚拟存储器
    +关注

    关注

    0

    文章

    12

    浏览量

    9003
  • HPA
    HPA
    +关注

    关注

    1

    文章

    11

    浏览量

    8650
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    4255

原文标题:应用现代化中的弹性伸缩

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电网现代化:基于 SiC 的固态变压器 (SST) 拓扑与材料选择综述

    所未有的速度推动传统配电网向以可再生能源(RES)为核心的现代化智能电网(Smart Grid)转型 。在这种宏观架构的根本性转变,直流(DC)电源和非线性负载的渗透率急剧上升。例如,太阳能光伏阵列、风力发电系统、电动汽车(EV)超充站网络以及兆瓦级电池
    的头像 发表于 04-15 09:26 124次阅读
    电网<b class='flag-5'>现代化</b>:基于 SiC 的固态变压器 (SST) 拓扑与材料选择综述

    红外热像仪在在现代化压铸生产中的应用

    现代化压铸生产中,对温度场的精确掌握已成为提升产品质量的核心环节。红外热像仪凭借其非接触测温与可视热分布分析能力,为这一行业带来了全新的技术解决方案。
    的头像 发表于 01-05 09:46 430次阅读

    电网现代化:开启智慧能源新纪元

    (作者:是德科技高级副总裁兼首席营销官Marie Hattar) 当前电网正承受巨大压力:用电需求激增、部分系统与标准陈旧过时并亟待现代化改造,同时还要应对极端天气的考验。这三重因素将关键基础设施
    的头像 发表于 12-29 15:54 543次阅读
    电网<b class='flag-5'>现代化</b>:开启智慧能源新纪元

    宏集案例 | 加勒比最大石油企业如何用DataHub实现SCADA现代化与IoT设备集成?

    软件,实现了对现有SCADA系统的现代化升级,并无缝集成了新型物联网(IoT)油井监测设备。关键价值点数据全集成:利用宏集CogentDataHub的MQTT智能代
    的头像 发表于 12-16 17:04 546次阅读
    宏集案例 | 加勒比最大石油企业如何用DataHub实现SCADA<b class='flag-5'>现代化</b>与IoT设备集成?

    云里物里定位信标助力打造现代化智慧医院

    在某市第一心医院,传统的“寻路难”问题正在成为历史。为打造现代化智慧医院,该院率先引进云里物里智能硬件,构建覆盖全院的室内导航定位系统,以空间数字重构就医路径,显著提升患者就医便捷性。
    的头像 发表于 10-11 16:52 1611次阅读

    工业智能网关在现代化水产养殖的应用

    应对措施,这极易导致鱼虾生病甚至死亡,给养殖户带来巨大经济损失。 随着物联网技术的飞速发展,其在渔业养殖领域的应用日益广泛,成为推动现代化水产养殖变革的重要力量。物通博联提供基于工业智能网关的物联网解决方案
    的头像 发表于 10-10 13:45 639次阅读
    工业智能网关在<b class='flag-5'>现代化</b>水产养殖<b class='flag-5'>中</b>的应用

    NetApp助力对象存储现代化,提升速度、可扩展性和安全性

    计。最新版本的StorageGRID将引入新功能,旨在推进人工智能计划、提高数据安全性并实现企业数据基础设施的现代化。 无论企业是处于数据湖现代化的早期阶段,还是正在试验高级人工智能应用程序,他们都需要管理并存储激增的非结构
    的头像 发表于 09-11 10:41 660次阅读

    无人机智能巡检系统:现代化运维的空中解决方案

           无人机智能巡检系统:现代化运维的空中解决方案        无人机智能巡检系统集成先进飞行平台、图像识别算法、自主导航与数据分析技术,构建了一套高效、精准的巡检解决方案。该系统已
    的头像 发表于 09-10 13:23 932次阅读

    微型气象站系统:为智慧气象建设和应急管理体系现代化提供关键技术支撑

    微型气象站系统:为智慧气象建设和应急管理体系现代化提供关键技术支撑【WX-PQX6】不仅简化了传统气象监测流程、降低了成本,更通过云平台数据管理(支持多设备登录、曲线分析、数据导出)和远程监控功能,推动气象服务向智能、移动
    的头像 发表于 08-13 14:47 772次阅读
    微型气象站系统:为智慧气象建设和应急管理体系<b class='flag-5'>现代化</b>提供关键技术支撑

    现代化智慧农业四情监测设备方案

    现代化智慧农业四情监测设备方案 柏峰【BF-NYSQ】强农固本,为推进中国式现代化提供基础支撑,农稳社稷,粮安天下。强化耕地保护和质量提升、推进农业科技力量,全方位夯实国家粮食安全根基,坚持产量产能、生产生态、增产增收一起抓,切实提高农业综合效益和竞争力。
    的头像 发表于 08-01 10:11 970次阅读
    <b class='flag-5'>现代化</b>智慧农业四情监测设备方案

    城市治理现代化:边缘计算网关在智慧城管的实践探索

    效率和居民的生活质量。蓝蜂网关在智慧城管的实践,为城市治理现代化提供了全新的模式。​ 某城区,市政设施数量庞大,仅井盖就有上万余个,垃圾桶、路灯等设施更是遍布大街小巷。为了实现对这些设施的精细化管理,部署
    的头像 发表于 07-25 14:51 415次阅读
    城市治理<b class='flag-5'>现代化</b>:边缘计算网关在智慧城管<b class='flag-5'>中</b>的实践探索

    中科创达推出Java应用现代化解决方案

    在数字转型浪潮席卷千行百业的当下,企业应用现代化已成为突破增长瓶颈、重塑核心竞争力的关键路径。在近日举办的亚马逊云科技中国峰会上,全球领先的智能操作系统及端侧智能产品和技术提供商中科创达,凭借十
    的头像 发表于 06-28 10:34 1542次阅读

    四创电子亮相2025国气象现代化建设科技博览会

    近日,四创电子参加由中国气象学会主办的2025国气象现代化建设科技博览会。此次行业盛会在南京国际博览中心举办,吸引近200家国内外知名企业齐聚,博览会围绕气象防灾减灾、交通气象、海洋气象、航天气象、能源气象、气象科普、人工智能等核心领域,全方位展示气象全产业链的前沿技术
    的头像 发表于 06-07 17:09 1390次阅读

    时钟缓冲器在现代化建设中的作用

    时钟缓冲器作为现代电子技术的一项关键元件,其在信息建设和智能发展中所扮演的角色日益凸显。随着社会的不断发展,人们对信息传输的速度和准确性要求越来越高,时钟缓冲器以其独有的功能,确
    的头像 发表于 05-27 14:08 767次阅读
    时钟缓冲器在<b class='flag-5'>现代化建设中</b>的作用

    斑马技术:84%决策者认为,仓储现代化运营是当务之急

    准确性,降低营运成本,进而提升营运效率、优化供应链管理,为传统仓储行业带来了深刻变革与价值创造。 ​ 斑马技术公司发布的最新《2025 全球仓储愿景研究报告》(以下简称 “《报告》”)显示,84% 的决策者表示,现代化运营是当
    的头像 发表于 05-26 07:34 3686次阅读