我有一个库伯内特斯部署,它部署了一个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。
请检查一次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 中。
万一其他人偶然发现这个问题,我设法找到了一个解决办法。根据文档,不推荐使用< 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可以继续为流量提供服务,因为负载平衡器(如服务代理)将它们从轮换中删除。 因此,如果有人能在以下问题上指导我们: