はじめに
- Airflow を単体の docker container で立ち上げる で作成した container image を GKE に deploy します
参考とする実装
- metabase-gke で GKE への deploy 実績があるのでこれを参考にする
Kubernetes の設定の examples
- https://github.com/kubernetes/examples
- 1.10 までは kubernetes 本体と同じレポジトリにあった https://github.com/kubernetes/kubernetes/tree/v1.10.13/examples
Deployment、Service、Ingress
- この辺の構成を理解していないと設定ファイルの書き方に迷う
Deployment
DeploymentはReplicaSetを生成・管理し、ReplicaSetはPodを生成・管理します。
ReplicaSet(ReplicationControllerの後継)はPodTemplateと呼ばれるPodのテンプレートをもとに、Podを指定された数(レプリカ数)に調整・管理を行う仕組みです。
- https://qiita.com/tkusumi/items/01cd18c59b742eebdc6a
- https://v1-10.docs.kubernetes.io/docs/concepts/workloads/controllers/deployment/
- https://cloud.google.com/kubernetes-engine/docs/concepts/deployment?hl=ja
Service
Pod,Nodeの存在を抽象化し、Podとの通信に単一のエンドポイントを提供するのがServiceの主な役割になります。
- https://qiita.com/kouares/items/94a073baed9dffe86ea0
- https://v1-10.docs.kubernetes.io/docs/concepts/services-networking/service/
- https://cloud.google.com/kubernetes-engine/docs/concepts/service?hl=ja
Ingress
ingressはHTTPSレイヤーのロードバランサーであり、
- IP管理などを個別のserviceではなくingressで管理できる
- Googleが推奨している
- https://qiita.com/Hirata-Masato/items/8e6b4536b6f1b23c5270
- https://v1-10.docs.kubernetes.io/docs/concepts/services-networking/ingress/
- https://cloud.google.com/kubernetes-engine/docs/concepts/ingress?hl=ja
Ingress の導入
ServiceType は未指定の場合 ClusterIP なので、これを NodePort に変更します。Ingress 側の ServiceName と ServicePort で Service の name と port を指定します
aiflow の場合 /admin/ がルートになるので readinessProbe で health check のパスを変更しておく
初回の証明書取得
- Let's Encrypt 側でエンドポイントを確認できるまでは証明書が取得できないので、一旦 http で証明書を取得してから https に移行する
Reverse Proxy (Ingress) 内での Airflow の設定
- 環境変数
AIRFLOW__WEBSERVER__ENABLE_PROXY_FIX
にTrue
を設定する