Déployer un serveur Web Airflow autogéré

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 --export > airflow-webserver.yaml

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.

  1. Remplacez les sections apiVersion, kind et metadata (tout ce qui précède spec) par une configuration de déploiement.

    apiVersion: extensions/v1beta1
    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
    
  2. Remplacez airflow-scheduler par airflow-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.

  3. Supprimez la section status.

  4. Mettez en retrait la section spec d'origine de sorte que spec soit une clé pour la section template.

  5. Remplacez - scheduler par - webserver dans la section - args:.

  6. 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

  1. Déployez le pod du serveur Web.

    kubectl create -n NAMESPACE -f airflow-webserver.yaml
    
  2. 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.

  1. Recherchez le pod du serveur Web.

    kubectl get pods --all-namespaces
    
  2. Transférez le port du serveur Web vers votre ordinateur local.

    kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
    
  3. Accédez au serveur Web d'Airflow dans votre navigateur Web à l'adresse http://localhost:8080/admin/.

Étape suivante