为新的 dags 部署程序

Deploy procedure for new dags

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

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

  1. 停止 airflow-flower、airflow-worker、airflow-scheduler 和 airflow-webserver
  2. 更新 "current" simlink 以指向我的新版本
  3. 启动 airflow-flower、airflow-worker、airflow-scheduler 和 airflow-webserver

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

我知道许多 airflow 服务可以自动检测 dags 文件夹中的更改,但我希望每个部署都有自己的 virtualenv。如果我不重新启动所有服务,那么新部署将不会在我的 requirements.txt 文件中选择一个新行。

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

  • 更新 DAG table 以暂停所有 DAG
  • 读取TASK_INSTANCEtable等待所有运行状态任务完成
  • 重新启动 Airflow 服务。
  • 更新 DAG table 以取消暂停 DAG。

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

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

...