我有一个Kubernetes部署,它部署了一个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: scaleTestKEDA操作员日志文件:
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。
到目前为止,我已经尝试过使用pollingInterval和cooldownPeriod标记,但似乎都没有效果。有什么想法吗?
编辑:
我按照下面的建议从部署YAML值中删除了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文件中将value设置为1,它也认为只需要1个pod。
发布于 2021-04-29 22:05:27
如果其他人遇到这个问题,我设法找到了一个变通的办法。根据docs的说法,queueLength的使用已被弃用,应该使用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-06-14 13:10:29
请检查一下KEDA版本。如果你使用的是小于或等于2.1的版本,那么你需要添加queueLength参数。queueLength的默认值为20,即一个实例可以执行20条消息。ScaledObject在21条消息之前不会增加pod。您必须将queueLength设置为1,以便为每条消息增加1个pod计数。
文档链接:https://keda.sh/docs/2.1/scalers/rabbitmq-queue/
mode和value参数是在KEDA版本2.2中添加的。
https://stackoverflow.com/questions/67307036
复制相似问题