Cette page explique comment déployer le serveur Web Airflow sur le cluster Kubernetes d'un environnement Cloud Composer. Utilisez ce guide si :
- vous devez contrôler l'emplacement de déploiement du serveur Web Airflow ;
- vous disposez d'un DAG qui doit être importé à partir d'un ensemble cohérent d'adresses IP, par exemple pour l'authentification avec des systèmes sur site.
Avant de commencer
- Consultez la section Déployer une charge de travail sur Google Kubernetes Engine.
- Installez le SDK Cloud.
- Créez un environnement Cloud Composer.
- Vous allez déployer le serveur Web Airflow sur une machine de type nœud de calcul, qui contient moins de processeurs virtuels que le serveur Web par défaut et qui est partagé avec les nœuds de calcul Airflow. En fonction de la charge, vous devrez peut-être augmenter le nombre de nœuds de calcul.
- La fonction de récupération de mémoire de Cloud Composer peut supprimer les images les plus anciennes. Il est recommandé de synchroniser le tag ou le chemin d'accès à l'image du serveur Web avec l'image exécutée par le programmeur et les nœuds de calcul, chaque fois que vous installez un package ou que vous effectuez une mise à niveau. Pour ce faire, récupérez le nom de l'image à partir de la configuration de pod du programmeur et utilisez cette valeur pour mettre à jour le serveur Web autogéré.
Déterminer le cluster GKE de l'environnement Cloud Composer
Utilisez la commande gcloud composer environments describe
pour afficher les propriétés d'un environnement Cloud Composer, y compris le cluster GKE.
Le cluster est répertorié en tant que gkeCluster
.
Prenez également note de la zone dans laquelle le cluster est déployé, par exemple us-central1-b
, en examinant la dernière partie de la propriété location
(config
> nodeConfig
> location
).
gcloud composer environments describe ENVIRONMENT_NAME \ --location LOCATION
où :
ENVIRONMENT_NAME
est le nom de l'environnement.LOCATION
est la région Compute Engine dans laquelle se trouve l'environnement.
Ce document utilise désormais ${GKE_CLUSTER}
pour faire référence au cluster et ${GKE_LOCATION}
pour faire référence à la zone.
Se connecter au cluster GKE
Utilisez gcloud
pour associer la commande kubectl
au cluster.
gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_LOCATION}
Obtenir la configuration du pod pour le programmeur
Le serveur Web Airflow utilise la même image Docker que le programmeur Airflow. Par conséquent, vous devez d'abord obtenir la configuration de pod du programmeur à utiliser.
kubectl get pods --all-namespaces
Recherchez un pod portant un nom tel que airflow-scheduler-1a2b3c-x0yz
. Obtenez la configuration de pod du programmeur et écrivez-la dans le fichier airflow-webserver.yaml
.
kubectl get pod -n NAMESPACE airflow-scheduler-1a2b3c-x0yz -o yaml > airflow-webserver.yaml
Où NAMESPACE
correspond à l'espace de noms dans lequel s'exécute le pod du programmeur, par exemple composer-1-7-2-airflow-1-9-0-4d5e6f
.
Créer la configuration de déploiement du serveur Web
Pour créer une configuration de déploiement du serveur Web, modifiez airflow-webserver.yaml
dans un éditeur de texte brut.
Remplacez les sections
apiVersion
,kind
etmetadata
par la configuration de déploiement suivante. Ne supprimez pas la sectionspec
d'origine. Vous l'utiliserez plus tard.apiVersion: apps/v1 kind: Deployment metadata: name: airflow-webserver labels: run: airflow-webserver spec: replicas: 1 selector: matchLabels: run: airflow-webserver strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: run: airflow-webserver
Remplacez
airflow-scheduler
parairflow-webserver
dans les libellés et les noms. Remarque : L'image du conteneur du serveur Web ne change pas. La même image est utilisée pour les nœud de calcul, le programmeur et le serveur Web.Supprimez la section
status
et toutes les sections imbriquées dans celle-ci.Mettez en retrait la section
spec
d'origine de sorte quespec
soit une clé pour la sectiontemplate
.Remplacez
- scheduler
par- webserver
dans la section- args:
.Remplacez la section
livenessProbe
par une section qui sonde le point de terminaison "health".livenessProbe: exec: command: - curl - localhost:8080/_ah/health
Créer la configuration de service du serveur Web
Créez un fichier de configuration de service appelé airflow-webserver-service.yaml
.
apiVersion: v1 kind: Service metadata: name: airflow-webserver-service labels: run: airflow-webserver spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: run: airflow-webserver sessionAffinity: None type: ClusterIP
Déployer le serveur Web
Déployez le pod du serveur Web.
kubectl create -n NAMESPACE -f airflow-webserver.yaml
Déployez le service du serveur Web.
kubectl create -n NAMESPACE -f airflow-webserver-service.yaml
Se connecter au serveur Web
Étant donné que le déploiement utilise ClusterIP
, il n'est pas possible d'accéder au serveur Web depuis l'extérieur du cluster Kubernetes sans proxy.
Recherchez le pod du serveur Web.
kubectl get pods --all-namespaces
Transférez le port du serveur Web vers votre ordinateur local.
kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
Accédez au serveur Web d'Airflow dans votre navigateur Web à l'adresse http://localhost:8080/admin/.