セルフマネージド Airflow ウェブサーバーのデプロイ

このページでは、Airflow ウェブサーバーを Cloud Composer 環境の Kubernetes クラスタにデプロイする方法を説明します。このガイドは、次の場合に使用します。

  • Airflow ウェブサーバーがデプロイされる場所を制御する必要がある。
  • オンプレミス システムによる認証用など、一貫した IP アドレスのセットからインポートする必要のある DAG がある。

始める前に

  • Google Kubernetes Engine にワークロードをデプロイする方法を理解します。
  • Cloud SDK をインストールします。
  • Cloud Composer 環境を作成します。
  • Airflow ウェブサーバーをワーカーのマシンタイプにデプロイします。これは、デフォルトのウェブサーバーよりも vCPU の数が少なく、Airflow ワーカーと共有されています。負荷の大きさに応じて、ワーカーノードの数を増やす必要があります。
  • Cloud Composer のガベージ コレクションで古いイメージを削除できます。パッケージをインストールする、またはバージョンをアップグレードするたびに、ウェブサーバーのイメージパス / タグをスケジューラとワーカーにより実行されているイメージと同期することをおすすめします。これを行うには、スケジューラ Pod 構成からイメージ名を取得し、その値を使用して、自己管理しているウェブサーバーを更新します。

Cloud Composer 環境の GKE クラスタを特定する

gcloud composer environments describe コマンドを使用して、GKE クラスタを含む Cloud Composer 環境のプロパティを表示します。

クラスタは gkeCluster としてリストされます。 また、クラスタがデプロイされているゾーン(us-central1-b など)も、location プロパティ(config > nodeConfig > location)の最後の部分を確認して記録します。

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION 

ここで

  • ENVIRONMENT_NAME は、環境の名前です。
  • LOCATION は、環境が配置される Compute Engine のリージョンです。

このドキュメントではクラスタを ${GKE_CLUSTER}、ゾーンを ${GKE_LOCATION} としています。

GKE クラスタに接続する

gcloud を使用して、kubectl コマンドをクラスタに接続します。

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

スケジューラの Pod 構成を取得する

Airflow ウェブサーバーは 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 など)。

ウェブサーバー デプロイ構成の作成

書式なしテキスト エディタで airflow-webserver.yaml を変更し、ウェブサーバー デプロイ構成を作成します。

  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-schedulerairflow-webserver で置き換えます。 注: ウェブサーバー コンテナ イメージは変更されません。同じイメージがワーカー、スケジューラ、ウェブサーバーで使用されます。

  3. status セクションを削除します。

  4. 元の spec セクションをインデントして、spectemplate セクションのキーになるようにします。

  5. - args: セクションで - scheduler- webserver で置き換えます。

  6. livenessProbe セクションを、health エンドポイントをポーリングするセクションに置き換えます。

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

ウェブサーバー Service 構成の作成

airflow-webserver-service.yaml という名前の Service 構成ファイルを作成します。

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

ウェブサーバーをデプロイする

  1. ウェブサーバーの Pod をデプロイします。

    kubectl create -n NAMESPACE -f airflow-webserver.yaml
    
  2. ウェブサーバーの Service をデプロイします。

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

ウェブサーバーに接続する

デプロイでは ClusterIP が使用されるため、プロキシを使用せずに Kubernetes クラスタの外部からウェブサーバーにアクセスすることはできません。

  1. ウェブサーバーの Pod を探します。

    kubectl get pods --all-namespaces
    
  2. ウェブサーバーのポートをローカルマシンに転送します。

    kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
    
  3. ウェブブラウザで http://localhost:8080/admin/ にアクセスして Airflow ウェブサーバーを開きます。

次のステップ