一、什么是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协同工作数据存储:

Day022-K8s弹性能力-基于KEDA的下一代弹性伸缩-图2

重要组件:

  • 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以节省资源