Django + Celery + Redis на кластере K8s

У меня есть приложение Django, развернутое на кластере K8s. Мне нужно отправить несколько писем (некоторые из них запланированы, другие должны быть отправлены асинхронно), и идея заключалась в том, чтобы делегировать эти письма Celery.

Итак, я установил сервер Redis (с Sentinel) на кластере, развернул экземпляр для Celery worker и еще один для Celery beat.

Объект k8s, используемый для развертывания Celery worker, довольно похож на тот, что используется для приложения 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? Может быть, мне не хватает каких-то переменных? Может ли это быть из-за того, что стручки находятся в другом пространстве имен?

Спасибо!

Вернуться на верх