部署新任务的过程

Pau*_*icz 5 airflow

我需要一些有关如何在部署时重新启动所有气流服务而又不致于在执行过程中杀死工人的建议。

我已经为DAG编写了一个部署过程,该过程在virtualenv中安装了气流和任何其他pip依赖项。准备好发布目录后,我:

  1. 停止气流开花,气流工作人员,气流调度程序和气流网络服务器
  2. 更新“当前” simlink以指向我的新版本
  3. 启动气流花,气流工人,气流计划程序和气流网络服务器

此部署过程的问题是工人立即被杀死。我想在脚本中添加某种监视,以暂停所有DAG,等待工作人员空闲,然后重新启动服务,但是气流CLI无法得知启用了哪些dag以及工作人员是否空闲的方式。

我知道许多气流服务可以自动检测dags文件夹中的更改,但是我希望每个部署都具有自己的virtualenv。如果我不重新启动所有服务,则新部署将不会在我的requirements.txt文件中使用新行。

kvb*_*kvb 5

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

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


Pau*_*icz 2

Airflow 工作人员从 SIGINT 中优雅地退出。更新进程监视器以​​使用 SIGINT 而不是默认值退出。如果您使用 systemctl,那么它将看起来像这样:

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

...
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并不是原始问题的答案。对于使用 Systemd 单元文件优雅地关闭 Airflow Worker 来说,这是一个很好的答案。 (3认同)