我们使用Airflow进行作业调度。为了在隔离环境中运行代码,我们让Airflow通过BashOperator和docker-compose生成作业。因此,每个Airflow任务都创建一个容器。这很好用,但我们注意到提前终止的作业有一个问题。
例如,当一个作业在airflow web界面中被设置为失败时,日志会指示SIGTERM已被发送,并且该进程不再存在。Airflow及其组件本身在docker容器中运行(请参阅下面的docker-compose)。查看Airflow-worker容器,我们会看到该进程确实已被终止。
然而,当我们查看docker ps时,我们看到docker容器实际上仍然是活动的!显然这是非常危险的,因为根据气流GUI,不再运行的潜在长时间运行的任务实际上正在消耗资源。
有什么办法吗?
Airflow Version 2.4.3我们使用这个docker-compose.yml来部署不同的气流组件https://airflow.apache.org/docs/apache-airflow/2.4.3/docker-compose.yaml
1条答案
按热度按时间xesrikrc1#
我们找到了解决问题的办法。
现在,Airflow中提供了一个
DockerOperator
,作为处理停止和删除Docker容器的提供程序。主代码:https://github.com/apache/airflow/blob/main/airflow/providers/docker/operators/docker.py示例:https://github.com/apache/airflow/blob/providers-docker/3.0.0/tests/system/providers/docker/example_docker_copy_data.py