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 |
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 |
awsEndpointUrl | Endpoint 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_folder | S3-путь к логам Airflow (бакет trisigma-airflow-logs) |
Configurator
| Параметр | Описание |
|---|---|
configuratorUrl | URL Configurator |
Секреты приложения
Большая часть секретов передаётся напрямую через secrets-values.yaml.
Для токена configs-uploader дополнительно поддерживается передача через существующий Kubernetes Secret
(например, созданного через Vault или External Secrets Operator).
Создайте файл из примера: cp secrets-values.yaml.example secrets-values.yaml.
| Секрет | Ключ | Описание |
|---|---|---|
PGPASSWORD | airflow.data.metadataConnection.pass | Пароль PostgreSQL |
BROKER_URL | airflow.data.brokerUrl | Полный URL Valkey с паролем |
WEBSERVER_PASSWORD | airflow.webserver.defaultUser.password | Пароль администратора веб-интерфейса1 |
CONFIGS_UPLOADER_API_TOKEN | configsUploader.apiToken | Токен загрузки DAG-конфигов от Configurator2 |
AWS_ACCESS_KEY_ID | s3.accessKey | S3 access key для доступа к бакету trisigma-airflow-logs |
AWS_SECRET_ACCESS_KEY | s3.secretAccessKey | S3 secret key для доступа к бакету trisigma-airflow-logs |
CONFIGURATOR_API_KEY | analytic.configuratorApiKey | API-ключ Configurator для запроса DAG-джоб из фабрики3 |
TRINO_PASSWORD | analytic.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