kubernetes - 如何在 Kubernetes 集群上最好地运行 Apache Airflow 任务?

标签 kubernetes airflow job-scheduling

我们想要达到的目标:

我们希望使用 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/

相关文章:

amazon-web-services - ibmcloud ks cluster get --cluster CLUSTER_NAME 的 kubectl 等效项是什么?

python - Airflow:使用新计划从头开始重新运行 DAG

python - 执行 Python 脚本时 Airflow SSHOperator 命令超时

java - 如何使用TaskScheduler对象取消所有计划任务?

hadoop - 处理从 Facebook 导入的大量数据

kubernetes - Kubeadm和在主节点上调度Pod的风险(Pod始终处于等待状态)

kubernetes - 通过队列动态创建带有 kubernetes 的 pod

Kubernetes 容器环境

google-cloud-platform - 在apache airflow中安装Scrapy会导致INVALID_ARGUMENT

mpi - 扭矩+mpirun+资源分配