我们希望实现的目标:
我们希望使用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
,但这似乎不是最优雅的解决方案。您有何想法?您如何处理这个问题?