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 监控外部事件源,并根据需求调整应用的资源。其主要组件协同工作来实现这一点:

  1. KEDA Operator 跟踪事件源,并根据需求增加或减少应用实例的数量。
  2. Metrics Server 向 Kubernetes 的 HPA 提供外部指标,使其能够做出伸缩决策。
  3. Scaler 连接到消息队列或数据库等事件源,获取当前使用情况或负载的数据。
  4. 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 包含多个容器,则该值将是其中所有容器的总和。

kind: ScaledObject
metadata:
  name: cpu-scaledobject
  namespace: <your-namespace>
spec:
  scaleTargetRef:
    name: <your-deployment>
  triggers:
  - type: cpu
    metricType: Utilization # Allowed types are 'Utilization' or 'AverageValue'
    metadata:
      value: "50"