k8s使用keda监听mq进行弹性伸缩容器
背景RabbitMQ队列RabbitMQ是一种称为消息代理或队列管理器的消息队列软件.简单地说: 这是一个可以定义队列的软件,应用程序可以连接到队列并将消息传输到该队列上。RabbitMQ使用者被部署为接受RabbitMQ服务器生成的队列并模拟执行的部署。原理使用触发器创建ScaledObject,监听mq队列消息1,创建ScaledObject后,KEDA控制器将自动同步配置并开始监视上面创建的
背景
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配置
更多推荐
所有评论(0)