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的理解,以后我新的发现会补充

Logo

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

更多推荐