KEDA 概览

目录

介绍

KEDA 是一个基于 Kubernetes 的事件驱动自动扩缩器。主页。通过 KEDA,您可以根据需要处理的事件数量驱动 Kubernetes 中任何容器的扩缩。

KEDA 是一个单一用途且轻量级的组件,可以添加到任何 Kubernetes 集群中。KEDA 与标准的 Kubernetes 组件(如 Horizontal Pod Autoscaler)协同工作,能够扩展功能而不会覆盖或重复。使用 KEDA,您可以明确映射希望使用事件驱动扩缩的应用程序,而其他应用程序继续正常运行。这使得 KEDA 成为一个灵活且安全的选项,可以与任意数量的其他 Kubernetes 应用或框架并行运行。

更多详情请参阅官方文档:Keda Documentation

优势

KEDA 的核心优势:

  • 自动扩缩简单化: 为 Kubernetes 集群中的每个工作负载带来丰富的扩缩能力。
  • 事件驱动: 智能地扩缩您的事件驱动应用。
  • 内置扩缩器: 拥有 70 多种内置扩缩器,支持各种云平台、数据库、消息系统、遥测系统、CI/CD 等。
  • 多种工作负载类型: 支持多种工作负载类型,如 deployments、jobs 以及带有 /scale 子资源的自定义资源。
  • 减少环境影响: 通过优化工作负载调度和零扩缩构建可持续平台。
  • 可扩展: 支持自定义扩缩器或使用 Community 维护的扩缩器。
  • 供应商无关: 支持多种云提供商和产品的触发器。
  • 支持 Azure Functions: 在 Kubernetes 上运行并扩缩生产环境中的 Azure Functions。

KEDA 的工作原理

KEDA 监控外部事件源,并根据需求调整应用资源。其主要组件协同工作实现这一目标:

  1. KEDA Operator 负责跟踪事件源,并根据需求上下调整应用实例数量。
  2. Metrics Server 向 Kubernetes 的 HPA 提供外部指标,以便其做出扩缩决策。
  3. Scalers 连接到消息队列或数据库等事件源,获取当前使用量或负载数据。
  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:提供安全访问事件源的方式,支持环境变量或云特定凭据等方法。

这些 CRDs 让您在保持应用安全和响应需求的同时,灵活控制扩缩。

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"