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

    文章

    2019

    浏览量

    61398
  • 虚拟存储器
    +关注

    关注

    0

    文章

    12

    浏览量

    8805
  • HPA
    HPA
    +关注

    关注

    1

    文章

    9

    浏览量

    8367
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    4046

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

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

收藏 人收藏

    评论

    相关推荐

    南方智能构建现代化水库运行管理矩阵

    南方测绘集团旗下南方智能积极落实水利部构建现代化水库运行管理矩阵工作部署,以水库运行管理实际业务需求为导向,利用数字孪生、物联网、大数据、云计算等技术,深度融合水库现有各类监测数据、运行台账等数据
    的头像 发表于 12-13 10:36 284次阅读

    雷曼光电助力校园现代化建设

    近日,雷曼光电为巴基斯坦University of Wah报告厅打造了大尺寸、高分辨率的雷曼超高清大屏,为学校日常开展课堂授课、学术交流和校园活动等提供强有力的硬件和技术支持,助力校园现代化建设,也为客户带来了显著的应用价值。
    的头像 发表于 11-26 15:14 312次阅读

    智慧营区综合管理平台:现代化进程的重要产物

    智慧华盛恒辉营区综合管理平台是军事领域现代化进程的重要产物,它集成了物联网、大数据、云计算、人工智能等前沿技术,为军队提供了一个全方位、全天候、智能的营区管理与服务解决方案。以下是对智慧营区综合
    的头像 发表于 11-22 14:06 195次阅读

    ESD应用手册:汽车版现代化接口保护概念、测试和仿真

    电子发烧友网站提供《ESD应用手册:汽车版现代化接口保护概念、测试和仿真.pdf》资料免费下载
    发表于 11-19 14:38 0次下载

    云端弹性计算公式有哪些内容?

    云端弹性计算公式有哪些内容?云端弹性计算公式涵盖资源分配、性能监控、自动伸缩及积分计算等方面。资源分配依据虚拟机配置和实际需求动态调整;性能监控实时监控CPU、内存等关键指标;自动伸缩
    的头像 发表于 11-15 11:04 260次阅读

    智慧农业平台:推动农业现代化的科技力量

    随着信息技术的飞速发展,智慧农业平台正逐步成为推动农业现代化、提高农业生产效率和质量的重要力量。智慧农业平台集成了物联网、大数据、云计算、人工智能等多种先进技术,为农业生产和管理提供了全方位、准确
    的头像 发表于 10-15 16:25 373次阅读

    华为云徐峰:AI 赋能应用现代化,加速软件生产力跃升

    2024 年 9 月 19 日,在华为全联接大会 2024 的“AI 赋能应用现代化,加速软件生产力跃升”论坛上,华为云 PaaS 服务产品部部长徐峰发表了主题演讲,介绍了未来应用智能演进趋势
    的头像 发表于 10-14 09:45 590次阅读
    华为云徐峰:AI 赋能应用<b class='flag-5'>现代化</b>,加速软件生产力跃升

    中海达助力水文现代化建设

    为深入贯彻创新驱动发展战略,加快推进黄河流域(片)水文现代化建设,日前,黄河水文协同创新中心正式成立。黄委有关部门,黄河流域(片)省区水文部门,新疆生产建设兵团水利局,有关高校、科研院所等权威专家及企业代表参加会议。中海达作为黄河水文协同创新中心首批成员之一出席会议。
    的头像 发表于 09-02 17:07 573次阅读

    现代化设备管理系统:为企业发展注入强大动力

    现代化设备管理系统在企业发展起到了重要作用,包括多学科理论融合、专业与协作以及信息管理。它能够实现对设备的实时监测、故障预警、维护计
    的头像 发表于 09-02 10:35 628次阅读
    <b class='flag-5'>现代化</b>设备管理系统:为企业发展注入强大动力

    高标准农田灌区信息建设如何促进农业现代化

    高标准农田灌区信息建设如何促进农业现代化 高标准农田灌区信息建设是推动农业现代化进程的关键一环,它通过集成现代信息技术与传统农业灌溉管理
    的头像 发表于 08-30 17:40 611次阅读
    高标准农田灌区信息<b class='flag-5'>化</b>建设如何促进农业<b class='flag-5'>现代化</b>

    四创电子应邀参加2024国气象现代化建设科技博览会

    5月15日-17日,四创电子应邀参加了由中国气象学会主办的2024国气象现代化建设科技博览会(简称CMHE2024)。
    的头像 发表于 05-19 09:45 548次阅读
    四创电子应邀参加2024<b class='flag-5'>中</b>国气象<b class='flag-5'>现代化</b>建设科技博览会

    Optiver使用AMD企业级产品组合赋能数据中心现代化

    AMD宣布,Optiver – 在超过100家交易所拥有交易业务的全球领先做市商 – 正在广泛采用AMD高性能计算引擎,通过构建一个用作组织基础的现代化基础设施,帮助其进一步履行改善金融市场的使命。
    的头像 发表于 05-13 09:59 442次阅读

    农业现代化:UWB模块为农业领域带来的效益和便利

    随着科技的进步和农业现代化的推进,超宽带(UWB)技术正逐渐在农业领域发挥重要作用。UWB模块作为UWB技术的核心组成部分,具有高精度、实时性强的特点,为农业生产提供了新的技术手段和解决方案。本文将
    的头像 发表于 04-12 15:02 538次阅读

    讯维融合处理器助力医院构建现代化医疗监控系统

    随着医疗技术的不断进步和医院管理要求的日益严格,构建一套高效、稳定、智能的医疗监控系统已成为医院现代化建设的迫切需求。在这一背景下,讯维融合处理器以其卓越的性能和独特的功能,为医院构建现代化医疗监控
    的头像 发表于 04-01 16:31 380次阅读
    讯维融合处理器助力医院构建<b class='flag-5'>现代化</b>医疗监控系统

    车载控系统:构建现代化城市治安指挥车的核心技术支撑

    随着城市进程的加速和社会治安形势的日益复杂,城市治安管理面临着前所未有的挑战。为了有效应对这些挑战,现代化城市治安指挥车应运而生。而在这其中,讯维车载控系统凭借其卓越的技术性能和适应性,成为
    的头像 发表于 03-06 16:18 410次阅读