K8S部署分布式调度任务Airflow

开源 分布式
本文部署 Airflow 稳定版 2.1.4,Kubernetes使用1.20.x版本,PostgreSQL使用12.x,使用Helm Charts部署。

[[437218]]

一、部署要求

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

 

责任编辑:姜华 来源: YP小站
相关推荐

2020-09-29 19:20:05

鸿蒙

2023-06-26 00:14:28

Openjob分布式任务

2023-05-08 16:38:46

任务调度分布式任务调度

2020-11-06 12:12:35

HarmonyOS

2022-06-13 07:43:21

分布式Spring

2022-06-20 15:32:55

Stage模型分布式开发

2022-01-05 19:34:18

AirflowCeleryMYSQL

2019-11-15 10:16:27

分布式任务框架

2021-11-10 16:10:18

鸿蒙HarmonyOS应用

2021-08-30 10:28:09

FlinkSpark on k8分布式

2024-05-23 10:19:57

2024-09-23 04:00:00

java架构分布式系统

2021-08-16 09:55:41

鸿蒙HarmonyOS应用

2023-09-06 08:12:04

k8s云原生

2021-05-31 20:24:16

鸿蒙HarmonyOS应用

2022-01-27 08:27:23

Dubbo上下线设计

2021-07-09 05:49:53

分布式代码算法

2017-08-22 11:10:44

大数据分布式调度

2017-07-26 14:55:32

分布式技术架构

2022-04-22 13:32:01

K8s容器引擎架构
点赞
收藏

51CTO技术栈公众号