1. KEDA 概述

1.1 KEDA 是什么

KEDA(Kubernetes Event-Driven Autoscaling)是一个基于 Kubernetes 的事件驱动自动缩放组件。它通过监听外部事件源(如消息队列、数据库、监控系统等)的指标,动态调整工作负载的副本数量,实现从零到 N 的弹性伸缩。

KEDA 的核心定位是作为 Kubernetes 生态中的事件驱动缩放引擎,它本身不替代 HPA,而是扩展 HPA 的能力边界,使其能够感知非 CPU/内存类的自定义指标。

关键特性:
  • 事件驱动: 基于外部事件源(Kafka、RabbitMQ、Prometheus、AWS SQS 等)的指标触发缩放。
  • 从零缩放: 支持将工作负载缩放到零副本,并在事件到达时快速启动。
  • 与 HPA 兼容: 作为 HPA 的指标提供者,无缝集成到 Kubernetes 原生生态。
  • 多租户安全: 支持 ClusterScaledObject 实现集群级别的缩放策略。

KEDA 由两个核心组件构成:

组件 角色 说明
Operator 控制面 负责管理 ScaledObject 和 ScaledJob 资源的生命周期,创建/更新/删除对应的 HPA 对象。
Metrics Server 数据面 作为 Kubernetes 自定义指标 API 的适配器,从事件源拉取指标并暴露给 HPA。
KEDA 核心架构 事件源层 Kafka RabbitMQ Prometheus AWS SQS KEDA 核心 Operator 管理 ScaledObject Metrics Server 暴露自定义指标 ScaledObject 事件源 + 缩放策略 Kubernetes 集群 HPA Deployment Job Pod

1.2 KEDA 在 Serverless 中的作用

在 Serverless 平台中,KEDA 承担着事件驱动弹性调度的核心职责。它解决了传统 Serverless 平台在 Kubernetes 上运行时面临的几个关键问题:

  • 空闲成本优化: 当没有事件到达时,KEDA 将工作负载缩放到零副本,避免空闲资源占用。
  • 突发流量响应: 事件积压时,KEDA 根据队列深度、消息延迟等指标快速扩容,保障吞吐。
  • 异构事件源适配: 提供统一的 ScaledObject 抽象层,屏蔽不同事件源的接入差异。
  • 冷启动管理: 通过配置缩容延迟和预热策略,平衡冷启动延迟与资源效率。
实践建议: 在 Serverless 平台中,KEDA 通常与 Knative 配合使用。Knative 负责请求驱动的自动缩放(基于并发数),KEDA 负责事件驱动的自动缩放(基于队列深度),两者形成互补。

KEDA 在 Serverless 平台中的典型工作流程如下:

  1. 事件源(如 Kafka Topic)产生新消息。
  2. KEDA Metrics Server 定期拉取事件源指标(如消息积压数)。
  3. KEDA Operator 根据 ScaledObject 配置,更新对应的 HPA 对象。
  4. HPA 根据指标值调整 Deployment 的副本数,从零扩容到目标副本。
  5. Pod 启动后消费事件,处理完成后指标下降。
  6. 指标持续低于阈值时,KEDA 逐步缩容,最终回到零副本。

1.3 KEDA 与 HPA 的关系

KEDA 与 Kubernetes 原生 HPA(Horizontal Pod Autoscaler)是增强与扩展的关系,而非替代关系。下表从多个维度对比两者的差异:

维度 HPA KEDA
指标来源 CPU、内存、自定义指标(需额外适配器) 30+ 内置事件源适配器,开箱即用
缩容到零 不支持(最小副本数通常为 1) 原生支持,通过 ScaledObject 配置
事件源感知 无,仅依赖指标数值 感知事件源类型和连接状态
缩放策略 基于指标阈值的线性缩放 支持高级策略:冷却周期、缩放延迟、回退行为
部署方式 Kubernetes 内置资源 通过 Helm 或 YAML 安装 Operator
适用场景 稳态负载、Web 应用 事件驱动、消息处理、流式计算

KEDA 在运行时实际上会为每个 ScaledObject 创建一个对应的 HPA 对象。KEDA 负责将事件源指标转换为 HPA 可消费的自定义指标格式,HPA 则负责执行实际的副本数调整。这种分层设计使得 KEDA 可以复用 HPA 的成熟缩放逻辑,同时扩展其事件驱动能力。

注意: 当 KEDA 将工作负载缩放到零副本时,HPA 的最小副本数会被设置为 0。此时 HPA 本身无法感知事件源状态,完全依赖 KEDA 在事件到达时重新激活 HPA 并触发扩容。因此,KEDA 的 Metrics Server 必须保持高可用,否则可能导致事件积压但无法扩容。
KEDA 与 HPA 协作流程 事件源 KEDA Metrics Server KEDA Operator HPA Deployment ① KEDA Metrics Server 从事件源拉取指标 → ② Operator 创建/更新 HPA → ③ HPA 调整 Deployment 副本数 ④ 缩容到零时,HPA minReplicas=0,KEDA 负责在事件到达时重新激活

总结来说,KEDA 与 HPA 的关系可以概括为:KEDA 是 HPA 的事件驱动扩展层。HPA 提供基础的缩放执行能力,KEDA 提供事件源感知、从零缩放和高级策略管理能力。在 Serverless 平台中,两者协同工作,实现高效、低成本的事件驱动弹性伸缩。