【发布时间】:2020-11-08 16:54:32
【问题描述】:
我在 Kubernetes pod 中运行 Celery。找不到服务器:
ERROR/MainProcess] 消费者:无法连接到 redis://:**@redis-master:6379/1:错误 -3 连接到 redis-master:6379。查找超时.. 4.00 秒后重试... (1/100)
如果我通过“kubectl exec -it”连接到同一个 pod 并运行命令,我会成功:
redis-cli -u redis://:@redis-master:6379/1 键'*'
(空列表或集合)
如何解决这个问题?
更新 1: DNS 中明显存在问题:
如果我将主机设置为域名:
export REDIS_HOST=redis-master.dev.svc.cluster.local
celery worker --app src
TIMEOUT
如果我将主机设置为域名:
export REDIS_HOST=10.0.13.13
celery worker --app src
OK
同时:
# dig redis-master.dev.svc.cluster.local
; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> redis-master.dev.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49071
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;redis-master.dev.svc.cluster.local. IN A
;; ANSWER SECTION:
redis-master.dev.svc.cluster.local. 30 IN A 10.0.13.13
;; SERVER: 10.0.0.10#53(10.0.0.10)
因此,问题被缩小到: 为什么 Celery 不使用 DNS?
更新 2: Python 库dnspython 中的问题。 版本 2.0.0 - 解决中的错误 版本 1.16.0 - 像魅力一样工作
解决方案
pip install dnspython==1.16.0
【问题讨论】:
-
编辑问题以添加所有部署 yaml。 redis pod 正在运行吗?
-
嘿@Michael A,您是否尝试过使用 Redis svc IP 而不是主机名?你检查过你传递给 Celery 匹配 redis-master 的环境变量吗?
-
@ArghyaSadhu “redis pod 正在运行?” - 正如我在问题中提到的那样,它不仅在运行,而且如果我从同一个 pod 中到达它,它也会成功响应。这就是我没有发布 YAML 的原因——它手动处理这些 YAML。
-
@marianogg9 写在 Celery 输出错误:正确的服务器名称。如果 Celery 打印正确的地址,则无需检查是否有正确的地址 :-)
标签: kubernetes redis celery