Déployer Airflow
Cette compétence couvre le déploiement de DAGs et de projets Airflow en production, soit en utilisant Astro (la plateforme gérée d'Astronomer), soit Airflow open-source sur Docker Compose ou Kubernetes.
Choisir un chemin : Astro convient bien aux opérations gérées et au CI/CD plus rapide. Pour l'open-source, utilisez Docker Compose pour le dev et le graphique Helm pour la production.
Astro (Astronomer)
Astro fournit des commandes CLI et une intégration GitHub pour déployer des projets Airflow.
Commandes de déploiement
| Commande | Ce qu'elle fait |
|---|---|
astro deploy |
Déploiement complet du projet — construit l'image Docker et déploie les DAGs |
astro deploy --dags |
Déploiement DAG uniquement — pousse seulement les fichiers DAG (rapide, sans construction d'image) |
astro deploy --image |
Déploiement image uniquement — pousse seulement l'image Docker (pour CI/CD multi-repo) |
astro deploy --dbt |
Déploiement du projet dbt — déploie un projet dbt pour s'exécuter aux côtés d'Airflow |
Déploiement complet du projet
Construit une image Docker à partir de votre projet Astro et déploie tout (DAGs, plugins, requirements, packages) :
astro deploy
Utilisez ceci quand vous avez modifié requirements.txt, Dockerfile, packages.txt, les plugins ou tout fichier hors DAG.
Déploiement DAG uniquement
Pousse seulement les fichiers du répertoire dags/ sans reconstruire l'image Docker :
astro deploy --dags
C'est beaucoup plus rapide qu'un déploiement complet puisque cela saute la construction d'image. Utilisez ceci quand vous avez seulement modifié des fichiers DAG et n'avez pas modifié les dépendances ou la configuration.
Déploiement image uniquement
Pousse seulement l'image Docker sans mettre à jour les DAGs :
astro deploy --image
C'est utile dans les configurations multi-repo où les DAGs sont déployés séparément de l'image, ou dans les pipelines CI/CD qui gèrent les déploiements d'image et de DAG indépendamment.
Déploiement du projet dbt
Déploie un projet dbt pour s'exécuter avec Cosmos sur un déploiement Astro :
astro deploy --dbt
Intégration GitHub
Astro prend en charge le mappage branche-vers-déploiement pour les déploiements automatisés :
- Mappez les branches à des déploiements spécifiques (p. ex.,
main-> production,develop-> staging) - Les poussées vers les branches mappées déclenchent des déploiements automatiques
- Prend en charge les déploiements DAG uniquement à la fusion pour une itération plus rapide
Configurez ceci dans l'interface Astro sous Deployment Settings > CI/CD.
Modèles CI/CD
Stratégies CI/CD courantes sur Astro :
- DAG uniquement sur les branches de feature : Utilisez
astro deploy --dagspour une itération rapide pendant le développement - Déploiement complet sur main : Utilisez
astro deploylors de la fusion vers main pour les versions de production - Pipelines d'image et de DAG séparés : Utilisez
--imageet--dagsdans des jobs CI séparés pour des cycles de release indépendants
File d'attente de déploiement
Quand plusieurs déploiements sont déclenchés en rapide succession, Astro les traite séquentiellement dans une file d'attente de déploiement. Chaque déploiement se termine avant que le suivant ne commence.
Référence
Open-Source : Docker Compose
Déployez Airflow en utilisant la configuration Docker Compose officielle. Ceci est recommandé pour l'apprentissage et l'exploration — pour la production, utilisez Kubernetes avec le graphique Helm (voir ci-dessous).
Prérequis
- Docker et Docker Compose v2.14.0+
- L'image Docker officielle
apache/airflow
Démarrage rapide
Téléchargez le fichier Docker Compose officiel Airflow 3 :
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml'
Ceci configure l'architecture complète d'Airflow 3 :
| Service | Objectif |
|---|---|
airflow-apiserver |
API REST et interface utilisateur (port 8080) |
airflow-scheduler |
Planifie les exécutions de DAG |
airflow-dag-processor |
Parse et traite les fichiers DAG |
airflow-worker |
Exécute les tâches (CeleryExecutor) |
airflow-triggerer |
Gère les tâches deferrable/async |
postgres |
Base de données de métadonnées |
redis |
Courtier de messages Celery |
Configuration minimale
Pour une configuration plus simple avec LocalExecutor (pas de Celery/Redis), créez un docker-compose.yaml :
x-airflow-common: &airflow-common
image: apache/airflow:3 # Utilisez la version Airflow 3.x la plus récente
environment: &airflow-common-env
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
AIRFLOW__CORE__DAGS_FOLDER: /opt/airflow/dags
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
depends_on:
postgres:
condition: service_healthy
services:
postgres:
image: postgres:16
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
volumes:
- postgres-db-volume:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "airflow"]
interval: 10s
retries: 5
start_period: 5s
airflow-init:
<<: *airflow-common
entrypoint: /bin/bash
command:
- -c
- |
airflow db migrate
airflow users create \
--username admin \
--firstname Admin \
--lastname User \
--role Admin \
--email admin@example.com \
--password admin
depends_on:
postgres:
condition: service_healthy
airflow-apiserver:
<<: *airflow-common
command: airflow api-server
ports:
- "8080:8080"
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
airflow-scheduler:
<<: *airflow-common
command: airflow scheduler
airflow-dag-processor:
<<: *airflow-common
command: airflow dag-processor
airflow-triggerer:
<<: *airflow-common
command: airflow triggerer
volumes:
postgres-db-volume:
Note sur l'architecture Airflow 3 : Le webserver a été remplacé par le serveur API (
airflow api-server), et le processeur DAG s'exécute maintenant en tant que processus autonome séparé du scheduler.
Opérations courantes
# Démarrer tous les services
docker compose up -d
# Arrêter tous les services
docker compose down
# Afficher les logs
docker compose logs -f airflow-scheduler
# Redémarrer après une modification des requirements
docker compose down && docker compose up -d --build
# Exécuter une commande CLI Airflow unique
docker compose exec airflow-apiserver airflow dags list
Installation de packages Python
Ajoutez les packages à requirements.txt et reconstruisez :
# Ajouter à requirements.txt, puis :
docker compose down
docker compose up -d --build
Ou utilisez un Dockerfile personnalisé :
FROM apache/airflow:3 # Épinglez à une version spécifique (p. ex., 3.1.7) pour la reproductibilité
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
Mettez à jour docker-compose.yaml pour construire à partir du Dockerfile :
x-airflow-common: &airflow-common
build:
context: .
dockerfile: Dockerfile
# ... reste de la config
Variables d'environnement
Configurez les paramètres Airflow via les variables d'environnement dans docker-compose.yaml :
environment:
# Paramètres principaux
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__CORE__PARALLELISM: 32
AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: 16
# E-mail
AIRFLOW__EMAIL__EMAIL_BACKEND: airflow.utils.email.send_email_smtp
AIRFLOW__SMTP__SMTP_HOST: smtp.example.com
# Connexions (en tant qu'URI)
AIRFLOW_CONN_MY_DB: postgresql://user:pass@host:5432/db
Open-Source : Kubernetes (Graphique Helm)
Déployez Airflow sur Kubernetes en utilisant le graphique Helm Apache Airflow officiel.
Prérequis
- Un cluster Kubernetes
kubectlconfiguréhelminstallé
Installation
# Ajouter le repo Helm Airflow
helm repo add apache-airflow https://airflow.apache.org
helm repo update
# Installer avec les valeurs par défaut
helm install airflow apache-airflow/airflow \
--namespace airflow \
--create-namespace
# Installer avec des valeurs personnalisées
helm install airflow apache-airflow/airflow \
--namespace airflow \
--create-namespace \
-f values.yaml
Configuration clé de values.yaml
# Type d'executor
executor: KubernetesExecutor # ou CeleryExecutor, LocalExecutor
# Image Airflow (épinglez à votre version souhaitée)
defaultAirflowRepository: apache/airflow
defaultAirflowTag: "3" # Ou épinglez : "3.1.7"
# Git-sync pour les DAGs (recommandé pour la production)
dags:
gitSync:
enabled: true
repo: https://github.com/your-org/your-dags.git
branch: main
subPath: dags
wait: 60 # secondes entre les syncs
# Serveur API (remplace le webserver dans Airflow 3)
apiServer:
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
replicas: 1
# Scheduler
scheduler:
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "1000m"
memory: "2Gi"
# Processeur DAG autonome
dagProcessor:
enabled: true
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
# Triggerer (pour les tâches deferrable)
triggerer:
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
# Ressources des workers (CeleryExecutor uniquement)
workers:
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2000m"
memory: "4Gi"
replicas: 2
# Persistance des logs
logs:
persistence:
enabled: true
size: 10Gi
# PostgreSQL (intégré)
postgresql:
enabled: true
# Ou utilisez une base de données externe
# postgresql:
# enabled: false
# data:
# metadataConnection:
# user: airflow
# pass: airflow
# host: your-rds-host.amazonaws.com
# port: 5432
# db: airflow
Mise à niveau
# Mettre à niveau avec les nouvelles valeurs
helm upgrade airflow apache-airflow/airflow \
--namespace airflow \
-f values.yaml
# Mettre à niveau vers une nouvelle version d'Airflow
helm upgrade airflow apache-airflow/airflow \
--namespace airflow \
--set defaultAirflowTag="<version>"
Stratégies de déploiement de DAG sur Kubernetes
- Git-sync (recommandé) : Les DAGs sont synchronisés à partir d'un référentiel Git automatiquement
- Volume persistant : Montez un PV partagé contenant les DAGs
- Intégré à l'image : Incluez les DAGs dans une image Docker personnalisée
Commandes utiles
# Vérifier l'état des pods
kubectl get pods -n airflow
# Afficher les logs du scheduler
kubectl logs -f deployment/airflow-scheduler -n airflow
# Port-forward du serveur API
kubectl port-forward svc/airflow-apiserver 8080:8080 -n airflow
# Exécuter une commande CLI unique
kubectl exec -it deployment/airflow-scheduler -n airflow -- airflow dags list
Compétences associées
- setting-up-astro-project : Pour initialiser un nouveau projet Astro
- managing-astro-local-env : Pour le développement local avec
astro dev - authoring-dags : Pour écrire des DAGs avant le déploiement
- testing-dags : Pour tester les DAGs avant le déploiement