Как лучше всего выполнять задачи Apache Airflow в кластере Kubernetes?
Чего мы хотим достичь:
Мы хотели бы использовать Airflow для управления нашим машинным обучением и конвейером данных, а Kubernetes - для управления ресурсами и планирования заданий. Мы хотели бы добиться того, чтобы Airflow управлял рабочим процессом (например, различные зависимости задач. Повторное выполнение заданий при сбоях), а Kubernetes управлял инфраструктурой (например, автоматическое масштабирование кластера и назначение отдельных заданий узлам). Другими словами, Airflow сообщит кластеру Kubernetes, что делать, и Kubernetes решит, как распределить работу. В то же время мы хотели бы, чтобы Airflow мог отслеживать состояние отдельных задач. Например, если у нас есть 10 задач, распределенных по кластеру из 5 узлов, Airflow должен иметь возможность обмениваться данными с кластером, и отчеты показывают что-то вроде: 3 "маленьких задачи" выполнено, 1 "маленькая задача" не выполнена и будет запланировано выполнить перезапустите, а остальные 6 "больших задач" все еще работают.
Вопросы:
Мы понимаем, что у Airflow нет оператора Kubernetes, см. Открытые вопросы по адресу https://issues.apache.org/jira/browse/AIRFLOW-1314. При этом мы не хотим, чтобы Airflow управлял ресурсами, такими как управление учетными записями служб, переменными env, созданием кластеров и т. Д., А просто отправлял задачи в существующий кластер Kubernetes и сообщал Airflow, когда работа выполнена. Альтернативой может быть использование Apache Mesos, но он выглядит менее гибким и менее простым по сравнению с Kubernetes.
Я думаю, мы могли бы использовать bash_operator Airflow для запуска kubectl
но это не самое элегантное решение.
Какие-нибудь мысли? Как ты с этим справляешься?
1 ответ
В Airflow есть как исполнитель Kubernetes, так и оператор Kubernetes.
Вы можете использовать Kubernetes Operator для отправки задач (в виде образов Docker) из Airflow в Kubernetes через любой AirflowExecutor, который вы предпочитаете.
Тем не менее, основываясь на вашем описании, я полагаю, что вы ищете Kubernetes Executor для планирования всех ваших задач в вашем кластере Kubernetes. Как видно из исходного кода, он гораздо теснее интегрирован с Kubernetes.
Это также позволит вам не беспокоиться о создании образов докера заранее, как того требует оператор Kubernetes.