当前位置: 首页 > 知识库问答 >
问题:

KEDA 无法缩放到 1 个豆荚以上

万俟亦
2023-03-14

我有一个库伯内特斯部署,它部署了一个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。

到目前为止,我已经尝试过使用< code>pollingInterval和< code>cooldownPeriod标记,但是似乎都没有效果。有什么想法吗?

编辑:

我从部署YAML文件中删除了< code>replicas值,如下所示。还查看了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 条消息发送到队列之后。出于某种原因,即使我在 KEDA YAML 文件中将设置为 1,它也只认为需要 1 个 pod。

共有2个答案

冯通
2023-03-14

请检查一次KEDA版本。如果您使用的是低于或等于2.1的vesion,那么您需要添加queueL的参数queueL的默认值是20,这意味着,一个pod可以执行20条消息。ScaledObject直到21条消息才会增加pod。您必须将queueL的设置为1,以便为每条消息增加一个pod计数。

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

模式参数已添加到 KEDA 版本 2.2 中。

夏侯涵映
2023-03-14

万一其他人偶然发现这个问题,我设法找到了一个解决办法。根据文档,不推荐使用< code>queueLength,而应使用< code>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'
 类似资料:
  • PostgreService.yaml 已创建服务的终结点为 然后我在pod(kubectl exec-it mark-dummy-pod bash)内运行ping172.31.6.149,但不工作。(ping localhost正在工作)

  • 我在一个有3个节点的kubernetes集群上运行nginx。 我想知道是否有任何好处,例如,有4个豆荚和限制他们的CPU/MEM约。节点容量的1/4相对于每个节点运行一个pod,限制CPU/MEM,以便pod可以使用整个节点的资源(为了简单起见,我们将cubernet服务排除在等式之外)。 我的感觉是,豆荚越少,开销就越小,每个节点使用1个豆荚应该是性能最好的? 提前致谢

  • 我在Linux服务器的Kubernetes上安装了带有2或3个pod的Spring Boot应用程序。为了监控它,我也安装了普罗米修斯。目前,从应用程序到普罗米修斯的衡量标准进展顺利。 但我怀疑普罗米修斯只从一个豆荚中提取指标。对于普罗米修斯配置文件中的如下作业,普罗米修斯是否只从一个pod中获取指标?我怎样才能让普罗米修斯同时刮掉所有的豆荚呢?

  • 环境*Kubernetes 1.9.3*使用在AWS(专用网络拓扑)上运行的kops(V1.8)创建的集群*网络:weave-net*集群:1主,3节点 事件实例时间线 > 我们已经使用kops执行了滚动集群更新,以使用我们构建的新AMI(基于kops AMI k8s-1.8-debian-jessie-amd64-hvm-ebs-2017-11-27)启动节点和主机。调整kops AMI从来都不

  • 正在等待,服务endpoint尚未就绪。 Minikube版本:V0.20.0 环境: minikube日志还报告了以下错误:..... 名称:kubernetes-dashboard-2039414953-czptd命名空间:kube-system节点:minikube/192.168.99.102开始时间:2017年7月14日星期五09:31:58+0530标签:k8s-app=kuberne

  • 我们有一个应用程序,其中包含 4 个 pod,并使用负载均衡器运行!我们想尝试滚动更新,但我们不确定当 Pod 出现故障时会发生什么!文档不清楚!特别是《豆荚的终止》中的这句话: Pod将从服务的endpoint列表中删除,并且不再被视为复制控制器的运行Pod集的一部分。缓慢关闭的Pod可以继续为流量提供服务,因为负载平衡器(如服务代理)将它们从轮换中删除。 因此,如果有人能在以下问题上指导我们: