4. 事件源通用参数:authenticationRef、metadata、name、type、useCachedMetrics、fallback 配置
KEDA 的 ScaledObject 是连接事件源与工作负载的核心 CRD。每个 ScaledObject 必须定义一个事件源(triggers 字段),而事件源中的通用参数决定了 KEDA 如何连接外部系统、获取指标以及处理异常。本章逐一拆解 authenticationRef、metadata、name、type、useCachedMetrics 和 fallback 六个通用参数,并给出生产级配置建议。
4.1 参数总览与作用域
以下表格概括了每个通用参数的作用域、是否必填及典型用途:
| 参数名 | 作用域 | 必填 | 典型用途 |
|---|---|---|---|
type |
事件源级别 | 是 | 指定事件源类型(如 prometheus、kafka、rabbitmq) |
name |
事件源级别 | 否 | 为事件源命名,便于日志和监控区分 |
metadata |
事件源级别 | 是 | 传递事件源特有的连接参数和查询条件 |
authenticationRef |
事件源级别 | 否 | 引用 TriggerAuthentication 或 ClusterTriggerAuthentication 资源 |
useCachedMetrics |
事件源级别 | 否 | 是否使用缓存指标(默认 false) |
fallback |
事件源级别 | 否 | 当事件源不可用时,使用静态回退副本数 |
4.2 type 与 name:事件源的身份标识
type 是事件源的唯一标识符,KEDA 根据此字段加载对应的 Scaler 插件。常见的内置类型包括 prometheus、kafka、rabbitmq、aws-sqs-queue、azure-servicebus 等。社区或自定义 Scaler 也可通过 type 字段注册。
name 为可选字段,用于在日志、指标和事件中区分同一 ScaledObject 下的多个事件源。当 ScaledObject 包含两个相同类型的事件源(例如两个不同的 Prometheus 查询)时,name 必须唯一。
triggers:
- type: prometheus
name: request-latency-p99
metadata:
serverAddress: http://prometheus:9090
query: histogram_quantile(0.99, ...)
- type: prometheus
name: error-rate-5m
metadata:
serverAddress: http://prometheus:9090
query: rate(errors_total[5m])
4.3 metadata:事件源的连接参数
metadata 是一个键值对映射,承载事件源所需的全部连接信息和查询参数。不同事件源类型的 metadata 字段差异较大,但通常包含以下三类:
- 连接地址:如
serverAddress、brokerList、host。 - 查询条件:如
query(Prometheus)、topicName(Kafka)、queueName(RabbitMQ)。 - 阈值与维度:如
threshold、targetValue、activationThreshold。
authenticationRef 引用外部 Secret。
4.4 authenticationRef:安全凭证的引用
authenticationRef 指向一个 TriggerAuthentication(命名空间级别)或 ClusterTriggerAuthentication(集群级别)资源。该资源定义了如何从 Kubernetes Secret、环境变量、Vault 或云厂商托管身份中获取凭证。
典型配置流程:
- 创建包含敏感信息的 Secret:
kubectl create secret generic kafka-credentials --from-literal=username=admin --from-literal=password=secret - 创建 TriggerAuthentication 资源,引用上述 Secret:
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: kafka-auth
spec:
secretTargetRef:
- parameter: sasl
name: kafka-credentials
key: username
- parameter: sasl
name: kafka-credentials
key: password
- 在 ScaledObject 的事件源中引用:
triggers:
- type: kafka
authenticationRef:
name: kafka-auth
metadata:
bootstrapServers: kafka-cluster:9092
topic: orders
consumerGroup: keda-consumer
ClusterTriggerAuthentication,否则 KEDA 无法解析凭证。
4.5 useCachedMetrics:指标缓存策略
useCachedMetrics 控制 KEDA 是否复用上一次轮询的指标值。默认值为 false,即每次轮询都向事件源发起实时查询。当设置为 true 时,KEDA 在轮询间隔内返回上一次缓存的指标值,避免对后端系统造成过大压力。
适用场景:
- 事件源响应较慢(如复杂 PromQL 查询)
- 事件源存在限流或配额限制(如云 API)
- 指标变化不频繁,允许一定延迟
不适用场景:
- 需要秒级精确响应的流量突发场景
- 事件源本身已提供缓存(如 Redis 缓存层)
4.6 fallback:事件源故障时的保底策略
fallback 是 KEDA 2.8+ 引入的容错参数。当事件源连续多次返回错误或超时时,KEDA 不再使用 0 副本缩容,而是回退到用户指定的静态副本数,防止因监控系统故障导致服务完全停止。
fallback 配置包含两个子字段:
| 子字段 | 类型 | 说明 |
|---|---|---|
replicas |
整数 | 回退时的目标副本数(必须 ≥ 1) |
failureThreshold |
整数 | 触发回退前连续失败的轮询次数(默认 3) |
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
query: up{job="my-app"}
threshold: "1"
fallback:
replicas: 3
failureThreshold: 5
4.7 参数协作关系图
下图展示了六个通用参数在 KEDA 事件源中的协作流程:
4.8 参数配置避坑清单
- authenticationRef 未生效:检查 TriggerAuthentication 的
parameter字段是否与事件源 metadata 中的参数名完全匹配。 - fallback 未触发:确认 KEDA 版本 ≥ 2.8,且
failureThreshold值小于 KEDA 的cooldownPeriod轮询次数。 - useCachedMetrics 导致缩放滞后:在流量突增场景下,建议关闭缓存或缩短
pollingInterval。 - metadata 中硬编码敏感信息:始终使用
authenticationRef引用 Secret,避免 YAML 泄露。
kubectl get ScaledObject <name> -o yaml 查看 KEDA 控制器实际解析后的事件源参数;使用 kubectl logs -n keda deployment/keda-operator 查看轮询错误日志。