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

    文章

    1677

    浏览量

    60402
  • 虚拟存储器
    +关注

    关注

    0

    文章

    11

    浏览量

    8764
  • HPA
    HPA
    +关注

    关注

    0

    文章

    8

    浏览量

    8256
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    3984

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

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

收藏 人收藏

    评论

    相关推荐

    为微电子设施现代化提供资金

    来源:半导体芯科技编译 美国商务部宣布向 BAE 系统公司提供约 3500 万美元的初始资金,用于对位于新罕布什尔州纳舒亚的微电子中心 (MEC) 进行现代化改造。 这是《芯片和科学法案》的首次资助
    的头像 发表于 12-28 16:24 150次阅读

    “稳”与“进”良性互动 构建现代化产业体系

    现代化产业体系建设,产业发展保持合理增速是必要前提,这也是“稳”的重要内涵。产业规模持续扩大,承载要素的能力才会更强,各类资源才有“用武之地”。居民的生产生活需要,必须有产业发展“量”的保障,在这个基础上,消费升级、需求升级才有更广阔的空间。
    的头像 发表于 11-27 17:20 907次阅读

    喜报!华为云金融PaaS3.0荣获“2023年应用现代化典型案例”称号

    摘要:近日,中国软件行业协会首届“应用现代化产业实践优秀案例”评选结果揭晓,华为云金融PaaS3.0荣获“2023年应用现代化典型案例”称号。 中国软件行业协会近期启动了2023“应用现代化产业实践
    的头像 发表于 11-25 17:34 364次阅读
    喜报!华为云金融PaaS3.0荣获“2023年应用<b class='flag-5'>现代化</b>典型案例”称号

    软通动力应用现代化平台工程产品及服务解决方案荣获“2023年应用现代化典型案例”称号

    北京2023年11月14日 /美通社/ -- 在数字经济时代,应用现代化正在成为一个共识。 近日,中国软件行业协会首届“应用现代化产业实践优秀案例”评选结果揭晓,软通动力应用现代化研究中心打造
    的头像 发表于 11-14 16:50 393次阅读
    软通动力应用<b class='flag-5'>现代化</b>平台工程产品及服务解决方案荣获“2023年应用<b class='flag-5'>现代化</b>典型案例”称号

    喜报丨软通动力应用现代化平台工程产品及服务解决方案荣获“2023年应用现代化典型案例”称号

    在数字经济时代,应用现代化正在成为一个共识。 近日,中国软件行业协会首届“应用现代化产业实践优秀案例”评选结果揭晓, 软通动力应用现代化研究中心打造的应用现代化平台工程产品及服务解决方
    的头像 发表于 11-13 19:30 431次阅读
    喜报丨软通动力应用<b class='flag-5'>现代化</b>平台工程产品及服务解决方案荣获“2023年应用<b class='flag-5'>现代化</b>典型案例”称号

    不动产数字化创新联合体成立,中软国际助推行业应用现代化

    10月25日,在2023年中国程序员节“ 应用现代化发展 ”论坛上,应用现代化产业联盟 不动产数字化创新联合体 正式成立,中软国际作为应用现代化产业联盟首批成员、创新联合体联合发起单位出席了成立仪式
    的头像 发表于 10-26 09:15 263次阅读
    不动产数字化创新联合体成立,中软国际助推行业应用<b class='flag-5'>现代化</b>

    物联网应用之智慧档案馆八防十防一体平台

    一种智能档案馆八防九防十防十二防一体监控系统方案,该方案强调集成化、可视、一体、联动、自动
    发表于 09-14 10:33

    存储网络在数据中心现代化中的作用

    电子发烧友网站提供《存储网络在数据中心现代化中的作用.pdf》资料免费下载
    发表于 09-01 14:43 0次下载
    存储网络在数据中心<b class='flag-5'>现代化</b>中的作用

    存储体系结构的现代化

    电子发烧友网站提供《存储体系结构的现代化.pdf》资料免费下载
    发表于 08-30 16:58 0次下载
    存储体系结构的<b class='flag-5'>现代化</b>

    使用第6代光纤通道实现数字媒体和娱乐的现代化

    电子发烧友网站提供《使用第6代光纤通道实现数字媒体和娱乐的现代化.pdf》资料免费下载
    发表于 08-30 09:58 0次下载
    使用第6代光纤通道实现数字媒体和娱乐的<b class='flag-5'>现代化</b>

    中软国际参与编写《应用现代化技术能力成熟度评估模型》 助力企业应用现代化高质量发展(附文件链接)

    ​ 8月3日,由中软国际等企业参与编写的《应用现代化技术能力成熟度评估模型》经由中国软件行业协会(以下简称“软协”)审核、优化后,正式公告发布。中软国际作为首批参评企业通过了应用现代化技术能力成熟度
    的头像 发表于 08-04 21:05 409次阅读
    中软国际参与编写《应用<b class='flag-5'>现代化</b>技术能力成熟度评估模型》 助力企业应用<b class='flag-5'>现代化</b>高质量发展(附文件链接)

    档案八防十防现代化手段建设技术方案

    原标题:建设现代化智慧档案馆环境控制系统的技术方案 档案库房效果图盛世宏博 概述: 现代化智慧档案馆的环境控制系统的建设,对于档案的保存、保护和利用起着至关重要的作用。档案馆的环境条件对档案的长期
    的头像 发表于 07-27 10:34 282次阅读
    档案八防十防<b class='flag-5'>现代化</b>手段建设技术方案

    AI Powered 软件工厂助力行业应用现代化“再进化”

    7月8日,在华为开发者大会2023中软国际自办论坛上,中软国际华为业务集团软件工厂业务部副总裁张伟发表了主题为《+AI,行业应用现代化“再进化”》的演讲。张伟认为人工智能时代的到来, 应用现代化
    的头像 发表于 07-09 14:05 293次阅读

    IBM推出IBM Z和云端现代化堆栈新功能,为 z/OS 和云端应用开发人员提供统一体验

    与技术的互动方式。如果企业要想跟上这种发展趋势和速度,实现快速创新,那么核心业务应用的现代化不可或缺。  IBM推出IBM Z和云端现代化堆栈新功能,为 zOS 和云端应用开发人员提供统一体验 许多企业在应用现代化旅程伊始就遇到
    的头像 发表于 06-27 21:43 333次阅读

    【鲁班猫创意氛围赛】项目提交:现代化无线哨兵

    项目的名称就叫做【现代化无线哨兵】 3.2软件设计 讲完结构设计,接下来就是软件设计,在讲软件设计之前,我推荐一个软件,叫做VNC Views,这个软件可以让Linux开发板在没有屏幕的时候也可以显示
    发表于 05-14 18:21