K8S部署分布式调度任务Airflow

K8S部署分布式调度任务Airflow

作者:YP小站 2021-11-29 08:48:00

开源

分布式 本文部署 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 版本部署

  1. # 创建kubernetes airflow 命名空间 
  2. $ kubectl create namespace airflow 
  3.  
  4. # 添加 airflow charts 仓库源 
  5. $ helm repo add apache-airflow https://airflow.apache.org 
  6.  
  7. # 更新 aiarflow 源 
  8. $ helm repo update 
  9.  
  10. # 查看 airflow charts 所有版本(这里选择部署charts 1.2.0,也就是airflow 2.1.4) 
  11. $ helm search repo apache-airflow/airflow -l 
  12.  
  13. NAME                    CHART VERSION   APP VERSION DESCRIPTION 
  14. apache-airflow/airflow  1.3.0           2.2.1       The official Helm chart to deploy Apache Airflo... 
  15. apache-airflow/airflow  1.2.0           2.1.4       The official Helm chart to deploy Apache Airflo... 
  16. apache-airflow/airflow  1.1.0           2.1.2       The official Helm chart to deploy Apache Airflo... 
  17. apache-airflow/airflow  1.0.0           2.0.2       Helm chart to deploy Apache Airflow, a platform... 
  18.  
  19. # 导出 airflow charts values.yaml 文件 
  20. $ helm show values apache-airflow/airflow --version 1.2.0 > airflow_1.2.4_values.yaml 

三、修改airflow配置

3.1 配置持续存储 StorageClass

PS: 使用阿里云NAS极速存储

  1. # 编辑 StorageClass 文件 
  2. $ vim alicloud-nas-airflow-test.yaml 
  3.  
  4. apiVersion: storage.k8s.io/v1 
  5. kind: StorageClass 
  6. metadata: 
  7.   name: alicloud-nas-airflow-test 
  8. mountOptions: 
  9.   - nolock,tcp,noresvport 
  10.   - vers=3 
  11. parameters: 
  12.   volumeAs: subpath 
  13.   server: "xxxxx.cn-beijing.extreme.nas.aliyuncs.com:/share/airflow/" 
  14. provisioner: nasplugin.csi.alibabacloud.com 
  15. reclaimPolicy: Retain 
  16.  
  17. # 应用到K8S中 
  18. $ kubectl apply -f alicloud-nas-airflow-test.yaml 

3.2 配置 airflow Dags 存储仓库 gitSshKey

  1. # 编辑 airflow-ssh-secret.yaml 文件,首先需要把shh公钥添加到git项目仓库中 
  2. $ vim airflow-ssh-secret.yaml 
  3.  
  4. apiVersion: v1 
  5. kind: Secret 
  6. metadata: 
  7.   name: airflow-ssh-secret 
  8.   namespace: airflow 
  9. data: 
  10.   # key needs to be gitSshKey 
  11.   gitSshKey: "ssh私钥,base64" 
  12.  
  13. # 应用到K8S中 
  14. $ kubectl apply -f airflow-ssh-secret.yaml 

3.3 Docker 部署 PostgreSQL 12

  1. # 创建 postgresql 存储目录 
  2. $ mkdir /data/postgresql_data 
  3.  
  4. # 创建启动文件 
  5. $ vim docker-compose.yaml 
  6.  
  7. version: "3" 
  8.  
  9. services: 
  10.   airflow-postgres: 
  11.     image: postgres:12 
  12.     restart: always 
  13.     container_name: airflow-postgres 
  14.     environment: 
  15.       TZ: Asia/Shanghai 
  16.       POSTGRES_USER: airflow 
  17.       POSTGRES_PASSWORD: Airflow123 
  18.     volumes: 
  19.       - /data/postgresql_data:/var/lib/postgresql/data 
  20.     ports: 
  21.       - "5432:5432" 
  22.  
  23. # 启动 postgresql docker 
  24. $ docker-compose up -d 

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

  1. # 第一次部署 Airflow 
  2. $ helm install airflow apache-airflow/airflow --namespace airflow --version 1.2.0 -f airflow_1.2.4_values.yaml 
  3.  
  4. # 以后如果要修改airflow配置,请使用下面命令 
  5. $ helm upgrade --install airflow apache-airflow/airflow --namespace airflow --version 1.2.0 -f airflow_1.2.4_values.yaml 

五、配置 Airflow Ingress Nginx 访问入口

  1. # 生成 ingress nginx 配置文件 
  2. $ vim airflow-ingress.yaml 
  3.  
  4. apiVersion: networking.k8s.io/v1 
  5. kind: Ingress 
  6. metadata: 
  7.   name: airflow 
  8.   namespace: airflow 
  9.   annotations: 
  10.     kubernetes.io/ingress.class: nginx 
  11.     nginx.ingress.kubernetes.io/ssl-redirect: "false" 
  12.     nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" 
  13.     nginx.ingress.kubernetes.io/proxy-read-timeout: "60" 
  14.     nginx.ingress.kubernetes.io/proxy-send-timeout: "60" 
  15. spec: 
  16.   rules: 
  17.   - host: "airflow.example.com" 
  18.     http: 
  19.       paths: 
  20.       - path: / 
  21.         pathType: Prefix 
  22.         backend: 
  23.           service: 
  24.             name: airflow-webserver 
  25.             port: 
  26.               number: 8080 
  27.  
  28. # 应用到K8S中 
  29. $ kubectl apply -f airflow-ingress.yaml 

六、参考链接

1、https://github.com/apache/airflow/tree/2.1.4

2、https://airflow.apache.org/docs/helm-chart/1.2.0/index.html

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/231837.html<

(0)
运维的头像运维
上一篇2025-04-19 21:33
下一篇 2025-04-19 21:34

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注