Создать кластер Apache Airflow™
Кластер Apache Airflow™ создается ресурсом AirflowCluster в пространстве имен проекта. Перед созданием кластера администратор установки должен включить Managed Service for Apache Airflow™.
База метаданных создается автоматически. Настраивать подключение к базе не требуется.
Перед началом
Подготовьте:
- включенный компонент Managed Service for Apache Airflow™ и доступный каталог версий — это проверяет администратор установки;
- пространство имен проекта;
- Git-репозиторий с DAG-файлами или S3-совместимое хранилище;
- S3-совместимое хранилище, если нужны удаленные логи задач;
- Secret с учетными данными, если используется внешнее S3-хранилище. Для приватного Git-репозитория консоль управления создает Secret из введенных данных; при создании через CLI подготовьте Secret самостоятельно.
Создайте Secret и ConfigMap, на которые ссылается конфигурация, в том же пространстве имен, что и AirflowCluster.
Для автоматически создаваемых бакетов должен быть включен компонент Object Storage.
Права доступа
Доступ к консоли Stackland и доступ к веб-интерфейсу Apache Airflow™ настраиваются отдельно. Участие в проекте дает возможность видеть проект; для работы с его ресурсами администратор проекта должен назначить роль с нужными разрешениями.
При подготовке роли учитывайте следующие операции:
|
Сценарий |
Разрешения Kubernetes |
|
Просмотр списка и карточки кластера |
|
|
Создание, изменение и удаление кластера |
Соответственно |
|
Выбор версии Apache Airflow™ |
|
|
Выбор существующих Secret и ConfigMap |
Чтение соответствующих ресурсов в пространстве имен. Для списков в форме нужно |
|
Создание Secret и ConfigMap из введенных данных |
Создание и чтение ресурсов, |
|
Просмотр пароля администратора Apache Airflow™ |
|
Для выбора бакетов и AccessKey также нужен доступ к соответствующим ресурсам хранилища. Разрешения на запись DAG-файлов в Git или S3 выдаются отдельно от прав на управление кластером. Если форма сообщает об отказе в доступе, передайте администратору имя проекта, пространство имен, выполняемую операцию и текст ошибки.
Веб-интерфейс Apache Airflow™ использует собственную учетную запись. Получите ее данные по инструкции; назначение роли в проекте само по себе не создает пользователя Apache Airflow™.
Через консоль управления
-
В консоли управления Stackland выберите проект и пространство имен.
-
В левом меню выберите Кластеры Airflow. Если пункт скрыт, раскройте Ещё. Нажмите Создать кластер.
-
В разделе Основные настройки укажите:
- Имя кластера — уникальное имя в выбранном пространстве имен.
- Версия Airflow — версию из доступного списка.
- Защита от удаления — включите, чтобы предотвратить случайное удаление кластера. По умолчанию выключена.
- Публичный доступ — оставьте включенным, чтобы открывать веб-интерфейс по HTTPS. При выключенном доступе потребуется перенаправление порта.
-
В разделе DAG выберите Источник и настройте Git-репозиторий или S3-хранилище.
-
При необходимости в разделе Компоненты задайте количество реплик и ресурсы планировщика, API-сервера, обработчика триггеров и обработчика DAG.
Оставьте поля пустыми, чтобы использовать значения по умолчанию. Если задаете ресурсы компонента, заполните CPU и память в обеих группах: Запросы и Лимиты. Например, запрос CPU —
500m, памяти —1Gi, лимит CPU —1, памяти —2Gi. Запрос не должен превышать лимит. Количество реплик должно быть не меньше1. -
Чтобы сохранять логи после пересоздания подов, в разделе Логи задач включите Хранить логи удалённо и настройте хранилище так же, как для DAG в S3. Для DAG и логов используйте разные бакеты или разные пути внутри бакета.
-
Если DAG требуют дополнительных библиотек, заполните раздел Дополнительные зависимости по инструкции. При необходимости добавьте параметры airflow.cfg.
-
Нажмите Создать. Откройте созданный кластер и дождитесь состояния
Ready.Если создание не завершается, откройте вкладку Состояния и проверьте причины неготовности. Рекомендации приведены в разделе Устранение неполадок.
Git-репозиторий
В поле Источник выберите Git-репозиторий и заполните раздел Git-источник DAG:
- Адрес репозитория — HTTPS- или SSH-адрес, например
https://git.example.com/team/airflow-dags.gitилиgit@git.example.com:team/airflow-dags.git. - Git ref — ветку, тег или коммит, например
main. - Путь к DAG — каталог внутри репозитория, например
dags. Для корня репозитория оставьте поле пустым.
Для приватного HTTPS-репозитория в разделе Доступ к репозиторию включите Использовать аутентификацию и укажите Имя пользователя и Пароль. Вместо пароля можно использовать токен доступа, если это поддерживает ваш Git-сервис.
Для SSH включите Использовать аутентификацию, загрузите Приватный SSH-ключ и Файл known_hosts с ключом сервера. Получите проверенный файл known_hosts у администратора Git-сервиса.
Консоль создаст необходимые Secret и ConfigMap. Не включайте учетные данные в адрес репозитория.
S3-хранилище
В поле Источник выберите S3-хранилище. В разделе S3-источник DAG задайте Тип хранилища:
Для Object Storage в Stackland выберите Stackland Storage:
- Способ настройки бакета — Создать автоматически или Выбрать существующий. Во втором случае укажите Существующий бакет из выбранного пространства имен.
- Способ настройки AccessKey — Создать автоматически или Выбрать существующий. Во втором случае укажите Существующий AccessKey. Его права должны разрешать доступ к бакету.
- Путь в bucket — префикс объектов с DAG-файлами, например
dags/. Не добавляйте/в начале пути. Пустое поле означает корень бакета.
При автоматической настройке оператор создаст бакет и ресурсы доступа. Имена созданных ресурсов появятся в карточке кластера.
Для внешнего S3-совместимого хранилища выберите Внешний S3:
- Имя бакета — имя существующего бакета.
- Secret с credentials — Secret с ключами доступа в том же пространстве имен. До заполнения формы создайте его через CLI или попросите администратора подготовить этот ресурс: в форме выбирается уже существующий Secret.
- Ключ с Access Key ID и Ключ с Secret Access Key — имена записей в Secret, например
access-key-idиsecret-access-key. - Endpoint URL, Регион и Использовать path-style addressing — настройки подключения вашего S3-сервиса.
- Путь в bucket — префикс DAG-файлов, например
dags/, или пустое поле для корня бакета.
Если эндпоинт использует собственный центр сертификации, в поле Custom CA выберите Загрузить сертификат и загрузите CA-сертификат в формате PEM либо выберите Существующий ресурс и укажите Secret или ConfigMap и ключ сертификата.
Для удаленного хранения логов эти же поля доступны в разделе Логи задач после включения Хранить логи удалённо. Ключ доступа должен разрешать запись логов и их чтение.
Через CLI
Проверьте доступные версии Apache Airflow™:
kubectl get airflowimagecatalog airflow \
-o jsonpath='{range .spec.images[*]}{.version}{"\n"}{end}'
Если команда не выводит версии, посмотрите структуру ресурса: kubectl get airflowimagecatalog airflow -o yaml.
-
Создайте файл ресурса
AirflowCluster, напримерairflow-cluster.yaml, и вставьте одну из конфигураций:Git и локальные логиObject Storage для DAG и логовПример использует публичный Git-репозиторий и локальные логи задач.
apiVersion: airflow.stackland.yandex.cloud/v1alpha1 kind: AirflowCluster metadata: name: airflow-demo spec: version: "3.1.8" dags: source: git git: repo: https://github.com/example/airflow-dags.git ref: main publicAccess: true deletionProtection: trueПример создает отдельные бакеты для DAG-файлов и логов задач. DAG-файлы загружаются из префикса
dags/в бакете.apiVersion: airflow.stackland.yandex.cloud/v1alpha1 kind: AirflowCluster metadata: name: airflow-demo spec: version: "3.1.8" dags: source: s3 s3: type: stackland-storage stacklandStorage: subPath: dags/ taskLogs: type: stackland-storage stacklandStorage: subPath: logs/ publicAccess: true deletionProtection: true -
Укажите имя кластера в
metadata.nameи доступную версию вspec.version. Для Git-источника замените URL репозитория и значениеrefна свои.В обоих примерах включены публичный доступ к веб-интерфейсу (
spec.publicAccess: true) и защита от удаления (spec.deletionProtection: true). При необходимости измените эти параметры. -
Примените манифест:
kubectl apply -f airflow-cluster.yaml -n <пространство_имен>Пространство имен также можно указать в
metadata.namespaceманифеста и не передавать параметр-nв команде. -
Дождитесь состояния
Ready, подставив имя кластера изmetadata.name:kubectl get airflowcluster <имя_кластера> \ -n <пространство_имен> \ -w -
Если кластер долго остается в
Provisioningили переходит вFailed, проверьте условия состояния вstatus.conditions:kubectl describe airflowcluster <имя_кластера> -n <пространство_имен>Рекомендации приведены в разделе Устранение неполадок.
Приватный Git-репозиторий
Для HTTPS создайте Secret с фиксированными ключами username и password:
kubectl create secret generic airflow-git-auth \
-n <пространство_имен> \
--from-literal=username=<имя_пользователя> \
--from-literal=password=<токен_или_пароль>
Добавьте ссылку в spec.dags.git.authSecretRef манифеста:
spec:
dags:
source: git
git:
repo: https://git.example.com/team/airflow-dags.git
ref: main
authSecretRef:
name: airflow-git-auth
Для SSH Secret должен содержать ключ ssh-privatekey, а ConfigMap — ключ known_hosts:
spec:
dags:
source: git
git:
repo: git@git.example.com:team/airflow-dags.git
ref: main
authSecretRef:
name: airflow-git-ssh
knownHostsConfigMapRef:
name: airflow-git-known-hosts
Интервал синхронизации Git и S3 составляет 60 секунд и не настраивается.
Внешнее S3-хранилище
Создайте Secret с ключами доступа:
kubectl create secret generic airflow-s3-credentials \
-n <пространство_имен> \
--from-literal=access-key-id=<идентификатор_ключа> \
--from-literal=secret-access-key=<секретный_ключ>
Для DAG-файлов задайте в spec:
spec:
dags:
source: s3
s3:
type: s3
s3:
bucket: airflow-dags
region: ru-central1
endpointUrl: https://storage.yandexcloud.net
credentialsSecretRef:
name: airflow-s3-credentials
accessKeyIdPath: access-key-id
secretAccessKeyPath: secret-access-key
subPath: dags/
Для удаленных логов задайте в spec поле taskLogs:
spec:
taskLogs:
type: s3
s3:
bucket: airflow-logs
region: ru-central1
endpointUrl: https://storage.yandexcloud.net
credentialsSecretRef:
name: airflow-s3-credentials
accessKeyIdPath: access-key-id
secretAccessKeyPath: secret-access-key
subPath: logs/
Дальнейшие действия
- Получите учетные данные администратора.
- Откройте веб-интерфейс Apache Airflow™.
- Загрузите DAG-файлы и запустите DAG.
- Измените настройки кластера, если требуется настроить ресурсы или зависимости.