KEDA核心资源详解:ScaledObject、ScaledJob与TriggerAuthentication

来自AI助手的总结
KEDA通过ScaledObject、ScaledJob和TriggerAuthentication实现事件驱动扩缩容与认证管理
KEDA核心资源详解:ScaledObject、ScaledJob与TriggerAuthentication

一、KEDA核心资源介绍

官网链接:https://keda.sh/docs/2.16/authentication-providers/

1.1 什么是KEDA核心资源

KEDA主要核心资源分为三个,具体如下:

  • 1)ScaledObject:用于控制Deployment等资源的副本数,可以指定多种事件和消息来源控制资源的副本数,同时支持Scale to Zero

  • 2)ScaledJob:用于触发一次性Job任务,可以根据多种外部事件源触发创建一次性任务,主要用于处理批处理任务或临时任务,类似Serverless

  • 3)TriggerAuthentication:用于管理KEDA Scaler与外部事件源(如RabbitMQ、AWS SQS、Azure Queue等)之间的身份验证和授权,支持环境变量、ConfigMap、Secret等

1.2 KEDA核心资源如何定义

1.2 ScaledObject资源定义

说明:ScaledObject的缩写为so

定义一个ScaledObject资源

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: rabbitmq-consumer-scaler  # ScaledObject名称
  namespace: default             # 命名空间需与目标Deployment一致
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment             # 不指定的话,默认就是Deployment
    name: rabbitmq-consumer      # 需要扩缩容的目标Deployment名称
  pollingInterval: 30            # 每30秒检查一次队列
  cooldownPeriod: 300            # 扩缩容后等待5分钟
  minReplicaCount: 0             # 允许缩容到0实例(冷启动)
  maxReplicaCount: 10            # 最多扩展到10个副本
  triggers:
  - type: rabbitmq               # 触发器类型(RabbitMQ)
    metadata:
      host: amqp://user:pass@rabbitmq.default.svc.cluster.local:5672  # RabbitMQ服务地址
      queueName: orders           # 监听的队列名称
      queueLength: "50"            # 触发扩容的队列消息积压阈值(超过50条消息时扩容)
      activationQueueLength: "1"  # 触发从0→1的最小消息数(至少1条消息才启动Pod)
    authenticationRef:
      name: rabbitmq-credentials  # 引用TriggerAuthentication或Secret存储密码(安全推荐)

关键字段说明:

  • scaleTargetRef

  • 指向需要扩缩容的Kubernetes资源(如Deployment、StatefulSet)。

  • minReplicaCount: 0

  • KEDA核心特性:允许缩容到0实例(无请求时节省资源)。

  • triggers[].type

  • 指定事件源类型(支持30+类型,如 prometheuskafkaaws-sqs-queue 等)。

  • metadata

  • 定义事件源的连接参数(例如RabbitMQ队列名称、触发阈值)。

  • authenticationRef

  • 推荐通过 TriggerAuthentication 或Kubernetes Secret管理敏感信息(如密码)。

1.2 ScaledJob资源定义

说明:ScaledJob的缩写为sj

定义一个ScaledJob资源

apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: rabbitmq-batch-job-scaler  # ScaledJob名称
  namespace: default
spec:
  jobTargetRef:
    backoffLimit: 4               # 任务失败重试次数
    parallelism: 10               # 最大并行任务数
    completions: 1                # 每个Job需完成的任务数
    template:
      spec:
        containers:
        - name: video-processor
          image: xxx:test         # 你的镜像
  pollingInterval: 30             # 检查队列状态的时间间隔(秒)
  maxReplicaCount: 10             # 最大并行Job实例数
  successfulJobsHistoryLimit: 3   # 保留成功Job的历史记录数
  failedJobsHistoryLimit: 1       # 保留失败Job的历史记录数
  triggers:
  - type: rabbitmq                # 触发器类型
    metadata:
      host: amqp://user:pass@rabbitmq.default.svc.cluster.local:5672  # RabbitMQ地址
      queueName: orders           # 监听的队列名称
      queueLength: "10"           # 每10条消息触发一个Job
      activationQueueLength: "1"  # 至少1条消息才启动Job
    authenticationRef:
      name: rabbitmq-credentials  # 引用安全凭证(推荐TriggerAuthentication)

关键字段说明:

  • jobTargetRef

  • 定义要创建的Kubernetes Job模板(核心业务逻辑)。

  • parallelism:单个Job允许的最大并行Pod数。

  • backoffLimit:任务失败后的重试次数。

  • maxReplicaCount: 20

  • 允许同时运行的最大Job实例数(例如:队列有200条消息时,触发20个Job,每个处理10条)。

  • queueLength: "10"

  • 每条消息对应一个Job:若设置为 1,则每条消息生成一个Job。

  • 批量处理:设置为 10 表示每10条消息触发一个Job(适合批量任务)。

  • successfulJobsHistoryLimit

  • 控制保留的历史成功Job数量,避免资源浪费。

1.2 TriggerAuthentication资源定义

说明:TriggerAuthentication的缩写为ta

1.2 从 Kubernetes Secret 中获取认证信息(secretTargetRef

1、定义一个Secret资源

apiVersion: vl
  kind: Secret
metadata:
  name: mysql-secrets
  namespace: my-project
type: Opaque
dataString:
  mysql conn_str: user:password@tep (mysql:3306)/stats db

2、定义TriggerAuthentication资源

apiVersion: keda.sh/vlalphal
  kind: TriggerAuthentication
metadata:
  name: keda-trigger-auth-mysql-secret
  namespace: my-project
spec:
  secretTargetRef:
  - parameter:connectionString #Scaler参数名字
  name: mysql-secrets #secret名称
  key: mysql_conn_str #key名称

3、定义一个ScaledObject资源进行绑定

apiVersion: keda.sh/vlalphal
  kind: ScaledObject
metadata:
  name: mysql-scaledobject
  namespace: my-project
spec:
  secretTargetRef:
    name: worker
  triggers: 
  - type: mysql
    authenticationRef:
      name: keda-trigger-auth-mysql-secret

1.2 从 Pod 环境变量中获取认证信息(env

configMap形式:

configMapTargetRef:
- parameter: connectionString
  name: my-keda-configmap-resource-name
  key: azure-storage-connectionstring

env形式:

env
- parameter: region
  name: my-env-var
  containerName: my-container
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容