KEDA v2.7.1无法基于RabbitMQ队列长度扩缩容Celery工作Pod
问题定位
KEDA无法触发Celery Worker扩缩容的核心原因是Operator无法正常建立与RabbitMQ的连接,具体存在两个配置错误:
- 域名解析配置错误:KEDA Operator默认部署在
keda命名空间,你在ScaledObject中配置的RabbitMQ地址是短域名rabbitmq,Operator会优先在自身所在的keda命名空间下解析该域名,无法找到default命名空间下的RabbitMQ Service,触发日志中的DNS解析报错。 - 连接凭证配置错误:你的RabbitMQ实例通过环境变量配置了自定义账号密码,凭证存储在名为
secret的Secret资源中,并未使用RabbitMQ默认的guest/guest账号,即便域名解析正常,错误的凭证也会导致连接失败。
修复方案
按以下步骤调整配置即可恢复自动扩缩容能力:
准备KEDA使用的RabbitMQ连接凭证Secret
将连接串中的账号密码替换为你实际配置的RabbitMQ用户名、密码,执行命令创建专用Secret:kubectl create secret generic keda-rabbitmq-conn --from-literal=host="amqp://<替换为实际RabbitMQ用户名>:<替换为实际RabbitMQ密码>@rabbitmq.default.svc.cluster.local:5672" -n default这里使用集群内Service全限定域名
rabbitmq.default.svc.cluster.local,彻底避免跨命名空间的DNS解析问题。调整ScaledObject配置,通过TriggerAuthentication引用凭证
替换原有keda.yaml内容为以下配置,移除硬编码的明文连接地址,通过KEDA原生的TriggerAuthentication资源引用刚才创建的凭证Secret:apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: celery-worker-scaler namespace: default spec: scaleTargetRef: name: celery-worker pollingInterval: 3 minReplicaCount: 1 maxReplicaCount: 10 triggers: - type: rabbitmq metadata: protocol: amqp queueName: celery mode: QueueLength value: "5" authenticationRef: name: rabbitmq-auth --- apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: rabbitmq-auth namespace: default spec: secretTargetRef: - parameter: host name: keda-rabbitmq-conn key: host应用配置并验证状态
执行kubectl apply -f keda.yaml应用新配置,等待10秒后查看KEDA Operator日志,如果没有连接报错,往celery队列投递超过5条消息即可触发扩容。异常兜底排查
如果调整配置后仍然报DNS解析错误,执行以下命令检查集群CoreDNS组件运行状态:kubectl get pods -n kube-system -l k8s-app=kube-dns如果存在CoreDNS Pod状态异常、反复重启的情况,删除异常Pod等待其自动重建即可恢复集群内域名解析能力。
内容的提问来源于stack exchange,提问作者JSON_Derulo
相关产品推荐
相关产品推荐

