通过Airflow创建的Kubernetes Pod保持运行状态

8

我已经在Kubernetes集群中安装了Airflow。为了运行任务,我正在使用KubernetesPodOperator

当我运行一个任务并查看kubectl get pods时,我看到正确地创建了一个pod,并且它也完成了。然而,当我查看Airflow时,我发现状态没有更新,它仍然显示为运行状态。

[2019-01-27 12:43:56,580] {models.py:1595} INFO - Executing <Task(KubernetesPodOperator): xxx> on 2019-01-20T00:00:00+00:00
[2019-01-27 12:43:56,581] {base_task_runner.py:118} INFO - Running: ['bash', '-c', 'airflow run xxx xxx 2019-01-20T00:00:00+00:00 --job_id 15 --raw -sd DAGS_FOLDER/xxx.py --cfg_path /tmp/tmpxx39wldz']
[2019-01-27 12:45:21,603] {models.py:1355} INFO - Dependencies not met for <TaskInstance: xxx.xxx 2019-01-20T00:00:00+00:00 [running]>, dependency 'Task Instance Not Already Running' FAILED: Task is already running, it started on 2019-01-27 12:43:56.565328+00:00.
[2019-01-27 12:45:21,639] {models.py:1355} INFO - Dependencies not met for <TaskInstance: xxx.xxx 2019-01-20T00:00:00+00:00 [running]>, dependency 'Task Instance State' FAILED: Task is in the 'running' state which is not a valid state for execution. The task must be cleared in order to be run.
[2019-01-27 12:45:21,641] {logging_mixin.py:95} INFO - [2019-01-27 12:45:21,641] {jobs.py:2614} INFO - Task is not able to be run

我需要做什么来将Pod的状态返回给Airflow?KubernetesPodOperator定义如下:

do_something = KubernetesPodOperator(
    task_id='xxx',
    image='gcr.io/project/image',
    namespace='default',
    name='xxx',
    arguments=['dummy'],
    xcom_push=True,
    in_cluster=True,
    image_pull_policy='Always',
    trigger_rule='dummy',
    dag=dag,
)

编辑: 看起来基础容器已经完成了,但是airflow-xcom-sidecar仍在运行。我需要做些什么来停止它呢?


你找出问题所在了吗?我也遇到了同样的问题,但是我找不到侧车为什么一直在运行的根本原因。/airflow/xcom/return.json已经被正确创建,并且基础容器已经完成。 - aaaaahaaaaa
我想我最终改变了设置的一部分。那么,在你的情况下,一切都成功了,但它没有显示在Airflow XCom中吗? - bartcode
我的问题似乎与你遇到的问题完全相同。基础容器成功终止(pod被标记为“已完成”),但是边车容器仍在运行。如果我ssh进入边车容器,我可以看到return.json文件已由基础容器创建,这意味着问题不是边车一直在寻找它或其他什么原因。并且我在Airflow上收到了相同的错误消息(“...依赖项'Task Instance State'失败...”)。 - aaaaahaaaaa
完全相同的设置有时可以工作,似乎可能是由于非常长的任务引起的。事实是,在k8s上运行的Airflow不稳定,我一直遇到问题。 - aaaaahaaaaa
1个回答

0
很难在不查看您的设置的情况下确定,但看起来Pod已经完成,并且正在尝试将xcom推送到您的主Airflow,但无法连接。我会检查airflow-xcom-sidecar的日志。类似于:
$ kubectl logs <airflow-job-pod> -c airflow-xcom-sidecar

您也可以尝试使用xcom_push=False运行您的KubernetesOperator

do_something = KubernetesPodOperator(
    task_id='xxx',
    image='gcr.io/project/image',
    namespace='default',
    name='xxx',
    arguments=['dummy'],
    xcom_push=False,
    in_cluster=True,
    image_pull_policy='Always',
    trigger_rule='dummy',
    dag=dag,
)

很奇怪,这些日志没有显示任何内容。我目前正在解决方案中禁用xcom_push,但还不能向您更新。无论如何,我认为xcom_push不应该阻止解决方案的工作。 - bartcode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接