部署新dags的程序

时间:2016-11-22 22:20:20

标签: airflow

我需要一些关于如何在部署时重新启动所有气流服务而不会在任务中间杀死工作人员的建议。

我已经为我的DAG编写了一个部署程序,它在virtualenv中安装了气流和任何其他pip依赖项。一旦我的发布目录准备就绪,我:

  1. 停止气流花,气流工作者,气流调度程序和气流网络服务器
  2. 更新"当前" simlink指向我的新版本
  3. 启动airflow-flower,airflow-worker,airflow-scheduler和airflow-webserver
  4. 此部署过程的问题是工作人员立即被杀死。我想在脚本中添加某种监控以暂停所有DAG,等待工作人员空闲,然后重新启动服务,但气流CLI无法了解哪些dag已启用,也无法了解工作人员是否已启用空闲。

    据我所知,许多气流服务可以自动检测dags文件夹中的更改,但我希望每个部署都有自己的virtualenv。如果我没有重新启动所有服务,那么新的部署将无法在我的requirements.txt文件中获取新行。

2 个答案:

答案 0 :(得分:4)

您可以访问Airflow DB,因此请考虑开发一个为您执行此过程的部署脚本。

  • 更新DAG表以暂停所有DAG
  • 读取TASK_INSTANCE表以等待所有RUNNING状态任务完成
  • 重启Airflow服务。
  • 更新DAG表以取消暂停DAG。

答案 1 :(得分:2)

Airflow工作人员从SIGINT中优雅地退出。更新您的进程监视器以​​使用SIGINT而不是默认值退出。如果您正在使用systemctl,那么它将如下所示:

...
[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=...
KillSignal=SIGINT
Restart=on-failure
RestartSec=10s

...