Superset Worker重启且Celery忽略配置值问题求助(K8s/SQS/S3)
问题1:存活探针执行失败导致Worker不断重启
核心原因
celery inspect ping 命令依赖Celery的远程控制功能,但你已经禁用了该功能;同时SQS作为云原生Broker,本身不支持Celery原生的节点发现机制,导致探针无法获取Worker响应。
解决方案
替换存活探针命令
放弃依赖远程控制的inspect ping,改用更可靠的进程检查方式:
在Helm values.yaml中修改Worker的存活探针配置:worker: livenessProbe: command: - sh - -c - "ps aux | grep 'celery worker' | grep -v grep" initialDelaySeconds: 30 periodSeconds: 10 failureThreshold: 3或者检查Celery的pid文件(如果Worker启动时生成pid文件的话):
command: - sh - -c - "cat /tmp/celery.pid && kill -0 $(cat /tmp/celery.pid)"延长探针超时与启动延迟
如果暂时不想换探针命令,可以先调整参数给Worker足够的启动时间:livenessProbe: command: - celery - -A - superset.tasks.celery_app:app - inspect - ping - -d - celery@$HOSTNAME - --timeout - "15" initialDelaySeconds: 60 periodSeconds: 20
问题2:禁用远程控制后仍创建大量pid队列
核心原因
Celery 5.x与SQS Broker的兼容性问题,或者配置未正确传递到Superset的Celery应用实例。
解决方案
确保配置正确加载
不要只在Helm values中设置worker_enable_remote_control和CELERY_ENABLE_REMOTE_CONTROL,需要将配置注入到Superset的superset_config.py中:
在Helm values中添加额外配置:extraEnv: - name: SUPERSET_CELERY_ENABLE_REMOTE_CONTROL value: "False" - name: SUPERSET_WORKER_ENABLE_REMOTE_CONTROL value: "False"或者通过extraConfigMap挂载自定义配置文件:
extraConfigMaps: superset-custom-config: mountPath: /app/pythonpath/superset_config.py subPath: superset_config.py data: superset_config.py: | CELERY_ENABLE_REMOTE_CONTROL = False worker_enable_remote_control = False调整Celery SQS传输配置
添加Broker传输选项,限制队列创建行为:
在superset_config.py中补充:CELERY_BROKER_TRANSPORT_OPTIONS = { 'queue_name_prefix': 'superset-', 'visibility_timeout': 3600, 'region': 'your-aws-region', 'disable_rate_limits': True }升级/降级Celery版本
celery[sqs] 5.2.7存在已知的SQS队列创建bug,建议升级到5.2.8及以上版本,或者降级到5.2.6,修复该问题。清理冗余队列
通过AWS CLI批量清理已创建的pid队列:aws sqs list-queues --queue-name-prefix "celery-pidbox-" | jq -r '.QueueUrls[]' | xargs -I {} aws sqs delete-queue --queue-url {}
内容的提问来源于stack exchange,提问作者D. Gal

