【发布时间】:2018-06-25 16:38:33
【问题描述】:
我正在运行一个包含三个 Celery pod 的 Kubernetes 集群,使用单个 Redis pod 作为消息队列。 Celery 版本 4.1.0,Python 3.6.3,来自 helm 的标准 Redis pod。
在看似快速涌入的任务中,Celery pod 停止处理任何任务。他们在最初的几个任务中会很好,但最终会停止工作,我的任务会挂起。
我的任务遵循以下格式:
@app.task(bind=True)
def my_task(some_param):
result = get_data(some_param)
if result != expectation:
task.retry(throw=False, countdown=5)
而且一般排队如下:
from my_code import my_task
my_task.apply_async(queue='worker', kwargs=celery_params)
我deployment.yaml的相关部分:
command: ["celery", "worker", "-A", "myapp.implementation.celery_app", "-Q", "http"]
此集群与我使用docker-compose 管理的本地集群之间的唯一区别是集群运行prefork 池,而我在本地运行eventlet 池以便能够将代码放在一起覆盖报告。我已经尝试在集群上运行eventlet,但我看不出结果有什么不同,任务仍然挂起。
在 Kubernetes 中运行 Celery 工作器有什么我遗漏的吗?是否存在可能影响我的结果的错误?有什么好的方法可以闯入集群,看看这个问题到底发生了什么?
【问题讨论】:
标签: python python-3.x redis kubernetes celery