AirFlow KubernetesExecutor: 3 способа запуска и 4 главных плюса для DevOps-инженера

Автор Категория , ,
AirFlow KubernetesExecutor: 3 способа запуска и 4 главных плюса для DevOps-инженера

Эффективное обучение AirFlow, также как курсы по Spark, Hadoop, Kafka и другим технологиям больших данных (Big Data) также включают нюансы интеграции этого фреймворка с другими средами. Например, вчера мы рассматривали преимущества DevOps-подхода к разработке Data Flow на примере взаимосвязи Apache Airflow с Kubernetes посредством специальных операторов. Продолжая эту тему, сегодня расскажем, что такое KubernetesExecutor: как он устроен и каким образом позволяет работать с Airflow.

Как запустить AirFlow-DAG в Kubernetes: 2 способа

Предположим, имеется batch-процесс обработки Big Data в виде цепочки задач (DAG, Directed Acyclic Graph) в Эйрфлоу. Задачи этой DAG-цепочки необходимо выполнить в среде Kubernetes (K8s), запустив соответствующий Docker-контейнер на доступном рабочем узле кластера Elasticsearch. Это можно сделать следующими способами [1]:

  • использовать KubernetesPodOperator, который выполняет конкретную задачу в модуле (pod) внешнего кластера Kubernetes. Это позволяет развертывать произвольные Docker-образы, снижая взаимные зависимости между контейнерами. Об этом мы немного рассказывали здесь.
  • с помощью KubernetesExecutor, создавая новый pod для каждого экземпляра задачи. В этом случае можно самостоятельно распределить ресурсы, загружая зависимости в Docker-контейнеры. Таким образом, Airflow кластер становится динамичным, не тратя ресурсы на не используемые узлы, в отличие от Celery Executor. Также этот вариант позволяет восстановить состояние кластера, повышая его отказоустойчивость. В этой статье мы рассмотрим подробнее именно данный способ работы с Airflow в K8s.

Напомним, модуль pod – это минимальная единица развертывания в Kubernetes. Этот объект инкапсулирует один или несколько контейнеров с приложениями, ресурсы хранения (общие тома), уникальный сетевой IP-адрес и параметры, определяющие порядок работы контейнеров. Как правило, Kubertenes Pod запускает один Docker-контейнер, соответствующий компоненту конкретного приложения. Таким образом, в связке Airflow и Kubernetes, K8s можно рассматривать как пул ресурсов, дающий простой, но мощный API для динамического запуска сложных развертываний [2].

Чем хорош KubernetesExecutor: 4 полезных факта для DevOps-инженера

Учитывая основное назначение K8s, можно сделать вывод, что KubernetesExecutor решает главную проблему Apache Airflow – динамическое распределение ресурсов. До появления Kubernetes Executor все предыдущие решения включали статические кластеры worker’ов. Поэтому разработчик Data Flow или DevOps-инженер должен был заранее определить, какой размер кластера ему необходим в соответствии с возможными рабочими нагрузками. Такая политика могла привести к чрезмерной или недостаточной подготовке кластера, к потере ресурсов или к снижению производительности. Кроме того, требовалась настройка всех зависимостей worker’ов Airflow, чтобы работать с разнообразными заданиями. В частности, для использования другого исполнителя Эйрфлоу, CeleryExecutors необходимо несколько дополнительных технологий (Celery, RabbitMQ, Redis, Flower и пр.), которые придется контролировать [2]. Подробнее о других исполнителях Эйрфлоу мы расскажем в новой статье.

Таким образом, KubernetesExecutor дает DevOps-инженер следующие преимущества работы с Apache Airflow [2]:

  • высокий уровень гибкости, когда кластер Airflow динамически масштабируется в зависимости от рабочей нагрузки, позволит избежать нехватки ресурсов или простаивающих узлов;
  • конфигурация подов на уровне задач – поскольку KubernetesExecutor создает новый под для каждого экземпляра задачи, можно точно указать необходимые для конкретного модуля ресурсы (процессор, память и Docker-образ c нужными зависимостями);
  • отказоустойчивость, благодаря изоляции задачи в отдельном pod, в случае сбоя она не приведет к выходу из строя целого worker’а Airflow. А при отказе планировщика версионирование ресурсов (функция «resourceVersion») в Kubernetes, позволит быстро вернуться в рабочее состояние.
  • упрощенное развертывание, когда можно указать все параметры в одном файле YAML, а зависимости выгружаются в Docker-контейнеры.
Airflow, Kubernetes, Big Data
KubernetesExecutor – один из самых эффективных способов работы с Airflow в K8s

Как запустить KubernetesExecutor в Эйрфлоу

Поскольку по умолчанию Airflow использует только одну папку с файлами DAG, возникает вопрос, как распределить их в кластере K8s. KubernetesExecutor позволяет сделать это 3-мя способами [2]:

  • использовать режим Git-init, клонируя Git с Docker-контейнером при инициализации каждого пода;
  • работать в постоянном режиме, смонтировав том с DAG-файлами;
  • предварительно подготовить Docker-образ с DAG-файлами (режим «pre-bake»).

Обычно режимы Git-init и «pre-bake» рекомендуются для разработки и небольших кластеров Эйрфлоу, например, с менее 1000 заданий. Это обусловлено отсутствием распределенных файловых систем в указанных случаях. В свою очередь, режим постоянного тома рекомендуется для больших папок со множеством DAG-файлов [2].

Еще больше практических деталей по работе с Airflow в Kubernetes и не только, вы узнаете на наших образовательных курсах в лицензированном учебном центре обучения и повышения квалификации руководителей и ИТ-специалистов (менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data) в Москве:

 

Источники

  1. https://myht.ru/question/48414332-integraciya-kubernetes-s-apache-airflow
  2. https://marclamberti.com/blog/airflow-kubernetes-executor/