一、什么是KEDA¶
KEDA(全称:Kubernetes Event-Driven Autoscaler)是Kubernetes基于事件驱动的自动缩放器。借助KEDA,您可以根据需要处理的事件数量来驱动Kubernetes中任何容器的扩展。
KEDA是一个单一用途的轻量级组件,可以添加到任何Kubernetes集群中。KEDA与标准Kubernetes组件(如Horizontal Pod Autoscaler)协同工作并且可以在不覆盖或重复的情况下扩展功能。使用 KEDA,您可以明确映射要使用事件驱动扩展的应用程序,而其他应用程序则继续运行。这使得 KEDA 成为一种灵活且安全的选项,可以与任意数量的其他 Kubernetes 应用程序或框架一起运行。
KEDA的核心思想是:只有有任务需要处理时,才扩展应用程序,并且在没有工作时缩减资源,甚至可以将副本缩容到零。这不仅提高了资源利用率,还降低了成本。
二、为什么要用KEDA¶
使用KEDA的原因主要分为下面几种场景:
- 基于事件扩缩容:支持零副本缩容、毫秒级响应,节省资源成本。
- 基于消息队列扩缩容:动态感知队列深度,覆盖主流消息中间件,平滑扩缩容。
- 基于流量扩缩容:灵活集成 Prometheus、Service Mesh等高级流量指标,优化冷启动。
- 基于自定义指标扩缩容:通过Scaler机制无缝接入任意指标源,无需代码侵入。
- 基于各种策略扩缩容:多触发器组合、冷却时间、优先级控制,满足生产级稳定性需求。
三、KEDA使用场景¶
KEDA使用场景主要为如下几点:
- 基于消息队列的任务处理:KEDA支持从各类消息的数量自动扩缩容相关服务
- 基于HTTP请求的扩缩容:KEDA支持从HTTP请求的数量自动扩缩容相关服务
- 定时任务和批处理:KEDA支持时间的触发器,定时进行扩缩容
- 无服务架构:KEDA支持Scale to Zero,功能和Serverless类似
四、KEDA架构及工作流程¶
4.1 KEDA架构¶
下图展示了KEDA如何与Kubernetes Horizontal Pod Autoscaler、外部事件源和Kubernetes的etcd协同工作数据存储:

重要组件:
- ScaledObject:KEDA核心资源,用于定义扩缩容规则
- Controller:KEDA控制器,监听APIServer的KEDA对象,并根据规则通知Scaler调整副本数量
- Scaler:Scaler与HPA协同工作,以实现自动扩展
- External Trigger Source:外部事件或数据源,可以触发KEDA的扩展操作
- Metrics Adapter:用于定义自定义指标
4.2 KEDA工作流程¶
KEDA完整工作流程如下:
- 1)事件监听:KEDA持续监听外部事件源(如队列中有未处理消息)
- 2)指标转换:将事件转换为HPA可识别的指标(例如:消息积压数量)
- 3)HPA决策:HPA根据指标计算目标副本数(如从0扩展到5)
- 4)Pod扩缩:Kubernetes调整Pod副本数,处理事件负载
- 5)缩容到零:当事件处理完毕,KEDA将副本数缩至0以节省资源