【问题标题】:Integration of Kubernetes with Apache AirflowKubernetes 与 Apache Airflow 的集成
【发布时间】:2018-07-03 00:25:01
【问题描述】:

我们正在构建工作流调度应用程序。我们发现 Airflow 是工作流管理器的一个不错的选择,而 Kubernetes 是集群管理器的一个不错的选择。因此,流量将是,

  1. 我们会将工作流 DAG 提交给 Airflow。
  2. Airflow 应通过指定 docker 映像将给定 DAG 的任务提交给 Kubernetes。
  3. Kubernetes 应该通过在集群的可用 EC2 工作节点上运行 docker 容器来执行任务。

在搜索中,我们发现 Airflow 有用于与 ECS、Mesos 集成但不用于 Kubernetes 的 Operator。但是,我们在Airflow wiki 上发现了对 Kubernetes Operator 的请求,但没有任何进一步的更新。

那么,简单来说问题就是,如何将 Airflow 与 Kubernetes 集成?

【问题讨论】:

  • 我看到的方式是使用 BashOperator 并调用您的 .sh 脚本来利用您的 kubectl
  • @Chengzhi 是的。这是我们想到的解决方法之一。但是,我相信,在这种情况下,我们可能还必须处理其他责任,例如。使用 Kubernetes API 等从容器中提取日志。相反,我正在寻找更清洁或更好的方法,可能由 Kubernetes 或 Airflow 本身提供,因此,我们将专注于我们的域,而不是在我们的代码中添加或处理第 3 方的复杂性。

标签: kubernetes airflow airflow-scheduler google-kubernetes-engine


【解决方案1】:

这正在飞行中。你可以关注this major jira ticket

其中一个更稳定的分支(工作由该团队的很多人领导)位于bloomberg fork on github in the airflow-kubernetes-executor branch,尽管它正在从不断移动的气流主机中重新定位。

我的 fork 上有一个分支,它解决了许多短期问题并且运行良好,称为 frankensteins-monster。尽管它现在对我有用,但使用它需要您自担风险。我正在使用位于scripts/ci/kubernetes/dockerbuild.sh 脚本构建一个docker 映像。

祝你好运!

【讨论】:

    【解决方案2】:

    在 Kubernetes 中使用 Apache Airflow 有两种方式:
    通过 KubernetesPodOperator 使用 Operator:

    • 它在 Kubernetes 集群位于外部的 Kubernetes Pod 中执行特定任务
    • 它允许您部署任意 Docker 映像
    • 您基本上可以将依赖项卸载到容器(这很棒!)

    或者通过使用 KubernetesExecutor:

    • 每个任务实例都有一个新的 POD
    • 您可以自定义您的任务(资源分配)
    • 与 POD 执行器一样,您可以将依赖项卸载到容器中
    • 让您的 Airflow 集群动态化!不再有空闲节点像 Celery Executor 那样浪费资源。
    • 您的 Airflow 集群变得容错(状态恢复)
    • 等等

    为了快速进行实验,您可以按照我刚刚在此处制作的教程进行操作: https://marclamberti.com/blog/airflow-kubernetes-executor/

    希望对你有帮助:)
    干杯

    【讨论】:

    • KubernetesExecutor能否在k8s集群上调度一个BashOperator任务(例如)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2012-07-07
    相关资源
    最近更新 更多