Como implantar um servidor da Web do Airflow autogerenciado

Esta página mostra como implantar o servidor da Web do Airflow em um cluster Kubernetes de um ambiente do Cloud Composer. Use este guia para:

  • Exigir controle sobre o local onde o servidor da Web do Airflow está implantado.
  • Ter um DAG que precise ser importado de um conjunto consistente de endereços IP, como para autenticação com sistemas locais.

Antes de começar

  • Familiarize-se com o guia Como implantar uma carga de trabalho no Google Kubernetes Engine.
  • Instale o SDK do Cloud.
  • Crie um ambiente do Cloud Composer..
  • Você implantará o servidor da Web do Airflow em um tipo de máquina worker, que tem menos vCPUs do que o servidor da Web padrão e é compartilhado com os workers do Airflow. Dependendo do tamanho do carregamento, talvez seja necessário aumentar o número de nós de trabalho.
  • A coleta de lixo do Cloud Composer pode remover imagens antigas. Como prática recomendada, sempre que você instalar um pacote ou versões de upgrade, sincronize o caminho/tag da imagem do servidor da Web com a imagem que o programador e os workers estão executando. Para fazer isso, recupere o nome da imagem da configuração do pod do programador e use esse valor para atualizar seu servidor da Web autogerenciado.

Determinar o cluster do GKE do ambiente do Cloud Composer

Use o comando gcloud composer environments describe para mostrar as propriedades de um ambiente do Cloud Composer, incluindo o cluster do GKE.

O cluster está listado como gkeCluster. Anote também a zona em que o cluster está implantado, por exemplo, us-central1-b, observando a última parte da propriedade location (config > nodeConfig > location).

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION 

onde:

  • ENVIRONMENT_NAME é o nome do ambiente;
  • LOCATION é a região do Compute Engine em que o ambiente está localizado.

Este documento agora se refere ao cluster como ${GKE_CLUSTER} e à zona como ${GKE_LOCATION}.

Conecte-se ao cluster do GKE

Use gcloud para conectar o comando kubectl ao cluster.

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

Acessar a configuração do pod para o programador

O servidor da Web do Airflow usa a mesma imagem do Docker que o programador do Airflow. Portanto, acesse a configuração do pod do programador para usá-la como ponto de partida.

kubectl get pods --all-namespaces

Procure um pod com um nome como airflow-scheduler-1a2b3c-x0yz. Acesse a configuração do pod do programador e grave-a em airflow-webserver.yaml.

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

em que NAMESPACE é o namespace no qual o pod do programador é executado, como composer-1-7-2-airflow-1-9-0-4d5e6f.

Criar a configuração de implantação do servidor da Web

Modifique airflow-webserver.yaml em um editor de texto simples para criar uma configuração de implantação do servidor da Web.

  1. Substitua as seções apiVersion, kind e metadata (tudo até spec) por uma configuração de implantação.

    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. Substitua airflow-scheduler por airflow-webserver em rótulos e nomes. Observação: a imagem do contêiner do servidor da Web não é alterada. A mesma imagem é usada para workers, o programador e o servidor da Web.

  3. Exclua a seção status.

  4. Recue a seção spec original para que spec seja uma chave da seção template.

  5. Substitua - scheduler por - webserver na seção - args:.

  6. Substitua a seção livenessProbe por uma que pesquise o endpoint íntegro.

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

Crie a configuração do serviço do servidor da Web

Crie um arquivo de configuração do serviço chamado 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

Implante o servidor da Web

  1. Implante o pod do servidor da Web.

    kubectl create -n NAMESPACE -f airflow-webserver.yaml
    
  2. Implante o serviço do servidor da Web.

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

Conecte-se ao servidor da Web

O servidor da Web não pode ser acessado de fora do cluster do Kubernetes sem usar um proxy Porque a implantação usa ClusterIP.

  1. Encontre o pod do servidor da Web.

    kubectl get pods --all-namespaces
    
  2. Encaminhe a porta do servidor da Web para a máquina local.

    kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
    
  3. Abra o servidor da Web do Airflow no navegador da Web em http://localhost:8080/admin/.

A seguir