このページでは、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
を変更し、ウェブサーバー デプロイ構成を作成します。
apiVersion
、kind
、metadata
セクション(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
ラベルと名前で
airflow-scheduler
をairflow-webserver
で置き換えます。 注: ウェブサーバー コンテナ イメージは変更されません。同じイメージがワーカー、スケジューラ、ウェブサーバーで使用されます。status
セクションを削除します。元の
spec
セクションをインデントして、spec
がtemplate
セクションのキーになるようにします。- args:
セクションで- scheduler
を- webserver
で置き換えます。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
ウェブサーバーをデプロイする
ウェブサーバーの Pod をデプロイします。
kubectl create -n NAMESPACE -f airflow-webserver.yaml
ウェブサーバーの Service をデプロイします。
kubectl create -n NAMESPACE -f airflow-webserver-service.yaml
ウェブサーバーに接続する
デプロイでは ClusterIP
が使用されるため、プロキシを使用せずに Kubernetes クラスタの外部からウェブサーバーにアクセスすることはできません。
ウェブサーバーの Pod を探します。
kubectl get pods --all-namespaces
ウェブサーバーのポートをローカルマシンに転送します。
kubectl -n NAMESPACE port-forward airflow-webserver-1a2b3cd-0x9yz 8080:8080
ウェブブラウザで http://localhost:8080/admin/ にアクセスして Airflow ウェブサーバーを開きます。