k8s(helm) 部署airflow(详细可实施)

本文详细描述了如何在K8s1.26.8环境中使用Helm部署Airflow2.6.2,涉及集群设置、PV/PVC创建、Git配置和高级安装参数,以充分利用K8s资源调度和扩展功能。
摘要由CSDN通过智能技术生成

前言:

 如果要用k8的方式部署airflow,采用helm安装是比较方便的,但是并不是按照官网给的命令,就可以简单顺利的安装成功的。需要很多前置工作,以及参数调试

作者经过近两周的摸索,形成了比较完整的的airflow on k8s 的部署流程。

集群整体情况介绍:

 k8s 版本: 1.26.8

airflow 版本:2.6.2

集群运行方式: k8s + KubernetesExecutor + KubernetesPodOperator

优点:如此部署可以充分利用k8s的资源调度分配能力,已经自动扩展能力

可以使用pod_template_file,与argoworflows的使用方式接近

airflow简介:

简介:

    Airflow是一个开源的任务调度和工作流编排平台,由Airbnb开发并于2016年贡献给Apache软件基金会。它的主要目标是帮助用户以编程方式创建、调度和监控复杂的工作流任务。

Airflow包括如下组件

  • a scheduler:用于触发预定的workflow,提交任务以执行等

  • an executor:用于执行任务。默认安装中,executor运行scheduler中的每个任务,而开发环境(production-suitable executors)多数executor将任务执行推送给workers执行

  • a webserver:提供UI用于监视(inspect)、触发和对DAGs与任务的debug,Flask

  • DAG文件夹:由scheduler、executor和workers读取

  • metadata数据库:scheduler、executor和webserver存储数据用

部署实施:

0,helm的安装与airflow源准备

   a. helm安装

   snap install helm --classic
 b.创建kubernetes airflow 命名空间

   kubectl create namespace airflow 

 c.添加 airflow charts 仓库源

  helm repo add apache-airflow https://airflow.apache.org
 
 d.更新 aiarflow 源

  helm repo update
 
 e. 查看 airflow charts 所有版本

  helm search repo apache-airflow/airflow -l

1, 创建airflow部署过程中用到的pv

     因为airflow 的一些pod需要pv存储,不创建的话,pod会一直pending

a.创建目录

  /mnt/airflow/pv1 等目录需要手动在服务器创建

b. 创建pv

   kubectl apply -f xxx.yaml

   yaml文件内容如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: airflow-pv1
spec:
  capacity:
    storage: 150Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/airflow/pv1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: airflow-pv2
spec:
  capacity:
    storage: 150Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/airflow/pv2
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: airflow-pv3
spec:
  capacity:
    storage: 150Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/airflow/pv3
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: airflow-pv4
spec:
        #storageClassName: airflowdev-storage
  capacity:
    storage: 150Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/airflow/pv4

日志持久化pv/pvc

---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: testlog-volume
spec:
  accessModes:
    - ReadWriteMany
  capacity:
    storage: 20Gi
  hostPath:
    path: /mnt/airflow/logs
    #storageClassName: standard
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: testlog-volume
  namespace: airflow
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

2. Git相关的配置

 配置git是为了方便管理和获取dags代码,避免很多dags文件找不到或没权限读取的问题

a.创建git的Secret

  需要用到你git仓库账号和密码的base64

 kubectl apply -f git-credentials.yaml

# git-credentials.yaml
apiVersion: v1
kind: Secret
metadata:
  name: git-credentials
type: Opaque
data:
  GIT_SYNC_USERNAME: xxxxxx(git用户名的base64)
  GIT_SYNC_PASSWORD: xxxxxx (git密码的base64)

3. 最终的helm命令安装

    参数较多,为了解决各种权限,日志持久化的问题

    ***使用时需要将 dags.gitSync.repo 替换成你自己的

helm install airflow apache-airflow/airflow -n airflow \
--set postgresql.volumePermissions.enabled=true \
--set worker.volumePermissions.enabled=true \
--set workers.persistence.enabled=false \
--set executor=KubernetesExecutor \
--set airflowVersion=2.7.0 \
--set triggerer.securityContext.runAsUser=0 \
--set triggerer.securityContext.fsGroup=0 \
--set images.gitSync.repository=registry.cn-hangzhou.aliyuncs.com/goojia/k8s\
--set images.gitSync.tag=git-sync-v3.3.0 \
--set dags.gitSync.enabled=true\
--set dags.gitSync.branch=master \
--set dags.gitSync.credentialsSecret=git-credentials\
--set dags.gitSync.repo=http://xxxxx:80/xxxxx/airflow-dags.git\ 
--set dag_folder=/opt/airflow/dags/repo \
--set logs.persistence.enabled=true\
--set logs.persistence.existingClaim=testlog-volume\
--set dagProcessor.securityContext.runAsUser=0 \
--set dagProcessor.securityContext.fsGroup=0 \
--set scheduler.securityContext.runAsUser=0 \
--set scheduler.securityContext.fsGroup=0 \
--set workers.securityContext.runAsUser=0 \
--set workers.securityContext.fsGroup=0 \
--set webserver.securityContext.runAsUser=0 --set webserver.securityContext.fsGroup=0 -f value.yaml

value.yaml的内容如下

config:
  core:
    # git上dags所在的目录,配置对即可在webserver中看到dags
    dags_folder: /opt/airflow/dags/repo
    hostname_callable: airflow.utils.net.get_host_ip_address
    default_timezone: Asia/Shanghai
  kubernetes:
    multi_namespace_mode: True
  kubernetes_executor:
    multi_namespace_mode: True
multiNamespaceMode: True
webserverSecretKeySecretName: my-webserver-secret

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值