一、部署要求
Apache Airflow 已通过以下测试:
注意: MySQL 5.x 版本不能或有运行多个调度程序的限制——请参阅调度程序文档。MariaDB 未经过测试/推荐。
注意: SQLite 用于 Airflow 测试。不要在生产中使用它。我们建议使用最新的 SQLite 稳定版本进行本地开发。
PS:本文部署 Airflow 稳定版 2.1.4,Kubernetes使用1.20.x版本,PostgreSQL使用12.x,使用Helm Charts部署。
二、生成Helm Charts配置
PS:使用 helm 3 版本部署
# 创建kubernetes airflow 命名空间
$ kubectl create namespace airflow
# 添加 airflow charts 仓库源
$ helm repo add apache-airflow https://airflow.apache.org
# 更新 aiarflow 源
$ helm repo update
# 查看 airflow charts 所有版本(这里选择部署charts 1.2.0,也就是airflow 2.1.4)
$ helm search repo apache-airflow/airflow -l
NAME CHART VERSION APP VERSION DESCRIPTION
apache-airflow/airflow 1.3.0 2.2.1 The official Helm chart to deploy Apache Airflo...
apache-airflow/airflow 1.2.0 2.1.4 The official Helm chart to deploy Apache Airflo...
apache-airflow/airflow 1.1.0 2.1.2 The official Helm chart to deploy Apache Airflo...
apache-airflow/airflow 1.0.0 2.0.2 Helm chart to deploy Apache Airflow, a platform...
# 导出 airflow charts values.yaml 文件
$ helm show values apache-airflow/airflow --version 1.2.0 > airflow_1.2.4_values.yaml
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
三、修改airflow配置
3.1 配置持续存储 StorageClass
PS: 使用阿里云NAS极速存储
# 编辑 StorageClass 文件
$ vim alicloud-nas-airflow-test.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas-airflow-test
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: subpath
server: "xxxxx.cn-beijing.extreme.nas.aliyuncs.com:/share/airflow/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 应用到K8S中
$ kubectl apply -f alicloud-nas-airflow-test.yaml
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
3.2 配置 airflow Dags 存储仓库 gitSshKey
# 编辑 airflow-ssh-secret.yaml 文件,首先需要把shh公钥添加到git项目仓库中
$ vim airflow-ssh-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: airflow-ssh-secret
namespace: airflow
data:
# key needs to be gitSshKey
gitSshKey: "ssh私钥,base64"
# 应用到K8S中
$ kubectl apply -f airflow-ssh-secret.yaml
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
3.3 Docker 部署 PostgreSQL 12
# 创建 postgresql 存储目录
$ mkdir /data/postgresql_data
# 创建启动文件
$ vim docker-compose.yaml
version: "3"
services:
airflow-postgres:
image: postgres:12
restart: always
container_name: airflow-postgres
environment:
TZ: Asia/Shanghai
POSTGRES_USER: airflow
POSTGRES_PASSWORD: Airflow123
volumes:
- /data/postgresql_data:/var/lib/postgresql/data
ports:
- "5432:5432"
# 启动 postgresql docker
$ docker-compose up -d
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
3.4 修改 airflow_1.2.4_values.yaml 配置
PS:本文 airflow_1.2.4_values.yaml 配置文件需要三个pvc,服务分别是 redis、worker(只部署1个worker,可以部署多个worker)、dags
因配置文件太长,不具体贴出,具体内容请参考下面链接:
https://github.com/yangpeng14/DevOps/blob/master/config_dir/airflow_1.2.4_values.yaml
四、部署 Airfolw
# 第一次部署 Airflow
$ helm install airflow apache-airflow/airflow --namespace airflow --version 1.2.0 -f airflow_1.2.4_values.yaml
# 以后如果要修改airflow配置,请使用下面命令
$ helm upgrade --install airflow apache-airflow/airflow --namespace airflow --version 1.2.0 -f airflow_1.2.4_values.yaml
- 1.
- 2.
- 3.
- 4.
- 5.
五、配置 Airflow Ingress Nginx 访问入口
# 生成 ingress nginx 配置文件
$ vim airflow-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: airflow
namespace: airflow
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "60"
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
nginx.ingress.kubernetes.io/proxy-send-timeout: "60"
spec:
rules:
- host: "airflow.example.com"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: airflow-webserver
port:
number: 8080
# 应用到K8S中
$ kubectl apply -f airflow-ingress.yaml
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
六、参考链接
1、https://github.com/apache/airflow/tree/2.1.4
2、https://airflow.apache.org/docs/helm-chart/1.2.0/index.html