k8s 弹性伸缩 ScaledObject
文章目录
前言
- 以下主要是介绍利用ScaledObject控制Deployment,通过rabbitmq的队列消息数量动态调整pod的个数
kubectl apply -f https://github.com/kedacore/keda/releases/download/v2.0.0-beta/keda-2.0.0-beta.yaml
一、ScaledObject yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: rabbitmq-ssssss
spec:
scaleTargetRef: # scale 的目标引用
name: rabbitmq-consumer
pollingInterval: 10 # 多长时间监听一次队列可选. 默认: 30 seconds
cooldownPeriod: 30 # pod生存的时间可选. 默认: 300 seconds
maxReplicaCount: 10 # 最大容器数量可选. 默认: 100
minReplicaCount: 1 # 最小容器数量可选. 默认: 1
triggers:
- type: rabbitmq # 基于 rabbitmq 进行伸缩
metadata:
queueName: ssssss # 监听的队列名
queueLength: '5' #每达到5个堆积任务数量进行扩容
host: 'amqp://guest:guest@rabbitmq.scaledobject.svc.cluster.local:5672'
二、scaleTargetRef
name
- name 指定控制那个 Deployment Deployment的name
三、pollingInterval
- 指定多长时间去监听一次队列,默认值为30秒
四、cooldownPeriod
- 这个冷却时间,我的理解就是当ScaledObject判断到不需要这么多pod的时候,就是需要缩容的时候有一个冷静期,假设设置为10s,在10秒后就会开始关闭一些pod,默认值为30秒
五、maxReplicaCount
- 最大的副本数量,就是可以扩容到最大的值,假如设置为10,那最多扩容到10个pod,默认值为100
六、minReplicaCount
- 最小的副本数量,就是可以缩容到最小的值,假如设置为5,那会保持最小5个pod,设置了minReplicaCount的话会覆盖Deployment的replicas ,例如Deployment的replicas设置为10, minReplicaCount设置5,那Deployment会先创建10个pod,之后ScaledObject会自动缩容到5pod 。
- 设置了minReplicaCount的时候,好像cooldownPeriod会失效,会按cooldownPeriod的默认值300秒来处理,这个我通过实验是这样的结果,不知道是不是我当中的一些操作有问题。
- 默认值为1
七、triggers
这里只是介绍rabbitmq
- type rabbitmq
- metadata
queueName 队列名字
queueLength 需要扩容的消息数量 加入设置为20,当消息每增加20个就会扩容一个pod
host rabbitmq 的连接 amqp://用户名称:密码@Service的name.命名空间.svc.cluster.local:端口 这里需要跨命名空间连接
总结
以上是我对ScaledObject的理解,以后我新的发现会补充