簡體   English   中英

K8s 集群上的 Django + Celery + Redis

[英]Django + Celery + Redis on a K8s cluster

我在 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 服務器沒有任何問題)。 但是,由於無法連接到 Redis 服務器( ERROR celery.backends.redis Connection to Redis lost: Retry (1/20) in 1.00 second. [PID:7:uWSGIWorker1Core0]因此不會發送異步電子郵件 - 由 Django 應用程序“委托” 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 位於不同的命名空間中嗎?

謝謝!

這是為了更好的可見性而發布的社區 wiki 答案。 隨意擴展它。

來自@sofia 的解決方案有助於解決此問題:

需要為 Redis 服務器和 Django 應用程序使用相同的命名空間。 在這種特殊情況下,將命名空間“redis”更改為部署應用程序的“development”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM