2. KEDA 核心概念:ScaledObject、ScaledJob、Trigger、Authentication、HPA 关系

KEDA 的核心在于将 Kubernetes 原生的 HPA(Horizontal Pod Autoscaler) 与外部事件源解耦,通过自定义资源对象实现事件驱动的动态扩缩。本章深入剖析五大核心概念:ScaledObject、ScaledJob、Trigger、ClusterTriggerAuthentication/TriggerAuthentication,以及它们与 HPA 的协作关系。

2.1 核心概念总览

KEDA 通过以下 CRD(Custom Resource Definition)扩展 Kubernetes API:

概念 资源类型 核心职责 适用场景
ScaledObject CRD 定义 Deployment/StatefulSet 的扩缩规则,自动创建 HPA 无状态服务、API 网关、Web 应用
ScaledJob CRD 定义 Job 的触发规则,事件到来时创建 Job 实例 批处理任务、消息队列消费、CI/CD 构建
Trigger ScaledObject/ScaledJob 内嵌字段 指定事件源类型(如 Kafka、Prometheus、RabbitMQ)及连接参数 所有事件驱动场景
TriggerAuthentication CRD(命名空间级) 存储 Trigger 所需的认证凭据(密钥、、证书) 跨命名空间安全访问事件源
ClusterTriggerAuthentication CRD(集群级) 全局共享的认证配置,可被所有命名空间引用 企业级统一认证管理
HPA(Horizontal Pod Autoscaler) K8s 内置资源 根据 CPU/内存/自定义指标调整 Pod 副本数 KEDA 自动创建并管理,用户无需直接操作
关键理解: ScaledObject 是 KEDA 的“大脑”,它监听 Trigger 指标,然后自动创建或更新 HPA 对象,HPA 再驱动 Deployment 扩缩。ScaledJob 则直接创建 Kubernetes Job,不经过 HPA。

2.2 ScaledObject 与 HPA 的协作机制

ScaledObject 是 KEDA 最常用的资源。当用户创建 ScaledObject 时,KEDA Operator 会执行以下步骤:

  1. 解析 ScaledObject:读取 scaleTargetRef(目标 Deployment/StatefulSet)、triggers(事件源列表)、minReplicaCount/maxReplicaCount。
  2. 创建/更新 HPA:KEDA 自动生成一个 HPA 对象,其指标源指向 KEDA 的 Metrics Server(keda-metrics-apiserver)。
  3. 指标采集:KEDA Metrics Server 根据 Trigger 配置,从外部事件源(如 Kafka 分区偏移量、Prometheus 查询结果)拉取实时指标。
  4. HPA 决策:HPA 定期(默认 15 秒)查询 Metrics Server 获取指标值,计算期望副本数,并更新 Deployment 的 replicas 字段。
  5. 扩缩执行:Deployment Controller 根据 replicas 调整 Pod 数量。
ScaledObject 与 HPA 协作流程 用户/CI 系统 ScaledObject CR KEDA Operator HPA (自动创建) KEDA Metrics Server 事件源 (Kafka/Prometheus) Deployment Pod 副本 (0→N) 创建/更新 自动创建/更新 HPA 拉取指标 暴露指标 调整 replicas 核心要点 • ScaledObject 是用户唯一需要 操作的资源 • HPA 由 KEDA 自动管理 • 指标源通过 Trigger 配置

2.3 ScaledJob:事件驱动的批处理任务

与 ScaledObject 不同,ScaledJob 不依赖 HPA,而是直接管理 Kubernetes Job 的生命周期。当 Trigger 指标超过阈值时,KEDA 会创建新的 Job 实例来处理事件。

CI/CD 构建场景: 当 Git 仓库有新的 Push 事件时,KEDA 通过 ScaledJob 触发一个构建 Job。每个 Push 对应一个独立的 Job Pod,构建完成后自动退出,资源自动释放。

ScaledJob 的关键参数:

参数 说明 示例值
jobTargetRef 定义 Job 模板(与 Kubernetes JobSpec 一致) template.spec.containers
maxReplicaCount 最大并发 Job 数量 10
scalingStrategy 扩缩策略(default、custom、accurate) accurate
pollingInterval 轮询事件源的间隔(秒) 30
cooldownPeriod 无事件后等待多久停止创建新 Job(秒) 60
ScaledJob 事件驱动批处理流程 消息队列 / Git 事件 ScaledJob CR KEDA Operator Job #1 (构建) Job #2 (构建) Job #N (构建) 指标超过阈值 创建多个 Job 实例 ScaledJob 特点 • 不经过 HPA • 每个事件创建独立 Job • Job 完成后自动清理 • 适合 CI/CD 构建任务 • 支持并发控制

2.4 Trigger:连接事件源的桥梁

Trigger 是 ScaledObject 和 ScaledJob 的核心配置段,定义了从何处获取指标以及如何连接。KEDA 支持 50+ 种 Trigger 类型,常见的有:

Trigger 类型 适用事件源 典型指标 CI/CD 场景
kafka Apache Kafka / Redpanda 消费者滞后(lag) 构建任务队列
prometheus Prometheus / Thanos 自定义查询结果 构建集群负载
rabbitmq RabbitMQ 队列消息数 构建请求队列
azure-queue Azure Storage Queue 队列长度 云原生 CI/CD
github-runner GitHub Actions 等待运行的 Job 数 GitHub Actions 自托管 Runner
注意: Trigger 中的 metadata 字段是类型相关的。例如 Kafka Trigger 需要 bootstrapServers、topic、consumerGroup;Prometheus Trigger 需要 serverAddress、query。错误的 metadata 会导致 ScaledObject 无法正常工作。

2.5 Authentication:安全访问事件源

大多数事件源需要认证(如 Kafka SASL/SSL、Prometheus Basic Auth、RabbitMQ 用户名密码)。KEDA 提供两种认证资源:

  • TriggerAuthentication(命名空间级):只能被同一命名空间的 ScaledObject/ScaledJob 引用。
  • ClusterTriggerAuthentication(集群级):可被所有命名空间引用,适合企业统一管理。

认证信息通常存储在 Kubernetes Secret 中,TriggerAuthentication 通过 spec.secretTargetRef 引用 Secret 的键值对。

apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: kafka-auth
  namespace: ci-cd
spec:
  secretTargetRef:
    - parameter: sasl
      name: kafka-secret        # 引用 Secret 名称
      key: sasl-username        # Secret 中的键
    - parameter: saslPassword
      name: kafka-secret
      key: sasl-password
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: build-scaler
  namespace: ci-cd
spec:
  scaleTargetRef:
    name: build-worker
  triggers:
    - type: kafka
      metadata:
        bootstrapServers: kafka-cluster:9092
        topic: build-requests
        consumerGroup: keda-build-group
      authenticationRef:
        name: kafka-auth        # 引用 TriggerAuthentication

2.6 核心关系总结

五大概念的关系可以概括为:

  • ScaledObject 和 ScaledJob 是 KEDA 的“入口资源”,用户通过它们声明扩缩规则。
  • Trigger 是“感知层”,负责从外部事件源采集指标。
  • Authentication 是“安全层”,为 Trigger 提供访问事件源的凭证。
  • HPA 是“执行层”(仅 ScaledObject 场景),KEDA 自动创建并管理 HPA,用户无需直接操作。
最佳实践: 在 CI/CD 流水线场景中,推荐使用 ScaledJob 处理构建任务,因为每个构建是独立的批处理作业,完成后自动释放资源。对于构建结果的服务(如部署后的 Web 应用),使用 ScaledObject 根据请求量动态调整服务副本数。