我需要一些关于如何在部署时重新启动所有气流服务而不在任务中杀死工作人员的建议 .
我已经为我的DAG编写了一个部署过程,它在virtualenv中安装了气流和任何其他pip依赖项 . 一旦我的发布目录准备就绪,我:
-
停止airflow-flower,airflow-worker,airflow-scheduler和airflow-webserver
-
更新"current" simlink以指向我的新版本
-
启动airflow-flower,airflow-worker,airflow-scheduler和airflow-webserver
此部署过程的问题是工作人员立即被杀死 . 我想在脚本中添加某种监控以暂停所有DAG,等待工作人员空闲,然后重新启动服务,但气流CLI无法了解哪些dag已启用,也无法了解工作人员是否空闲 .
我知道许多气流服务可以自动检测dags文件夹中的更改,但我希望每个部署都有自己的virtualenv . 如果我不重新启动所有服务,那么新部署将不会在我的requirements.txt文件中选取新行 .
2 回答
您可以访问Airflow DB,因此请考虑开发一个为您执行此过程的部署脚本 .
更新DAG表以暂停所有DAG
读取TASK_INSTANCE表,等待所有RUNNING状态任务完成
重启Airflow服务 .
更新DAG表以取消暂停DAG .
气流工作人员从SIGINT中优雅地退出 . 更新您的进程监视器以使用SIGINT而不是默认值退出 . 如果你使用的是systemctl,那么它看起来像这样: