Implementar un servidor web de Airflow con administración automática

En esta página, se describe cómo implementar el servidor web de Airflow en un clúster de Kubernetes del entorno de Cloud Composer. Utiliza esta guía si:

  • Necesitas controlar el lugar en que se implementa el servidor web de Airflow.
  • Tienes un DAG que se debe importar desde un conjunto coherente de direcciones IP, por ejemplo, para la autenticación con sistemas locales.

Antes de comenzar

Determina el clúster de GKE del entorno de Cloud Composer

Usa el comando gcloud composer environments describe para mostrar las propiedades de un entorno de Cloud Composer, incluido el clúster de GKE.

El clúster figura como gkeCluster. También toma nota de la zona donde se implementa el clúster, por ejemplo, us-central1-b. Para ello, mira la última parte de la propiedad location (config > nodeConfig > location).

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION 

Donde:

  • ENVIRONMENT_NAME es el nombre del entorno.
  • LOCATION es la región de Compute Engine donde se encuentra el entorno.

En este documento, nos referiremos al clúster como ${GKE_CLUSTER} y a la zona como ${GKE_LOCATION}.

Conéctate al clúster de GKE

Utiliza gcloud para conectar el comando kubectl con el clúster.

gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_LOCATION}

Obtén la configuración del pod para el programador

El servidor web de Airflow usa la misma imagen de Docker que el programador de Airflow. Por lo tanto, obtén la configuración del pod del programador para usarla como punto de partida.

kubectl get pods --all-namespaces

Busca un pod con un nombre como airflow-scheduler-1a2b3c-x0yz. Obtén la configuración del pod del programador y escríbela en airflow-webserver.yaml.

kubectl get pod -n NAMESPACE airflow-scheduler-1a2b3c-x0yz -o yaml --export > airflow-webserver.yaml

Donde NAMESPACE es el espacio de nombres en el que se ejecuta el pod del programador, como composer-1-7-2-airflow-1-9-0-4d5e6f.

Crea la configuración de implementación del servidor web

Modifica airflow-webserver.yaml en un editor de texto simple para crear una configuración de implementación de servidor web.

  1. Reemplaza las secciones apiVersion, kind y metadata (todo hasta spec) por una configuración de implementación.

    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. Reemplaza airflow-scheduler por airflow-webserver en las etiquetas y los nombres. Nota: La imagen del contenedor del servidor web no cambia. La misma imagen se utiliza para los trabajadores, el programador y el servidor web.

  3. Borra la sección status.

  4. Aplica sangría a la sección spec original, de tal forma que spec sea una clave para la sección template.

  5. Reemplaza - scheduler por - webserver en la sección - args:.

  6. Reemplaza la sección livenessProbe por una que sondee el extremo health.

            livenessProbe:
              exec:
                command:
                - curl
                - localhost:8080/_ah/health
    

Crea la configuración del servicio del servidor web

Crea un archivo de configuración de servicio llamado 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

Implementa el servidor web

  1. Implementa el pod del servidor web.

    kubectl create -n NAMESPACE -f airflow-webserver.yaml
    
  2. Implementa el servicio del servidor web.

    kubectl create -n NAMESPACE -f airflow-webserver-service.yaml
    

Conéctate al servidor web

Debido a que la implementación usa ClusterIP, no se puede acceder al servidor web desde fuera del clúster de Kubernetes sin usar un proxy.

  1. Busca el pod del servidor web.

    kubectl get pods --all-namespaces
    
  2. Reenvía el puerto del servidor web a tu máquina local.

    kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
    
  3. Abre el servidor web de Airflow en tu navegador web en http://localhost:8080/admin/.

Qué sigue