KEDA 概览
简介
KEDA 是一个基于 Kubernetes 的事件驱动自动伸缩器。主页。借助 KEDA,您可以根据待处理事件的数量,驱动 Kubernetes 中任意容器的伸缩。
KEDA 是一个专用且轻量的组件,可添加到任何 Kubernetes 集群中。KEDA 可与 Horizontal Pod Autoscaler 等标准 Kubernetes 组件协同工作,并在不覆盖或重复其功能的情况下进行扩展。借助 KEDA,您可以明确指定要使用事件驱动伸缩的应用,同时其他应用继续正常运行。这使 KEDA 成为一个灵活且安全的选项,可以与任意数量的其他 Kubernetes 应用或框架并行运行。
有关更多详细信息,请参阅官方文档:Keda Documentation
优势
KEDA 的核心优势:
- 让自动伸缩变得简单: 为 Kubernetes 集群中的每个工作负载提供丰富的伸缩能力。
- 事件驱动: 智能地伸缩事件驱动应用。
- 内置 Scaler: 为各种云平台、数据库、消息传递系统、遥测系统、CI/CD 等提供 70 多种内置 Scaler。
- 多种工作负载类型: 支持多种工作负载类型,例如 deployment、job,以及具有 /scale 子资源的自定义资源。
- 减少环境影响: 通过优化工作负载调度和缩容至零,构建可持续的平台。
- 可扩展: 使用您自行构建的 Scaler 或 Community 维护的 Scaler。
- 与供应商无关: 支持各种云提供商和产品的触发器。
- 支持 Azure Functions: 在生产工作负载中于 Kubernetes 上运行和伸缩 Azure Functions。
KEDA 的工作原理
KEDA 监控外部事件源,并根据需求调整应用的资源。其主要组件协同工作来实现这一点:
- KEDA Operator 跟踪事件源,并根据需求增加或减少应用实例的数量。
- Metrics Server 向 Kubernetes 的 HPA 提供外部指标,使其能够做出伸缩决策。
- Scaler 连接到消息队列或数据库等事件源,获取当前使用情况或负载的数据。
- Custom Resource Definitions (CRDs) 定义应用应如何根据队列长度或 API 请求速率等触发条件进行伸缩。
简单来说,KEDA 会监听 Kubernetes 外部发生的情况,获取所需数据,并相应地伸缩应用。它高效且能与 Kubernetes 良好集成,从而动态处理伸缩。
KEDA Custom Resource Definitions (CRDs)
KEDA 使用 Custom Resource Definitions (CRDs) 管理伸缩行为:
- ScaledObject:将应用(例如 Deployment 或 StatefulSet)关联到外部事件源,并定义伸缩方式。
- ScaledJob:根据外部指标伸缩 Jobs,以处理批处理任务。
- TriggerAuthentication:提供安全访问事件源的方式,支持环境变量或云平台专用凭据等方法。
这些 CRD 让您能够控制伸缩,同时确保应用安全并能及时响应需求。
ScaledObject 示例:
以下示例针对整个 Pod 的 CPU 利用率。如果 Pod 包含多个容器,则该值将是其中所有容器的总和。