Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes事件驱动弹性伸缩最佳实践系列(一):认识 KEDA

Kubernetes事件驱动弹性伸缩最佳实践系列(一):认识 KEDA

原创
作者头像
imroc
发布于 2024-04-24 03:36:35
发布于 2024-04-24 03:36:35
8350
举报

什么是 KEDA ?

KEDA (Kubernetes-based Event-Driven Autoscaler) 是在 Kubernetes 中事件驱动的弹性伸缩器,功能非常强大。不仅支持根据基础的 CPU 和内存指标进行伸缩,还支持根据各种消息队列中的长度、数据库中的数据统计、QPS、Cron 定时计划以及您可以想象的任何其他指标进行伸缩,甚至还可以将副本缩到 0。

该项目于 2020.3 被 CNCF 接收,2021.8 开始孵化,最后在 2023.8 宣布毕业,目前已经非常成熟,可放心在生产环境中使用。

为什么需要 KEDA ?

HPA 是 Kubernetes 自带的 Pod 水平自动伸缩器,只能根据监控指标对工作负载自动扩缩容,指标主要是工作负载的 CPU 和内存的利用率(Resource Metrics),如果需要支持其它自定义指标,一般是安装 prometheus-adapter 来作为 HPA 的 Custom Metrics 和 External Metrics 的实现来将 Prometheus 中的监控数据作为自定义指标提供给 HPA。理论上,用 HPA + prometheus-adapter 也能实现 KEDA 的功能,但实现上会非常麻烦,比如想要根据数据库中任务表里记录的待执行的任务数量统计进行伸缩,就需要编写并部署 Exporter 应用,将统计结果转换为 Metrics 暴露给 Prometheus 进行采集,然后 prometheus-adapter 再从 Prometheus 查询待执行的任务数量指标来决定是否伸缩。

KEDA 的出现主要是为了解决 HPA 无法基于灵活的事件源进行伸缩的这个问题,内置了几十种常见的 Scaler ,可直接跟各种第三方应用对接,比如各种开源和云托管关系型数据库时序数据库、文档数据库、键值存储、消息队列、事件总线等,也可以使用 Cron 表达式进行定时自动伸缩,常见的伸缩常见基本都涵盖了,如果发现有不支持的,还可以自己实现一个外部 Scaler 来配合 KEDA 使用。

KEDA 的原理

KEDA 并不是要替代 HPA,而是作为 HPA 的补充或者增强,事实上很多时候 KEDA 是配合 HPA 一起工作的,这是 KEDA 官方的架构图:

  • 当要将工作负载的副本数缩到闲时副本数,或从闲时副本数扩容时,由 KEDA 通过修改工作负载的副本数实现(闲时副本数小于 minReplicaCount,包括 0,即可以缩到 0)。
  • 其它情况下的扩缩容由 HPA 实现,HPA 由 KEDA 自动管理,HPA 使用 External Metrics 作为数据源,而 External Metrics 后端的数据由 KEDA 提供。
  • KEDA 各种 Scalers 的核心其实就是为 HPA 暴露 External Metrics 格式的数据,KEDA 会将各种外部事件转换为所需的 External Metrics 数据,最终实现 HPA 通过 External Metrics 数据进行自动伸缩,直接复用了 HPA 已有的能力,所以如果还想要控制扩缩容的行为细节(比如快速扩容,缓慢缩容),可以直接通过配置 HPA 的 behavior 字段来实现 (要求 Kubernetes 版本 >= 1.18)。

除了工作负载的扩缩容,对于任务计算类场景,KEDA 还可以根据排队的任务数量自动创建 Job 来实现对任务的及时处理:

哪些场景适合使用 KEDA ?

下面罗列下适合使用 KEDA 的场景。

微服务多级调用

在微服务中,基本都存在多级调用的业务场景,压力是逐级传递的,下面展示了一个常见的情况:

如果使用传统的 HPA 根据负载扩缩容,用户流量进入集群后:

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

这个逐级传递的过程不仅缓慢,还很危险:每一级的扩容都是直接被 CPU 或内存的飙高触发的,被 “冲垮” 的可能性是普遍存在的。这种被动、滞后的方式,很明显是有问题的。

此时,我们可以利用 KEDA 来实现多级快速扩容:

  • Deploy A 可根据自身负载或网关记录的 QPS 等指标扩缩容。
  • Deploy BDeploy C 可根据 Deploy A 副本数扩缩容(各级服务副本数保持一定比例)。

任务执行(生产者与消费者)

如果有需要长时间执行的计算任务,如数据分析ETL机器学习等场景,从消息队列或数据库中取任务进行执行,需要根据任务数量来伸缩,使用 HPA 不太合适,用 KEDA 就非常方便,可以让 KEDA 根据排队中的任务数量对工作负载进行伸缩,也可以自动创建 Job 来消费任务。

周期性规律

如果业务有周期性的波峰波谷特征,可以使用 KEDA 配置定时伸缩,在波峰来临之前先提前扩容,结束之后再缓慢缩容。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文搞懂使用 KEDA 实现 Kubernetes 自动弹性伸缩
Hello folks,我是 Luga,今天我们来聊一下云原生生态领域相关的技术 - Auto Scaling ,即 “弹性伸缩” 。
Luga Lee
2023/12/26
3K0
一文搞懂使用 KEDA 实现 Kubernetes 自动弹性伸缩
基于事件驱动的Kubernetes弹性伸缩工具keda
本规范描述了ScaledObject自定义资源定义,用于定义 KEDA 应如何扩展您的应用程序以及触发器是什么。
码农小辉
2022/09/07
1.8K0
用 KEDA 根据工作负载进行快速扩容
众所周知,Kubernetes 有个亲生的 HPA 组件,在云原生早期,这个名义上的自动扩缩容的能力给 Kubernetes 赢得了不少掌声。当然现在回头看看,仅仅根据 CPU 和内存这样“贫瘠”的指标,不论是用于判断负载水平,还是用于计算扩容目标,都不是很够用的。这个阶段里,HPA 的扩缩容效率也是广受诟病的一个问题,在一个多级微服务调用的业务场景里,压力是逐级传递的,下图展示了一个常见情况:
崔秀龙
2023/11/30
3520
用 KEDA 根据工作负载进行快速扩容
kubernetes(十六) k8s 弹性伸缩
常规的做法是给集群资源预留保障集群可用,通常20%左右。这种方式看似没什么问题,但放到Kubernetes中,就会发现如下2个问题。
alexhuiwang
2020/09/23
3.9K0
kubernetes(十六) k8s 弹性伸缩
HPA 还是 KEDA,如何在 Kubernetes 中更有效的使用弹性扩缩容?
Kubernetes 有非常广泛的话题。但是构建云原生应用程序时最常见的问题还是弹性扩缩容。
用户5166556
2023/03/18
1.7K0
HPA 还是 KEDA,如何在 Kubernetes 中更有效的使用弹性扩缩容?
KEDA|Kubernetes中基于事件驱动的自动伸缩
事件驱动计算并不是什么新的想法,在数据库领域中就已经使用数据库触发器有很多年了。这个概念很简单:就是每当你添加、更改或删除数据时,就会触发一个事件来执行各种操作。这些类型的事件和触发器在其他领域的应用中也大量出现,例如自动扩展、自动修复、容量规划等等。事件驱动架构的核心是对系统上的各种事件做出反应并执行相应的动作。
CNCF
2020/09/04
1.9K0
成本最高降低70%,腾讯大规模业务集群的云原生成本优化实践!
唐聪,腾讯云容器技术专家,极客时间专栏《etcd实战课》作者,开源项目kstone和crane内部雏形版 founder,etcd活跃贡献者,主要负责腾讯云大规模k8s和etcd平台稳定性和性能优化、业务集群成本优化、有状态服务容器化等产品研发设计工作。 背景 2021年下半年以来,在新冠疫情和互联网政策的冲击之下,各大互联网公司都在进行降本增效。降本增效的一大核心手段就是优化计算资源成本,本文将以腾讯某内部 Kubernetes/TKE 业务为案例,详细阐述如何从 0到1(成本数据采集与分析、优化措施、行
腾讯云原生
2022/07/01
3.1K0
成本最高降低70%,腾讯大规模业务集群的云原生成本优化实践!
Kubernetes事件驱动弹性伸缩最佳实践系列(五):基于 Prometheus 自定义指标的弹性
KEDA 支持 prometheus 类型的触发器,即根据自定义的 PromQL 查询到的 Prometheus 指标数据进行伸缩,完整配置参数参考 KEDA Scalers: Prometheus,本文将给出使用案例。
imroc
2024/05/01
3200
Kubernetes事件驱动弹性伸缩最佳实践系列(五):基于 Prometheus 自定义指标的弹性
基于CPU和RabbitMQ进行自动伸缩
最终用户客座文章作者:Ratnadeep Debnath,Zapier 网站可靠性工程师
CNCF
2022/03/27
1.4K0
基于CPU和RabbitMQ进行自动伸缩
k8s多维度自动弹性伸缩
最新版 HPA:autoscaling/v2beta1,有四种类型的 metrics
kinnylee
2022/07/01
1.7K0
KEDA - 基于Kubernetes事件驱动的自动缩放
事件驱动的计算并不是什么新生事务。数据库世界中的人们使用数据库触发器已有多年了。这个概念很简单: 每当您添加,更改或删除数据时,都会触发一个事件以执行各种功能。新的事件是这些类型的事件和触发器在其他领域的应用程序中激增,例如自动扩展,自动修复,容量规划等。事件驱动架构的核心是对系统上的各种事件做出反应并采取相应的行动。
有点技术
2020/07/14
3.3K0
KEDA - 基于Kubernetes事件驱动的自动缩放
弹性伸缩最佳实践之灵活调节 HPA 扩缩容速率
这样的设计逻辑导致用户无法自定义 HPA 的扩缩容速率,而不同的业务场景对于扩容容灵敏度要求可能是不一样的,比如:
imroc
2022/07/28
3.2K0
弹性伸缩最佳实践之灵活调节 HPA 扩缩容速率
弹性伸缩落地实践
HPA(Horizontal Pod Autoscaler)是 Kubernetes 中的一种资源自动伸缩机制,用于根据某些指标动态调整 Pod 的副本数量。
SRE运维进阶之路
2023/11/21
5550
弹性伸缩落地实践
应用弹性管理最佳实践
01. 背景 生产环境中,业务面临的负载压力变化是不定的,为了保障业务的稳定性,需要根据负载大小的变化调整应用实例的数量或资源规格,同时从资源成本角度考虑,需要在保障业务稳定性的同时,尽量减少不必要的资源占用。 为了满足上述两方面的诉求,应用管理平台需要提供弹性能力。下述将整体分析弹性技术以及 K8s 中的实现,并通过一款云产品做演示,从业务视角使用弹性能力。 02. 弹性技术 对于弹性技术,一般会从两个维度进行考虑: 弹性策略 弹性效率 弹性策略重点关注如何管理触发弹性行为的发生,以及弹性行为作用的维
腾讯云serverless团队
2021/12/18
9970
Kubernetes事件驱动弹性伸缩最佳实践系列(四):多级服务同步水平伸缩
KEDA 支持 Kubernetes Workload 触发器,即可以根据的一个或多个工作负载的 Pod 数量来扩缩容,在多级服务调用的场景下很有用,具体用法参考 KEDA Scalers: Kubernetes Workload。
imroc
2024/04/27
2030
Kubernetes事件驱动弹性伸缩最佳实践系列(四):多级服务同步水平伸缩
kubernetes 降本增效标准指南| 资源利用率提升工具大全
王孝威,腾讯云容器产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务。 晏子怡,腾讯云容器产品经理,在Kubernetes 弹性伸缩、资源高效利用领域有丰富的实战经验。 背景 公有云的发展为业务的稳定性、可拓展性、便利性带来了极大帮助。这种用租代替买、并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果。但实际上业务上云并不意味着成本一定减少,还需适配云上业务的应用开发、架构设计、管理运维、合理使用等多方面解决方案,才能真正助力业务的降本增效。在《Ku
腾讯云原生
2021/04/09
3K1
Kubernetes事件驱动弹性伸缩最佳实践系列(三):定时水平伸缩 (Cron 触发器)
KEDA 支持 Cron 触发器,即使用 Cron 表达式来配置周期性的定时扩缩容,用法参考 KEDA Scalers: Cron。
imroc
2024/04/26
2710
Kubernetes事件驱动弹性伸缩最佳实践系列(三):定时水平伸缩 (Cron 触发器)
Kubernetes 实战:用 Prometheus 提高 K8s 集群弹性伸缩能力的准确性
导语:本文主要通过 Prometheus 在观测 Kubernetes 方面的独特优势,来阐述如何利用 Prometheus 提高 kubernetes 自动弹性伸缩能力的准确性。
腾讯云可观测平台
2025/04/30
1470
Kubernetes 实战:用 Prometheus 提高 K8s 集群弹性伸缩能力的准确性
一文看懂 Kubernetes 弹性伸缩
在 Kubernetes 集群中,自动化资源管理和伸缩是保持应用高效运行的关键。Kubernetes 提供了几种不同的机制来帮助实现这一目标:水平自动伸缩(HPA, Horizontal Pod Autoscaler)、垂直自动伸缩(VPA, Vertical Pod Autoscaler)和集群自动伸缩(CA, Cluster Autoscaler)。这些伸缩器在功能和使用场景上有所不同:
SRE运维手记
2024/09/06
7760
一文看懂 Kubernetes 弹性伸缩
kubernetes指南--弹性伸缩
弹性伸缩这种功能,不是很多系统都已经实现了,我们直接用就行了吗,为什么还需要个指南呢。 因为。。。。我们先来看看都有哪些相关知识点吧。。。
仙人技术
2020/04/29
3.5K0
kubernetes指南--弹性伸缩
推荐阅读
相关推荐
一文搞懂使用 KEDA 实现 Kubernetes 自动弹性伸缩
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档