使用 KEDA 扩展 Kubernetes 负载
发布: (2025年12月14日 GMT+8 14:12)
3 min read
原文: Dev.to
Source: Dev.to
为什么 HPA 可能无法扩展你的 Pod
水平 Pod 自动伸缩器(HPA)仅基于 CPU 或内存使用率进行扩缩容,而这并不总能反映真实的工作负载。当你需要基于每秒请求数、队列深度或数据库查询结果等指标进行扩容时,仅靠 HPA 是不够的。
介绍 KEDA
KEDA(Kubernetes Event‑Driven Autoscaling)通过监控外部事件——如消息队列、Prometheus/Grafana 指标、SQL 查询和 HTTP 流量——并将其暴露为 HPA 可消费的指标,来补充 Kubernetes 生态系统。这使得 HPA 能够基于更准确反映实际应用负载的信号做出扩缩容决策。
关键能力
- 事件驱动的扩缩容:当没有流量时将工作负载缩容至零,事件到来时自动恢复。
- 无需修改应用:工作负载保持不变,KEDA 作为 Kubernetes 自动伸缩的干净扩展。
- 原生集成:KEDA 使用
ScaledObject自定义资源,通过 Kubernetes API Server 注册,定义哪个工作负载需要扩容以及由哪个外部触发器驱动扩容。
KEDA 工作原理
- ScaledObject 定义 – 指定目标工作负载和外部事件源的自定义资源。
- Scaler – KEDA 使用专用的 scaler 持续观察外部触发器(如消息队列、HTTP 流量或监控系统)。
- Metrics Adapter – 检测到事件后,KEDA 控制器评估需求并通过其指标适配器暴露相应指标。
- HPA 消费 – HPA 消费这些指标,仍然是唯一负责扩容 Pod 的组件。
- Scale‑to‑zero – 若没有事件,KEDA 允许工作负载缩容至零;事件再次出现时,Pod 会被重新扩容。
KCD Guatemala 2025 的概念验证
在 KCD Guatemala 2025 期间,演示了基于真实 HTTP 流量使用 KEDA 自动扩容 Kubernetes 工作负载的概念验证。演示内容包括:
- 一个轻量级示例应用。
- KEDA HTTP 插件配置。
ScaledObject定义。- 展示从零到多个副本再回到零的事件驱动自动伸缩的 Kubernetes 清单。
- 用于生成负载并实时观察扩缩容行为的脚本和说明。
其目标是提供一个清晰、动手的事件驱动自动伸缩示例,而非面向生产的完整系统。
资源
- 完整的设置、源代码和文档:GitHub – keda-demo-kcd