当前位置:首页 > 科技  > 软件

一篇学会用 KEDA 根据工作负载进行快速扩容

来源: 责编: 时间:2023-11-30 09:27:47 311观看
导读历史问题众所周知,Kubernetes 有个亲生的 HPA 组件,在云原生早期,这个名义上的自动扩缩容的能力给 Kubernetes 赢得了不少掌声。当然现在回头看看,仅仅根据 CPU 和内存这样“贫瘠”的指标,不论是用于判断负载水平,还是用于

历史问题

众所周知,Kubernetes 有个亲生的 HPA 组件,在云原生早期,这个名义上的自动扩缩容的能力给 Kubernetes 赢得了不少掌声。当然现在回头看看,仅仅根据 CPU 和内存这样“贫瘠”的指标,不论是用于判断负载水平,还是用于计算扩容目标,都不是很够用的。这个阶段里,HPA 的扩缩容效率也是广受诟病的一个问题,在一个多级微服务调用的业务场景里,压力是逐级传递的,下图展示了一个常见情况:6DI28资讯网——每日最新资讯28at.com

6DI28资讯网——每日最新资讯28at.com

图片图片6DI28资讯网——每日最新资讯28at.com

6DI28资讯网——每日最新资讯28at.com

如上图,用户流量进入集群之后:6DI28资讯网——每日最新资讯28at.com

  1. 首先在 Deploy A 造成负载,指标变化迫使 Deploy A 扩容
  2. A 扩容之后,吞吐量变大,B 受到压力,再次采集到指标变化,扩容 Deploy B
  3. B 吞吐变大,C ..

这个逐级传递的过程不仅缓慢,而且可以说是步步惊心——每一级的扩容都是直接被 CPU 或内存的飙高触发的,被“冲垮”的可能性是普遍存在的。这种被动、滞后的方式,很明显是有问题的。6DI28资讯网——每日最新资讯28at.com

推陈出新

造成 HPA 窘境的原因之一,就是“自扫门前雪”,每个 Pod 都只能根据自身负载情况来进行扩缩容决策。如果能够直接根据业务流量的变化进行决策,并且将流量流经的所有微服务进行扩缩容,看起来情况就会好很多了。HPA 的自定义指标支持,给这个问题了一个可行的方案。该能力让 HPA 可以用其它的指标来作为扩缩容的触发器,例如我们可以用 Promethues 采集消息中间件的深度或者负载均衡器的队列长度,作为一个更能如实反映业务流量的指标,直接用来触发相关的多个微服务的扩缩容,如下图所示:6DI28资讯网——每日最新资讯28at.com

图片图片6DI28资讯网——每日最新资讯28at.com

6DI28资讯网——每日最新资讯28at.com

在上图中:6DI28资讯网——每日最新资讯28at.com

  1. Prometheus 采集消息队列和负载均衡等更能反映业务流量的指标
  2. 使用 Prometheus Adapter 将 Promethues Metrics 转换为 Kubernetes 的 Aggregated API
  3. HPA 使用自定义指标,同时对多个应用进行扩缩容。

这中间涉及到的 Prometheus Adapter,通过配置文件完成步骤 2 的转换:6DI28资讯网——每日最新资讯28at.com

- seriesQuery: '{__name__=~"^container_.*_total",container!="POD",namespace!="",pod!=""}'  resources:    overrides:      namespace: {resource: "namespace"}      pod: {resource: "pod"}  seriesFilters:  # since this is a superset of the query above, we introduce an additional filter here  - isNot: "^container_.*_seconds_total$"  name: {matches: "^container_(.*)_total$"}  metricsQuery: "sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[2m])) by (<<.GroupBy>>)"

当然,完全可以自行实现 Aggregated API 来支持这种指标的采集和呈现工作。Prometheus 所提供的大量 Exporter 是吸引我们写这种古怪语法的最大动力。6DI28资讯网——每日最新资讯28at.com

那么如果是 KEDA 的话,这个问题又如何呢?KEDA 提供了几十个被称为 Scaler 的东西,其中除了 Promethues 之外,还包括 Kafka、Redis、PostgreSQL 等多种选择。所以在很多场景中,无需 Promethues,也能使用 Scaler 完成对输入指标的读取和判断。下面用 KEDA 为例,看看这种伸缩方法的具体实现。6DI28资讯网——每日最新资讯28at.com

KEDA

假设一个容器化应用由多个工作负载组成:6DI28资讯网——每日最新资讯28at.com

  • Ingress:负责接收业务流量
  • Backend 1、Backend 2:负责处理 Ingress 发来的任务
  • Database:数据库

我们希望达成的效果是 —— Ingress、Backend 1、Backend 2、Database,实例数量保持在 1:2:1.5:2 的关系,Keda 的大致流程如下图所示:6DI28资讯网——每日最新资讯28at.com

图片图片6DI28资讯网——每日最新资讯28at.com

6DI28资讯网——每日最新资讯28at.com

首先使用 Helm 安装 KEDA:6DI28资讯网——每日最新资讯28at.com

$ helm repo add kedacore https://kedacore.github.io/charts$ helm install keda kedacore/keda --namespace defaultNAME: kedaLAST DEPLOYED: Wed Nov 29 18:56:36 2023NAMESPACE: defaultSTATUS: deployedREVISION: 1...

随便创建几个工作负载,冒充微服务:6DI28资讯网——每日最新资讯28at.com

$ kubectl create deploy ingress --image=nginxdeployment.apps/ingress created$ kubectl create deploy backend1 --image=nginxdeployment.apps/backend1 created$ kubectl create deploy backend2 --image=nginxdeployment.apps/backend2 created$ kubectl create deploy database --image=nginxdeployment.apps/database created$ kubectl get pods | cut -d - -f 1 | grep -v keda | sort...backend1backend2databaseingress

运行成功后,我们可以看到,四个微服务,每个微服务都有一个实例。6DI28资讯网——每日最新资讯28at.com

按照刚才瞎掰的比例,编写一个 ScaleObject:6DI28资讯网——每日最新资讯28at.com

apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:  name: bk1spec:  scaleTargetRef:    name: backend1  triggers:  - type: kubernetes-workload    metadata:       podSelector: 'app=ingress'      value: '0.5'---apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:  name: bk2spec:  scaleTargetRef:    name: backend2  triggers:  - type: kubernetes-workload    metadata:       podSelector: 'app=ingress'      value: '0.67'      ---apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:  name: dbspec:  scaleTargetRef:    name: database  triggers:  - type: kubernetes-workload    metadata:       podSelector: 'app=ingress'      value: '0.5'

上述代码引入了 kubernetes-workload 类型的触发器,他会监控 app=ingress 的容器,并对 scaleTargetRef 中提到的工作负载数量比例进行扩缩容。6DI28资讯网——每日最新资讯28at.com

提交到集群之后,会看到实例数量数量发生了变化:6DI28资讯网——每日最新资讯28at.com

$ kubectl get pods | cut -d - -f 1 | sort | uniq --count...   2 backend1   2 backend2   2 database   1 ingress   3 keda

我们把 Ingress 扩容到 2 实例,再次统计:6DI28资讯网——每日最新资讯28at.com

$ kubectl scale deployment ingress --replicas=2deployment.apps/ingress scaled$ kubectl get pods | cut -d - -f 1 | sort | uniq --count...   4 backend1   3 backend2   4 database   2 ingress   3 keda

可以看到,的确是按照我们设定的比例,同步产生了缩放。如果缩减 Ingress 服务实例数,几分钟之后,其它工作负载也会随之缩容。6DI28资讯网——每日最新资讯28at.com

$ kubectl scale deployment ingress --replicas=1deployment.apps/ingress scaled$ kubectl get pods | cut -d - -f 1 | sort | uniq --count                                                         /...   2 backend1   2 backend2   2 database   1 ingress

结论

虽说云原生架构的复杂性问题越来越被强调,但是这一生态的宗旨应该还是没有变化——用简单的透明的手段解决复杂问题。6DI28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35285-0.html一篇学会用 KEDA 根据工作负载进行快速扩容

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Git 难用?有救!

下一篇: useEffect 实践案例之一

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    在昨日举行的的联发科新一代旗舰芯片天玑9200+的发布会上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品将全球首发搭载这款当前性能最强大的移动平台
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
Top