【问题标题】:Celery can't find Redis in KubernetesCelery 在 Kubernetes 中找不到 Redis
【发布时间】: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


【解决方案1】:

回答自己:

这是一个 dnspython 错误。 解决方案:

pip install dnspython==1.16.0

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 1970-01-01
    • 2022-01-11
    • 2018-12-06
    • 2020-04-13
    • 2011-04-23
    • 2014-07-19
    • 2016-06-09
    • 2015-12-08
    相关资源
    最近更新 更多