【问题标题】:Django + Celery + Redis on a K8s clusterK8s 集群上的 Django + Celery + Redis
【发布时间】:2021-12-22 08:46:02
【问题描述】:

我在 K8s 集群上部署了一个 Django 应用程序。我需要发送一些电子邮件(一些是预定的,其他应该异步发送),我的想法是将这些电子邮件委托给 Celery。

所以我在集群上设置了一个 Redis 服务器(带有 Sentinel),并为 Celery worker 部署了一个实例,为 Celery beat 部署了另一个实例。

用于部署 Celery worker 的 k8s 对象与用于 Django 应用程序的对象非常相似。主要区别在于 celery worker 上引入的命令:['celery', '-A', 'saleor', 'worker', '-l', 'INFO']

发送预定的电子邮件没有问题(celery worker 和 celery beat 在连接到 Redis 服务器时没有任何问题)。但是,异步电子邮件 - 由 Django 应用程序“委托” - 不会发送,因为无法连接到 Redis 服务器 (ERROR celery.backends.redis Connection to Redis lost: Retry (1/20) in 1.00 second. [PID:7:uWSGIWorker1Core0])

错误 1:

socket.gaierror: [Errno -5] No address associated with hostname 

错误 2:

redis.exceptions.ConnectionError: Error -5 connecting to redis:6379. No address associated with hostname. 

Redis 服务器、Celery worker 和 Celery beat 位于“redis”命名空间中,而其他事物(包括 Django 应用程序)位于“development”命名空间中。

这是我定义的变量:

- name: CELERY_PASSWORD
  valueFrom:
    secretKeyRef:
      name: redis-password
      key: redis_password
- name: CELERY_BROKER_URL
  value: redis://:$(CELERY_PASSWORD)@redis:6379/1
- name: CELERY_RESULT_BACKEND
  value: redis://:$(CELERY_PASSWORD)@redis:6379/1

我也尝试定义CELERY_BACKEND_URL(与CELERY_RESULT_BACKEND具有相同的值),但没有任何区别。

无法连接到 Redis 服务器的原因可能是什么?我是否缺少任何变量?可能是因为 pod 位于不同的命名空间中?

谢谢!

【问题讨论】:

  • 这是一个正确的变体,还是您对您的问题进行了更改 - value: redis://:$(CELERY_PASSWORD)@redis:6379/1 ?如果它是原创的,那么我有两个问题。为什么// 后面有冒号,用户在哪里?通常的形式是redis://user:pass@host:port
  • 我看过一堆设置 Redis 和 Celery 的教程,但我真的无法告诉你为什么我有这样的 atm。但这是ConnectionPool() class of redis 上的示例。尽管如此,celery worker 和 celery beat pod 连接到 Redis 没有问题(日志说它们连接到 redis://:**@redis:6379/1)。我真的认为将 Django 应用程序放在另一个命名空间中才是真正的问题。
  • 默认情况下,Pod 可以通过 IP 地址相互通信,无论它们位于哪个命名空间。
  • 将 Redis 服务器更改为与 Django 应用程序相同的命名空间 ????‍♀️ @AndrewSkorkin

标签: django kubernetes redis celery


【解决方案1】:

来自@sofia 的解决方案有助于解决此问题:

您需要为 Redis 服务器和 Django 应用程序使用相同的命名空间。在这种特殊情况下,将命名空间“redis”更改为部署应用程序的“开发”。

【讨论】:

    猜你喜欢
    • 2019-08-03
    • 2020-06-16
    • 2020-06-26
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多