如何在Kubernetes集群上最佳运行Apache Airflow任务?

15

我们希望实现的目标:

我们希望使用Airflow来管理我们的机器学习和数据管道,同时使用Kubernetes来管理资源和调度作业。我们想要实现的是让Airflow编排工作流程(例如各种任务的依赖关系,失败后重新运行任务),让Kubernetes编排基础架构(例如集群自动缩放和分配单个作业到节点上)。换句话说,Airflow会告诉Kubernetes集群要做什么,而Kubernetes则决定如何分配工作。同时,我们还希望Airflow能够监控各个任务的状态。例如,如果我们有10个任务分布在5个节点的集群中,Airflow应该能够与集群通信并报告这样的情况:3个“小任务”已完成,1个“小任务”失败并将被重新安排运行,其余的6个“大任务”正在运行。

问题:

我们了解到Airflow没有Kubernetes-Operator,可以在https://issues.apache.org/jira/browse/AIRFLOW-1314查看相关问题。也就是说,我们不希望Airflow管理资源,例如管理服务帐户、环境变量、创建群集等等,而只是将任务发送到现有的Kubernetes集群,并让Airflow知道何时完成作业。另一个选择是使用Apache Mesos,但与Kubernetes相比,它似乎不够灵活和简单明了。
我想我们可以使用Airflow的bash_operator运行kubectl,但这似乎不是最优雅的解决方案。
您有何想法?您如何处理这个问题?

你的进展有更多更新了吗?:\ - jtlz2
1个回答

8
Airflow有Kubernetes ExecutorKubernetes Operator两种方式。您可以使用Kubernetes Operator将任务(以Docker镜像的形式)从Airflow发送到Kubernetes,通过任何您喜欢的AirflowExecutor。根据您的描述,我认为您正在寻找KubernetesExecutor来对接您的Kubernetes集群调度所有任务。正如您从源代码中所看到的那样,它与Kubernetes的集成更加紧密。这也将使您不必担心提前创建Docker镜像,这是使用Kubernetes Operator所要求的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接