Что такое AirFlow Kubernetes Operator и как это работает: обзор решений от K8s и Google

Big Data, Большие данные, архитектура, обработка данных, AirFlow, DevOps, Kubernetes, Docker

Вчера мы рассказали, почему запускать Airflow на Kubernetes – это эффективно и выгодно для всех участников batch-процессов с большими данными (Big Data): разработчиков Data Flow, Data Scientist’ов, аналитиков и инженеров. Сегодня рассмотрим, что такое Airflow Kubernetes Operator и чем он отличается от подобной разработки компании Google.

Как работает AirFlow Kubernetes Operator от K8s и чем он хорош

Начнем с уточнения понятия оператора Эйрфлоу. По сути, оператор определяет задачу. В частности, при создании DAG для отправки задания (job) в Apache Spark или определения собственной функции на языке Python, пользователь Эйрфлоу будет использовать оператор, например, «SparkSubmitOperator» или «PythonOperator» соответственно. По умолчанию фреймворк включает набор встроенных операторов для Apache Spark, Hive, BigQuery и Amazon EMR. Также этот batch-фреймворк позволяет DevOps-инженерам разрабатывать свои собственные операторы и коннекторы с помощью REST-API и специальных плагинов [1].

Тем не менее, уже готовый Airflow Kubernetes Operator предоставляет пользователям следующие преимущества [1]:

  • Простота развертывания – теперь разработчику нет необходимости создавать новый плагин при генерации нового оператора. Любая задача Эйрфлоу, которая может быть запущена в контейнере Docker, доступна через уже существующий оператор без дополнительного кода.
  • Гибкость конфигурирования и настройки зависимостей – пользовательские образы Docker гарантируют идемпотентность среды исполнения задач, конфигурации и всех зависимостей. Это значит, что при повторном применении операции к любому объекту результат будет тем же, что и при первом. Поэтому управление зависимости становится значительно проще. Например, если необходимо выполнить одну задачу с использованием SciPy, а другую – на базе NumPy, разработчик Data Flow теперь не придется сохранять обе зависимости во всех worker’ах Airflow или переносить задачу на внешнюю узел.
  • Информационная безопасностьAirFlow Kubernetes Operator позволяет использовать средства обеспечения cybersecurity от K8s. В частности, пользователи Эйрфлоу могут применять технологию Kubernetes Vault для хранения всех конфиденциальных данных, чтобы изолировать любые ключи API, пароли и учетные данные для входа в систему. Благодаря этому worker’ы Airflow не будут иметь доступа к такой информации, а могут лишь запросить, чтобы участки data pipeline’ов работали только с теми данными, которые действительно необходимы и достаточны.

Схематично AirFlow Kubernetes Operator работает по следующему принципу [1]:

  1. Для генерации запроса, который обрабатывает API-server, используется Python-клиент Kubernetes.
  2. Kubernetes запускает пользовательский модуль (pod) с любыми заданными характеристиками.
  3. Всего одна команда потребуется для загрузки образов со всеми необходимыми переменными среды, секретными данными и зависимостями. После запуска задания оператору необходимо только следить за исправностью журналов отслеживания (логами). Таким образом, у пользователя Эйрфлоу будет возможность собирать журналы локально для планировщика или другой распределенной службы ведения журналов, развернутой в кластере Kubernetes.
AirFlow Kubernetes Operator
AirFlow Kubernetes Operator от K8s

Оператор Эйрфлоу для Кубернетес от Google Cloud Platform

Немного по-другому устроен оператор Эйрфлоу для Kubernetes от корпорации Google. Прежде всего, отметим, что данное решение компания не поддерживает официально, а лишь публикует его альфа-версии на GitHub [2]. При этом оператор определяется как контроллер приложения, который расширяет API Kubernetes для создания, настройки и управления приложениями с отслеживанием состояния, инкапсулируя область действия приложения и ежедневные операции. API оператора реализуется через расширение существующего API Kubernetes определениями пользовательских ресурсов (CRD, Custom Resources Definitions), которые декларативно описывают намерение. Эти ресурсы сериализуются как json и хранятся на сервере API. Наблюдая за CRD, контроллер выполняет управляющие действия для перевода системы в желаемое состояние. Благодаря этому платформа K8s пригодна для сложных приложений с сохранением состоянием (stateful).

Таким образом, оператор K8s – это совокупность API K8s с CRD (декларативная спецификация) и пользовательским контроллером. Все это необходимо, чтобы эффективно использовать Кубернетес для развертывания Эйрфлоу [3].

С учетом вышеизложенного, Airflow Operator — это пользовательский оператор Kubernetes, состоящий из 2-х частей: контроллеры AirflowBase (общие компоненты) и AirflowCluster (для индивидуального пользователя). Это разделение обеспечивает изоляцию, позволяя каждому пользователю этого фреймворка работать со своими уникальными плагинами, операторами и пакетами [3]:

  • AirflowBase включает в себя MySQL, UI, NFS (DagStore);
  • AirflowCluster включает scheduler и worker’ы Airflow, а также Redis – резидентная (размещаемая в памяти) NoSQL-СУБД типа «ключ-значение» (key-value store).

Таким образом, решение от Google Cloud Platform упрощает развертывание и управление Apache Airflow в K8s [2]:

  • создает необходимые ресурсы Кубернетес для развертывания Эйрфлоу и управляет ими;
  • обновляет соответствующие ресурсы K8s при изменении спецификации AirflowBase или AirflowCluster;
  • восстанавливает управляемые ресурсы Kubernetes, которые были удалены;
  • поддерживает создание планировщиков Эйрфлоу с различными исполнителями (executor’ами);
  • реализует совместное использование контроллеров AirflowBase между несколькими AirflowClusters.
Airflow, Kubernetes, DevOps, Google Cloud Platform
Airflow Operator для Kubernetes от Google Cloud Platform

Несмотря на готовую архитектуру предоставляемого решения от Google, анализ документации на GitHub показывает, что многие идеи еще находятся в стадии разработки (todo) [3]. Тем не менее, его можно принять за основe при реализации собственного оператора Кубернетес для Airflow или другого Big Data фреймворка. В следующей статье мы рассмотрим еще 2 способа использования Эйрфлоу с K8s: с помощью KubernetesPodOperator и KubernetesExecutor [4].

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

Источники

  1. https://kubernetes.io/blog/2018/06/28/airflow-on-kubernetes-part-1-a-different-kind-of-operator/
  2. https://github.com/GoogleCloudPlatform/airflow-operator
  3. https://github.com/GoogleCloudPlatform/airflow-operator/blob/master/docs/design.md
  4. https://myht.ru/question/48414332-integraciya-kubernetes-s-apache-airflow