是否可以根据不同的配置(例如CPU分配、RAM分配、用于创建容器的Docker镜像等)指定多种类型的worker pod(Kubernetes pod)?然后指定给定的 DAG 或任务应在哪个工作 Pod 上运行?
我是气流新手,并且拥有基于微服务的项目的工作经验。我正在评估我们是否可以使用气流来替换我们即将推出的项目之一的事件驱动的微服务架构。
是的,通过使用气流“队列”和“池”概念是可能的。
使用以下命令创建一个工作节点“pod1”:
airflow celery worker
当我们不指定任何队列名称时,这个特定的气流工作容器将执行“默认”队列中的任务。
您可以使用此命令指定工作 Pod 应侦听的队列
airflow celery worker -q new_queue
使用上述命令创建一个新的 pod“pod2”。这个特定的 pod“pod2”将仅执行“new_queue”中的任务。
从气流 UI -> 管理 -> 池 -> 创建池创建一个池“new_pool”。 现在您可以在创建任务时指定池和队列,如下所示:
task1 = SomeOperator(
param1=param1,
param2=param2,
)
task2 = SomeOperator(
param1=param1,
param2=param2,
pool = "new_pool",
queue = "new_queue"
)
调度以上2个任务时,task1会进入default队列,task2会进入new_queue。
因此 pod1 将拾取任务 1,而 pod2 将拾取任务 2。
同样,您可以创建自己数量的队列和工作单元。
由于上述2个worker pod是kubernetes中的不同实体,您可以为每个worker pod分配特定的配置,如内存、cpu、docker镜像等。
基本上就 kubernetes 而言,您将拥有不同的 airflow-worker.yaml 文件,用于您需要的不同工作配置,例如:
default-queue-worker.yaml
在其中分配自己的docker镜像,cpu,内存等并将入口点命令设置为
airflow celery worker
new-queue-worker.yaml
再次分配它自己的配置,这里的入口点将是
airflow celery worker -q new_queue