Selbst verwalteten Airflow-Webserver bereitstellen

Auf dieser Seite wird beschrieben, wie Sie den Airflow-Webserver im Kubernetes-Cluster einer Cloud Composer-Umgebung bereitstellen. Verwenden Sie diese Anleitung in folgenden Fällen:

  • Sie müssen steuern, wo der Airflow-Webserver bereitgestellt wird.
  • Ihr DAG muss aus einheitlichen IP-Adressen importiert werden, z. B. zur Authentifizierung auf lokalen Systemen.

Vorbereitung

  • Machen Sie sich damit vertraut, wie Sie Arbeitslasten in Google Kubernetes Engine bereitstellen.
  • Installieren Sie das Cloud SDK.
  • Erstellen Sie eine Cloud Composer-Umgebung.
  • Sie stellen den Airflow-Webserver auf einem Worker-Maschinentyp bereit, der weniger vCPUs als der Standardwebserver hat und für die Airflow-Worker freigegeben ist. Je nach Lastgröße müssen Sie möglicherweise die Anzahl der Worker-Knoten erhöhen.
  • Die automatische Cloud Composer-Speicherbereinigung kann ältere Images entfernen. Als Best Practice sollten Sie den Image-Pfad bzw. das Tag des Webservers mit dem Image synchronisieren, das vom Planer und den Workern ausgeführt wird, und zwar jedes Mal, wenn Sie ein Paket installieren oder Versionen aktualisieren. Rufen Sie dazu den Image-Namen aus der Planer-Pod-Konfiguration ab und verwenden Sie diesen Wert, um Ihren selbstverwalteten Webserver zu aktualisieren.

GKE-Cluster der Cloud Composer-Umgebung ermitteln

Verwenden Sie den Befehl gcloud composer environments describe, um die Attribute einer Cloud Composer-Umgebung einschließlich des GKE-Clusters abzurufen.

Der Cluster wird als gkeCluster aufgeführt. Beachten Sie auch die Zone, in der der Cluster bereitgestellt ist, z. B. us-central1-b. Diese können Sie dem letzten Teil des Attributs location entnehmen (config > nodeConfig > location).

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION 

Dabei gilt:

  • ENVIRONMENT_NAME ist der Name der Umgebung.
  • LOCATION ist die Compute Engine-Region, in der sich die Umgebung befindet.

Der Cluster wird ab jetzt als ${GKE_CLUSTER} und die Zone als ${GKE_LOCATION} bezeichnet.

Verbindung zum GKE-Cluster herstellen

Verwenden Sie gcloud, um den kubectl-Befehl mit dem Cluster zu verbinden.

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

Pod-Konfiguration für den Planer abrufen

Der Airflow-Webserver verwendet dasselbe Docker-Image wie der Airflow-Planer. Daher sollten Sie zuerst die Konfiguration des Planer-Pods abrufen.

kubectl get pods --all-namespaces

Suchen Sie nach einem Pod mit einem Namen wie airflow-scheduler-1a2b3c-x0yz. Rufen Sie die Konfiguration für den Planer-Pod ab und schreiben Sie sie in airflow-webserver.yaml.

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

Dabei ist NAMESPACE der Namespace, in dem der Planer-Pod ausgeführt wird, z. B. composer-1-7-2-airflow-1-9-0-4d5e6f.

Webserver-Deployment-Konfiguration erstellen

Ändern Sie airflow-webserver.yaml in einem Texteditor, um eine Webserver-Deployment-Konfiguration zu erstellen.

  1. Ersetzen Sie die Abschnitte apiVersion, kind und metadata (alles bis spec) durch eine Deployment-Konfiguration.

    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. Ersetzen Sie airflow-scheduler durch airflow-webserver in Labels und Namen. Hinweis: Das Container-Image des Webservers ändert sich nicht. Für Worker, den Planer und den Webserver wird dasselbe Image verwendet.

  3. Löschen Sie den Abschnitt status.

  4. Rücken Sie den ursprünglichen spec-Abschnitt so ein, dass spec ein Schlüssel für den Abschnitt template ist.

  5. Ersetzen Sie - scheduler durch - webserver im Abschnitt - args:.

  6. Ersetzen Sie den Abschnitt livenessProbe durch einen Abschnitt, der den Endpunkt "health" abfragt.

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

Webserver-Dienstkonfiguration erstellen

Erstellen Sie eine Dienstkonfigurationsdatei namens 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

Webserver bereitstellen

  1. Stellen Sie den Webserver-Pod bereit.

    kubectl create -n NAMESPACE -f airflow-webserver.yaml
    
  2. Stellen Sie den Webserverdienst bereit.

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

Verbindung zum Webserver herstellen

Da ClusterIP im Deployment verwendet wird, ist der Zugriff auf den Webserver von außerhalb des Kubernetes-Clusters ohne Verwendung eines Proxys nicht möglich.

  1. Suchen Sie den Webserver-Pod.

    kubectl get pods --all-namespaces
    
  2. Leiten Sie den Webserverport an Ihren lokalen Computer weiter.

    kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
    
  3. Öffnen Sie den Airflow-Webserver in Ihrem Webbrowser unter http://localhost:8080/admin/.

Nächste Schritte