部署自行管理的 Airflow 网络服务器

本页面介绍如何将 Airflow Web 服务器部署到 Cloud Composer 环境的 Kubernetes 集群。如果您符合以下描述,可使用本指南:

  • 需要控制将 Airflow Web 服务器部署到何处。
  • 有一个必须从一组一致的 IP 地址中导入的 DAG,例如为了使用本地系统进行身份验证。

准备工作

确定 Cloud Composer 环境的 GKE 集群

使用 gcloud composer environments describe 命令显示 Cloud Composer 环境的属性,包括 GKE 集群。

该集群列为 gkeCluster。 此外,请查看 location属性 (config > nodeConfig > location) 的最后一部分,记下部署该集群的地区,例如 us-central1-b

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION 

其中:

  • ENVIRONMENT_NAME 是环境的名称。
  • LOCATION 是环境所在的 Compute Engine 区域。

此文档现将集群引用为 ${GKE_CLUSTER},地区引用为 ${GKE_LOCATION}

连接到此 GKE 集群:

使用 gcloudkubectl 命令连接到此集群。

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

获取调度程序的 pod 配置

Airflow Web 服务器与 Airflow 调度程序使用同一 Docker 映像,因此请以调度程序 pod 的配置作为起点。

kubectl get pods --all-namespaces

查找名称类似于 airflow-scheduler-1a2b3c-x0yz 的 Pod。获取调度程序 pod 的配置,并将其写入 airflow-webserver.yaml

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

其中 NAMESPACE 是运行该调度程序 pod 的命名空间,例如 composer-1-7-2-airflow-1-9-0-4d5e6f

创建 Web 服务器部署配置

在文本编辑器中修改 airflow-webserver.yaml 以创建 Web 服务器部署配置。

  1. 使用一个部署配置替换 apiVersionkindmetadata 部分(每一项都根据 spec)。

    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. 将标签和名称中的 airflow-scheduler 替换为 airflow-webserver。 注意:Web 服务器容器映像不更改。用于工作器、调度程序和 Web 服务器的是同一映像。

  3. 删除 status 部分。

  4. 缩进原来的 spec 部分,使 spec 成为 template 部分的键。

  5. - args:部分中的 - scheduler 替换为 - webserver

  6. livenessProbe 部分替换为可轮询正常运行端点的部分。

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

创建 Web 服务器服务配置

创建名为 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

部署 Web 服务器

  1. 部署 Web 服务器 Pod。

    kubectl create -n NAMESPACE -f airflow-webserver.yaml
    
  2. 部署 Web 服务器服务。

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

连接到 Web 服务器

由于该部署使用 ClusterIP,因此若不使用代理便无法从 Kubernetes 集群外部访问此 Web 服务器。

  1. 找到 Web 服务器 Pod。

    kubectl get pods --all-namespaces
    
  2. 将 Web 服务器端口转发到您的本地机器。

    kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
    
  3. 在网络浏览器中打开此 Airflow Web 服务器,网址为 http://localhost:8080/admin/

后续步骤