Перейти к основному содержимому

Airflow

ETL-оркестратор платформы.

Назначение

Airflow — ETL-оркестратор платформы. Выполняет запланированные аналитические вычисления через Trino по конфигурациям, которые генерирует Configurator.

Компоненты Airflow:

  • Webserver — веб-интерфейс
  • Scheduler — планировщик DAG-ов
  • Worker(ы) — исполнители задач (Celery)
  • Configs Uploader — приём DAG-конфигов от Configurator и загрузка в S3

Деплой

Для установки необходимо заполнить файл с параметрами values-trisigma.yaml.

примечание

values.yaml содержит значения по умолчанию — не изменяйте его напрямую, а переопределяйте нужные параметры в отдельных файлах.

Параметры приложения

Хранятся в values-trisigma.yaml. Создайте файл из примера: cp values-trisigma.yaml.example values-trisigma.yaml.

Образы сервисов

ПараметрОписание
image.repositoryОбраз configs-uploader в Container registry
airflow.images.airflow.repositoryОбраз Airflow в Container registry
warning
Не используйте registry.trisigma.io напрямую

Образы необходимо предварительно зеркалировать в ваш собственный Container Registry.

PostgreSQL

Метадата-БД Airflow.

ПараметрОписание
airflow.data.metadataConnection.hostХостнейм для подключения к PostgreSQL

Valkey (Celery broker)

Подключение к брокеру задаётся одной строкой airflow.data.brokerUrl — она же содержит пароль и описана в разделе Секреты приложения.

Trino

ПараметрОписание
trinoHostХостнейм для подключения к Trino
trinoUserУчетная запись для подключения к Trino

Хранилище DAG-конфигов

ПараметрОписание
storage.configs.volumeNameИмя созданного PV для DAG-конфигов
storage.configs.storageClassNameИмя StorageClass для PVC
storage.configs.capacityРазмер PVC
global.storage.configs.existingClaimИмя существующего PVC, если он создаётся самостоятельно вне чарта
awsRegionРегион S3
awsEndpointUrlEndpoint S3 для подключения

Конфиги DAG хранятся в PersistentVolume (PV); связанный с ним PersistentVolumeClaim (PVC) монтируется в режиме ReadWriteMany в поды компонентов Airflow.

Способ 1 — указать созданный вами PV. Чарт сам создаст PVC и привяжет его к вашему PV:

storage:
configs:
storageClassName: <класс вашего PV>
capacity: <Запрос capacity PVC, не больше размера PV>
volumeName: <имя вашего PV>
Пример: создание PV на S3 через CSI-драйвер

Пример манифеста, создающего PV для хранения DAG конфигов в s3-бакете trisigma-airflow-configs, подключенном через S3 CSI driver

apiVersion: v1
kind: PersistentVolume
metadata:
name: trisigma-airflow-configs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: csi-s3
csi:
driver: ru.yandex.s3.csi
volumeHandle: trisigma-airflow-configs # имя S3-бакета
controllerPublishSecretRef:
name: csi-s3-secret
namespace: kube-system
nodePublishSecretRef:
name: csi-s3-secret
namespace: kube-system
nodeStageSecretRef:
name: csi-s3-secret
namespace: kube-system
volumeAttributes:
capacity: 10Gi
mounter: geesefs
options: "--memory-limit=1000 --dir-mode=0755 --file-mode=0644 --uid=1000 --gid=1000"

Затем укажите этот PV в values-trisigma.yaml по Способу 1: volumeName: trisigma-airflow-configs-pv, storageClassName: csi-s3, capacity: 10Gi.

Способ 2 — указать созданный вами PVC. Чарт не создаёт свой PVC, а использует ваш:

global:
storage:
configs:
existingClaim: <имя вашего PVC>

S3 — логи Airflow

ПараметрОписание
airflow.config.logging.remote_base_log_folderS3-путь к логам Airflow (бакет trisigma-airflow-logs)

Configurator

ПараметрОписание
configuratorUrlURL Configurator

Секреты приложения

Большая часть секретов передаётся напрямую через secrets-values.yaml. Для токена configs-uploader дополнительно поддерживается передача через существующий Kubernetes Secret (например, созданного через Vault или External Secrets Operator).

Создайте файл из примера: cp secrets-values.yaml.example secrets-values.yaml.

СекретКлючОписание
PGPASSWORDairflow.data.metadataConnection.passПароль PostgreSQL
BROKER_URLairflow.data.brokerUrlПолный URL Valkey с паролем
WEBSERVER_PASSWORDairflow.webserver.defaultUser.passwordПароль администратора веб-интерфейса1
CONFIGS_UPLOADER_API_TOKENconfigsUploader.apiTokenТокен загрузки DAG-конфигов от Configurator2
AWS_ACCESS_KEY_IDs3.accessKeyS3 access key для доступа к бакету trisigma-airflow-logs
AWS_SECRET_ACCESS_KEYs3.secretAccessKeyS3 secret key для доступа к бакету trisigma-airflow-logs
CONFIGURATOR_API_KEYanalytic.configuratorApiKeyAPI-ключ Configurator для запроса DAG-джоб из фабрики3
TRINO_PASSWORDanalytic.trinoPasswordПароль для подключения к Trino

Использование существующего Secret (existingSecret)

примечание

Через existingSecret можно передать только CONFIGS_UPLOADER_API_TOKEN. Остальные секреты передаются inline через secrets-values.yaml.

kubectl create namespace trisigma-airflow

kubectl create secret generic trisigma-airflow-configs-uploader \
--from-literal=CONFIGS_UPLOADER_API_TOKEN='...' \
-n trisigma-airflow
configsUploader:
existingSecret: trisigma-airflow-configs-uploader
secretKeys:
apiTokenKey: CONFIGS_UPLOADER_API_TOKEN

Если имя ключа в Secret отличается — например, config_copy_token вместо CONFIGS_UPLOADER_API_TOKEN — укажите соответствие через secretKeys:

configsUploader:
existingSecret: trisigma-airflow-configs-uploader
secretKeys:
apiTokenKey: config_copy_token
примечание

Использовать одновременно configsUploader.apiToken и configsUploader.existingSecret нельзя — способы несовместимы друг с другом.

Helm Install

cd trisigma-airflow

helm upgrade --install trisigma-airflow . \
--namespace trisigma-airflow --create-namespace \
-f values-trisigma.yaml \
-f secrets-values.yaml

Footnotes

  1. Соответствует секрету AIRFLOW_PASSWD (airflow.password) в Configurator — используется для логина в Airflow API.

  2. Соответствует секрету AIRFLOW_CONFIG_COPY_TOKEN (airflow.configCopyToken) в Configurator — Configurator использует его для пуша DAG-конфигов в configs-uploader.

  3. Соответствует секрету EXTERNAL_API_KEY (externalApiKey) в Configurator — DAG-фабрика использует его для запроса джоб через /api/GetDwhDatamartJob.