我们想要达到的目标:
我们希望使用 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
但这似乎不是最优雅的解决方案。
有什么想法吗?你怎么处理?
最佳答案
Airflow 有两个 Kubernetes Executor以及 Kubernetes Operator .
您可以使用 Kubernetes Operator 通过您喜欢的任何 AirflowExecutor 将任务(以 Docker 镜像的形式)从 Airflow 发送到 Kubernetes。
不过,根据您的描述,我相信您正在寻找 KubernetesExecutor 来针对您的 Kubernetes 集群安排所有任务。正如您从源代码中看到的那样,它与 Kubernetes 的集成更加紧密。
这也将使您不必担心像 Kubernetes Operator 所要求的那样提前创建 docker 镜像。
关于kubernetes - 如何在 Kubernetes 集群上最好地运行 Apache Airflow 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50926418/