Вступ
Apache Airflow — потужна платформа для оркестрації робочих процесів, яка широко використовується в галузях обробки даних та аналітики. Запуск Airflow на Kubernetes забезпечує масштабованість та гнучкість для керування розподіленими навантаженнями, а Helm спрощує процес розгортання. Синхронізація DAG безпосередньо з репозиторію GitHub гарантує контроль версій і безперебійне співробітництво між членами команди.
У цьому посібнику ми розглянемо, як розгорнути Apache Airflow на Kubernetes за допомогою Minikube та Helm. Також ми продемонструємо, як налаштувати Airflow для синхронізації DAG з репозиторієм GitHub.
Цей посібник припускає, що у вас вже встановлені та налаштовані Helm, Minikube та Docker.
Ось версії, з якими ми працюватимемо:
- Docker: Docker версія 27.4.1, збірка b9d17ea
- Minikube: minikube версія: v1.34.0
- Helm: версія: v3.16.2
- Airflow Helm Chart: 2.9.3
Тож давайте розпочнемо!
Крок 1: Запуск Kubernetes кластера
Для початку ми запустимо наш Kubernetes кластер за допомогою Minikube. Це створить локальне середовище Kubernetes для розгортання Apache Airflow.
Запустіть наступну команду для старту кластера:
minikube start
Крок 2: Створення простору імен для Airflow
Простори імен (Namespaces) у Kubernetes дозволяють ефективно організовувати та керувати ресурсами. Для ізоляції ресурсів Apache Airflow ми створимо окремий простір імен.
Запустіть наступну команду:
kubectl create namespace airflow
Крок 3: Додавання репозиторію Helm з Apache Airflow
Далі нам потрібно додати офіційний репозиторій Helm з Apache Airflow. Цей репозиторій містить чарти, необхідні для розгортання Apache Airflow на Kubernetes.
helm repo add apache-airflow https://airflow.apache.org
Після додавання репозиторію оновіть Helm, щоб отримати останню інформацію про чарт:
helm repo update
helm repo list
Вивід повинен включати репозиторій apache-airflow:
Тепер, коли репозиторій додано, ми готові до розгортання Apache Airflow.
Крок 4: Встановлення Apache Airflow за допомогою Helm
Тепер, коли ми додали репозиторій Helm з Apache Airflow, можемо використовувати Helm для розгортання Airflow в нашому Kubernetes кластері.
Запустіть наступну команду для встановлення Apache Airflow:
helm install airflow apache-airflow/airflow --namespace airflow --debug --timeout 10m01s
Цей процес може зайняти деякий час залежно від швидкості та стабільності вашого інтернет-з’єднання.
helm ls -n airflow
Тут ми бачимо, що версія Airflow: 2.9.3
kubectl get pod -n airflow
Тепер, коли всі контейнери Airflow працюють коректно, ми відкриємо файл values.yaml
для налаштування розгортання Airflow.
Крок 5: Створення секрету для синхронізації з GitHub та кодування облікових даних
Перед тим, як вносити зміни до файлу values.yaml
, потрібно створити Kubernetes Secret для зберігання облікових даних GitHub, які будуть використовуватись для синхронізації DAG з вашого репозиторію GitHub.
Спочатку потрібно створити GitHub Personal Access Token (PAT).
Якщо ви ще цього не зробили, ви можете створити токен, виконавши наступні кроки:
- Перейдіть на сторінку GitHub Personal Access Tokens.
- Натисніть Generate new token.
- Виберіть необхідні області доступу, наприклад,
repo
для доступу до репозиторіїв. - Натисніть Generate token і скопіюйте токен (переконайтеся, що зберегли його безпечно, оскільки він більше не буде видно).
Як тільки у вас з'являться ім’я користувача GitHub та персональний токен доступу (PAT), ви можете закодувати їх у форматі base64.
Запустіть наступні команди для кодування ваших облікових даних:
- Для імені користувача GitHub:
echo -n "your_github_username" | base64
- Замініть
your_github_username
на ваше справжнє ім’я користувача GitHub. Вивід буде містити закодовану у base64 версію вашого імені користувача. - Для персонального токена доступу GitHub (PAT):
echo -n "your_github_pat" | base64
- Замініть
your_github_pat
на фактичний токен, який ви згенерували. Вивід буде містити закодовану у base64 версію вашого токена.
Далі створіть файл з назвою secret.yaml
з наступним вмістом:
apiVersion: v1
kind: Secret
metadata:
name: git-credentials
data:
GIT_SYNC_USERNAME:
GIT_SYNC_PASSWORD:
GITSYNC_USERNAME:
GITSYNC_PASSWORD:
Замість вставте ваш закодований у base64 GitHub username, а замість
— закодований токен GitHub Personal Access Token (PAT).
Причина, чому ми включаємо як GIT_SYNC_USERNAME
, так і GITSYNC_USERNAME
(так само як GIT_SYNC_PASSWORD
та GITSYNC_PASSWORD
), полягає в сумісності з новішими версіями git-sync
. Деякі версії, наприклад, git-sync v3
, вимагають GIT_SYNC_USERNAME
та GIT_SYNC_PASSWORD
, в той час як новіші версії, як-от git-sync v4
, вимагають GITSYNC_USERNAME
та GITSYNC_PASSWORD
. Щоб забезпечити сумісність між версіями, ми вирішили включити обидва набори облікових даних.
Нарешті, застосуйте секрет до вашого Kubernetes кластера, виконавши наступну команду:
kubectl apply -f secret.yaml --namespace airflow
Тепер давайте отримаємо конфігураційний файл values.yaml
, який надається чартом Apache Airflow. Цей файл містить всі налаштування за замовчуванням для розгортання Airflow.
helm show values apache-airflow/airflow > values.yaml
Тепер ми будемо модифікувати деякі частини файлу values.yaml
.
Спочатку відкрийте файл values.yaml
у текстовому редакторі. Далі знайдіть розділ, що стосується конфігурації GitSync. Вам потрібно змінити кілька ключових налаштувань:
- Встановіть параметр
enabled
наtrue
, щоб увімкнути GitSync. - В полі
repo
замініть шаблон на HTTPS-URL вашого репозиторію GitHub (наприклад:https://github.com/yourusername/yourrepo.git
). - В полі
branch
вкажіть гілку, в якій знаходяться ваші DAG (наприклад:main
абоmaster
). - Залиште поле
subPath
порожнім (""
), оскільки ваші DAG не зберігаються в підкаталозі репозиторію.
Додатково, раскоментуйте рядок credentialsSecret
та встановіть його значення в git-credentials
, що посилається на створений раніше секрет для зберігання облікових даних для аутентифікації GitHub.
Після внесення цих змін ваша конфігурація для GitSync повинна виглядати так:
Далі нам потрібно зробити веб-інтерфейс Airflow доступним поза межами Kubernetes кластера. Для цього відкрийте файл values.yaml
і знайдіть налаштування Airflow Webserver. У розділі сервісу змініть type
з ClusterIP
на NodePort
. Це дозволить зробити вебсервер Airflow доступним через зовнішню мережу.
Тепер встановіть параметр targetPort
на 8080
, оскільки це стандартний порт для вебсервера Airflow, і вкажіть nodePort
(наприклад, 31151
), який буде використовуватись для доступу до веб-інтерфейсу ззовні Kubernetes кластера.
Ми вносимо ці зміни, оскільки встановлення типу сервісу на NodePort
дозволяє зовнішній доступ до вебсервера Airflow, а targetPort
гарантує, що вебсервіс працює на правильному внутрішньому порті (8080
). Параметр nodePort
дає змогу отримати доступ до веб-інтерфейсу через конкретний порт на вузлі Kubernetes (у цьому випадку, 31151
). Після внесення цих змін, веб-інтерфейс Airflow буде доступний за адресою http://<minikube-ip>:31151
.
Крок 10: Застосування конфігурації та запуск Airflow
Як тільки ви оновите файл values.yaml
необхідними змінами, прийшов час застосувати нову конфігурацію до вашого розгортання Airflow.
Запустіть наступну команду Helm для оновлення або встановлення Airflow з вашою кастомною конфігурацією:
helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml --debug --timeout 10m02s
Цей процес може зайняти деякий час, залежно від швидкості та стабільності вашого інтернет-з'єднання.
Тепер нам потрібно отримати IP-адресу Minikube (або IP-адресу кластера):
minikube ip
Це поверне IP-адресу вашого Minikube кластера. Наприклад, у моєму випадку URL буде:
http://192.168.49.2
Тепер, коли інсталяція завершена і ваші Airflow поди працюють, ви можете отримати доступ до веб-інтерфейсу Airflow, відкривши браузер і набравши наступну адресу:
http://192.168.49.2:31151
Стандартні облікові дані для входу:
- Ім’я користувача:
admin
- Пароль:
admin
Після входу ви зможете моніторити та керувати вашими Airflow робочими процесами безпосередньо з веб-інтерфейсу.
Нарешті, ви можете запустити ваш DAG:
Висновок 🚀
У цьому епізоді ми пройшли кроки для розгортання Airflow на Kubernetes за допомогою Minikube, налаштували GitSync для синхронізації ваших DAG з GitHub, та відкрили веб-інтерфейс Airflow через NodePort. Ми також дізналися, як налаштувати Airflow за допомогою кастомного файлу values.yaml
і як отримати доступ до веб-інтерфейсу за допомогою стандартних облікових даних. 🔧🌐
У наступному епізоді ми розглянемо, як використовувати SSH ключі 🔑 замість секретів для підключення до GitHub і як налаштувати кастомний образ Airflow 🖼️ для ваших специфічних потреб. Потім ми побачимо, як використовувати цей кастомний образ в Helm чартах. ⚙️
Не пропустіть наступні туторіали! 🎉
Перекладено з: Deploying Apache Airflow on Kubernetes with Helm and Minikube, Syncing DAGs from GitHub