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。 |
1.2 KEDA 在 Serverless 中的作用
在 Serverless 平台中,KEDA 承担着事件驱动弹性调度的核心职责。它解决了传统 Serverless 平台在 Kubernetes 上运行时面临的几个关键问题:
- 空闲成本优化: 当没有事件到达时,KEDA 将工作负载缩放到零副本,避免空闲资源占用。
- 突发流量响应: 事件积压时,KEDA 根据队列深度、消息延迟等指标快速扩容,保障吞吐。
- 异构事件源适配: 提供统一的 ScaledObject 抽象层,屏蔽不同事件源的接入差异。
- 冷启动管理: 通过配置缩容延迟和预热策略,平衡冷启动延迟与资源效率。
实践建议: 在 Serverless 平台中,KEDA 通常与 Knative 配合使用。Knative 负责请求驱动的自动缩放(基于并发数),KEDA 负责事件驱动的自动缩放(基于队列深度),两者形成互补。
KEDA 在 Serverless 平台中的典型工作流程如下:
- 事件源(如 Kafka Topic)产生新消息。
- KEDA Metrics Server 定期拉取事件源指标(如消息积压数)。
- KEDA Operator 根据 ScaledObject 配置,更新对应的 HPA 对象。
- HPA 根据指标值调整 Deployment 的副本数,从零扩容到目标副本。
- Pod 启动后消费事件,处理完成后指标下降。
- 指标持续低于阈值时,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 是 HPA 的事件驱动扩展层。HPA 提供基础的缩放执行能力,KEDA 提供事件源感知、从零缩放和高级策略管理能力。在 Serverless 平台中,两者协同工作,实现高效、低成本的事件驱动弹性伸缩。