0

我有一个 Kubernetes 部署,它部署了一个 Pod,该 Pod 将从 RabbitMQ 队列中拉下一条消息。我还使用 KEDA 根据当前队列中的 RabbitMQ 消息来扩展部署。它正确地缩放到 0,然后在有消息时缩放到 1,但部署永远不会扩展到 1 以上。我当前的部署 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: scale
  labels:
    app: scale
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: scale
  template:
    metadata:
      labels:
        app: scale
    spec:
      containers:
        - name: scale-deployment
          image: bharper7/scale:v1
          imagePullPolicy: Never

我的 KEDA YAML 文件:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: scale-keda-deployment
  labels:
    app: scale
    deploymentName: scale
spec:
  scaleTargetRef:
    name: scale
  pollingInterval: 5
  minReplicaCount: 0
  maxReplicaCount: 10
  cooldownPeriod: 60
  triggers:
  - type: rabbitmq
    metadata:
      host: amqp://EmZn4ScuOPLEU1CGIsFKOaQSCQdjhzca:dJhLl2aVF78Gn07g2yGoRuwjXSc6tT11@192.168.49.2:30861
      mode: QueueLength
      value: '1'
      queueName: scaleTest

KEDA 操作员日志文件:

2021-04-28T19:25:39.846Z        INFO    scaleexecutor   Successfully updated ScaleTarget        {"scaledobject.Name": "scale-keda-deployment", "scaledObject.Namespace": "default", "scaleTarget.Name": "scale", "Original Replicas Count": 0, "New Replicas Count": 1}
2021-04-28T19:25:40.272Z        INFO    controllers.ScaledObject        Reconciling ScaledObject        {"ScaledObject.Namespace": "default", "ScaledObject.Name": "scale-keda-deployment"}

就 RabbitMQ 连接正常工作而言,我知道一切,并且 KEDA 知道要查看什么部署以及什么队列。所有这一切都通过 Pod 扩展到 0 和 1 的事实得到证明。但由于某种原因,即使队列中有 50 条消息,它也永远不会超过 1。

到目前为止,我已经尝试过使用pollingIntervalandcooldownPeriod标签,但似乎都没有效果。有任何想法吗?

编辑:

replicas按照下面的建议从部署 YAML 文件中删除了该值。并且还查看了 HPA 日志。

生成的 HPA 日志:

Name:                                           keda-hpa-scale-keda-deployment
Namespace:                                      default
Labels:                                         app=scale
                                                app.kubernetes.io/managed-by=keda-operator
                                                app.kubernetes.io/name=keda-hpa-scale-keda-deployment
                                                app.kubernetes.io/part-of=scale-keda-deployment
                                                app.kubernetes.io/version=2.1.0
                                                deploymentName=scale
                                                scaledObjectName=scale-keda-deployment
Annotations:                                    <none>
CreationTimestamp:                              Wed, 28 Apr 2021 11:24:15 +0100
Reference:                                      Deployment/scale
Metrics:                                        ( current / target )
  "rabbitmq-scaleTest" (target average value):  4 / 20
Min replicas:                                   1
Max replicas:                                   10
Deployment pods:                                1 current / 1 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    ReadyForNewScale    recommended size matches current size
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from external metric rabbitmq-scaleTest(&LabelSelector{MatchLabels:map[string]string{scaledObjectName: scale-keda-deployment,},MatchExpressions:[]LabelSelectorRequirement{},})
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:
  Type     Reason             Age                From                       Message
  ----     ------             ----               ----                       -------
  Warning  FailedGetScale     22m (x6 over 23m)  horizontal-pod-autoscaler  deployments/scale.apps "scale" not found
  Normal   SuccessfulRescale  15m                horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

这是在将 5 条消息发送到队列之后。出于某种原因,即使我value在 KEDA YAML 文件中设置为 1,它也只认为需要 1 个 pod。

4

2 回答 2

0

万一其他人偶然发现了这个问题,我设法找到了解决方法。根据docsqueueLength不推荐使用 ,mode应改为使用 。但是改回不推荐使用的标签对我有用,由于某种原因,新标签不起作用。不是真正的正确修复,但至少它使我的部署按预期扩展。我的 KEDA 部署文件现在如下所示:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: keda-deployment
  labels:
    apps: ffmpeg
    deploymentName: ffmpeg
spec:
  scaleTargetRef:
    name: ffmpeg
  pollingInterval: 10
  cooldownPeriod: 1200
  maxReplicaCount: 50
  triggers:
  - type: rabbitmq
    metadata:
      host: amqp://EmZn4ScuOPLEU1CGIsFKOaQSCQdjhzca:dJhLl2aVF78Gn07g2yGoRuwjXSc6tT11@192.168.49.2:30861
      queueName: files
      queueLength: '1'
于 2021-04-29T14:05:27.413 回答
0

请检查一次 KEDA 版本。如果您使用低于或等于 2.1 的版本,则需要添加queueLength参数。默认值为queueLength20,即一个 Pod 可以执行 20 条消息。ScaledObject 不会增加 pod 直到 21 条消息。您必须设置queueLength为 1 才能将每条消息的 pod 计数增加一个。

文档链接:https ://keda.sh/docs/2.1/scalers/rabbitmq-queue/

modevalue参数是在 KEDA 2.2 版本中添加的。

于 2021-06-14T05:10:29.223 回答