首页 > 解决方案 > Kubernetes/Airflow Celery worker 任务因 SigKill 9 错误而失败,但没有解释(猜测 OOME?)

问题描述

我正在 Kubernetes 上测试 Airflow。目前,我正在运行一个简单的 DAG,并有目的地尝试使其崩溃,以查看运行内存密集型任务会发生什么。我的进程查询一个非常大的表,我试图生成内存不足 (OOM) 错误。我知道它正在发生,因为任务失败但我能看到的唯一日志给出了一个模糊的错误:

subprocess.CalledProcessError: Command '['/tmp/venvuydlj38n/bin/python', '/tmp/venvuydlj38n/script.py', '/tmp/venvuydlj38n/script.in', '/tmp/venvuydlj38n/script.out', '/tmp/venvuydlj38n/string_args.txt']' died with <Signals.SIGKILL: 9>.

这是我唯一看到的。Kubernetes 中也没有告诉我为什么。吊舱没有重新启动,我在kubectl get events. 我不明白为什么 Kubernetes 不驱逐 Pod。从 Kubernetes 文档中,Kubernetes 应该杀死这个 pod 并重新安排它,但它看起来不像正在发生 - 但我的进程仍然收到 SigKill 9 错误。在这一点上,我知道这是一个 OOME,但是我想找到能够证实这一点的日志。如果我收到 Sigkill 9 错误,我想知道其他一些原因。

其他一些信息:我将 Celery worker 设置为 2GB 资源限制。

标签: kubernetesairflow

解决方案


要检查 pod 是否被 OOM 杀死,您可以kubectl describe在资源上运行:

$ kubectl describe <pod_name>

...
   State:          Running
      Started:      Thu, 10 Oct 2019 11:14:13 +0200
    Last State:     Terminated
      Reason:       OOMKilled
      Exit Code:    137
      Started:      Thu, 10 Oct 2019 11:04:03 +0200
      Finished:     Thu, 10 Oct 2019 11:14:11 +0200
...

推荐阅读