背景

RabbitMQ队列

RabbitMQ是一种称为消息代理或队列管理器的消息队列软件.

简单地说: 这是一个可以定义队列的软件,

应用程序可以连接到队列并将消息传输到该队列上。

RabbitMQ使用者被部署为接受RabbitMQ服务器生成的队列并模拟执行的部署。

原理

使用触发器创建ScaledObject,监听mq队列消息

1,创建ScaledObject后,KEDA控制器将自动同步配置并开始监视上面创建的Rabbitmq-consumer,而其会监听对应的mq队列消息数

2,而ScaledObject和HPA(水平Pod自动缩放器)配置会绑定你对应的pod (Deployment)项目,KEDA将驱动容器根据从事件源接收的信息进行横向扩展

3,扩容原理:并根据通过ScaledObject提供的触发规则(在此示例中,如果rabbitmq队列消息积压数量为5的时候就会扩容1个pod数量,如果队列消息积压数为10则扩容2个pod,如果队列消息积压数为15则扩容3个pod

4,缩容原理:若rabbitmq队列积压数减少的时候,keda的触发器会联动HPA对绑定的pod (Deployment)项目进行缩容,如果队列消息积压数为10则缩容为2个pod,如果为5则缩容为1个pod

实施

1,在k8s集群上执行apply 下面的yaml文件,新建了ScaledObject 就可以了

1,监控MQ的队例长度与扩容数量的yaml文件内容

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: rabbitmq-xxx-xxx-consumer
  namespace: xxxx-test
spec:
  scaleTargetRef:  # scale 的目标引用
    name: xxx-xx
  pollingInterval: 30 # 多长时间监听一次队列可选. 默认: 30 seconds
  cooldownPeriod: 3600 # pod生存的时间可选. 默认: 300 seconds
  maxReplicaCount: 5 # 最大容器数量可选. 默认: 100
  triggers:
  - type: rabbitmq  # 基于 rabbitmq 进行伸缩
    metadata:
      queueName: xxxxx  # 监听的队列名
      queueLength: "5"  #每达到5个堆积任务数量进行扩容
    authenticationRef:
      name: rabbitmq-xxx-xxx-consumer-trigger   #调用下面的TriggerAuthentication
---
#TriggerAuthentication配置
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: rabbitmq-xxx-xxx-consumer-trigger
  namespace: xxxxt-test
spec:
  secretTargetRef:
    - parameter: host
      name: rabbitmq-xxxx-edit    #调用Secret (K8S集群中配置的MQ账号密码 )
      key: RabbitMqHost

Secret配置

上面yaml 中的mq队列配置  rabbitmq-xxxx-edit 这个需要在同命名空间的secret配置

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐