1.airflow系列之K8S部署airflow2.5.1
创始人
2024-06-02 06:19:55
0

本文记录了笔者最近基于Helm在K8S上部署airflow2.5.1版本遇到的一系列问题及最终的一键部署脚本,欢迎关注算法小生免费阅读

由于之前在airflow的使用上是单worker节点,为了支持多worker节点以及简化部署流程,特此新增了airflow-plus[命名空间也为此,防止影响目前运行的任务,稳定后任务在切换]

笔者遇到了以下问题,将会为你一一解答

  • airflow db init未执行报错问题
  • redis连接问题
  • 日志无法查看问题
  • 多woker不启动问题
  • helm upgrade问题
  • 缓存问题
  • 数据库不存在问题
  • 动态安装依赖问题

其中有些问题,官网写的比较模糊,还是直接根据问题查看源码找到对应配置会快些

1. 新建secret.yaml文件

该文件主要存放git与repo访问秘钥

apiVersion: v1
kind: Secret
metadata:name: git-credentials
type: Opaque
data:GIT_SYNC_USERNAME: XXXXXXXGIT_SYNC_PASSWORD: XXXXXXX
---
apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:name: nexus-registry-secretnamespace: airflow-plus
data:".dockerconfigjson": "XXXXXXX"

部署该文件到命名空间airflow-plus

kubectl apply -f secret.yaml --namespace airflow-plus

2. 新建values.yaml文件

该文件主要进行一些重写工作,可参照源码values.yaml

config:core:# git上dags所在的目录,配置对即可在webserver中看到dagsdags_folder: /opt/airflow/dags/repo/dags # 根据ip方式通信,默认hostname域名方式,解决访问worker节点日志无法查看问题hostname_callable: airflow.utils.net.get_host_ip_addressdefault_timezone: Asia/Shanghai
webserver:# 重写args方法,执行airflow webserver前执行airflow db init解决初始化报错问题args:- "bash"- "-c"- |-exec \airflow db init \|-exec \airflow webserverservice:type: NodePortports:- name: airflow-uiport: 8080targetPort: 8080# 浏览器访问端口映射nodePort: 30120

3. 新建uninstall.sh

主要对airflow进行一键卸载

helm delete airflow --namespace airflow-plus

4. 新建install.sh

一键安装airflow,重点来了

helm repo add apache-airflow https://airflow.apache.org
export RELEASE_NAME=airflow
# upgrade若报错helm list --namespace airflow-plus查看对应release是否存在,不存在则install,并且指定刚才的values.yaml文件
helm upgrade --install $RELEASE_NAME apache-airflow/airflow --namespace airflow-plus -f values.yaml \# K8S部署选用该Executor--set executor=CeleryKubernetesExecutor \--set defaultAirflowRepository=apache/airflow \--set airflowVersion=2.5.1 \--set data.metadataConnection.user=airflow \# pgsql密码--set postgresql.auth.postgresPassword=XXXXX \# pgsql连接IP--set data.metadataConnection.host=192.168.0.XXX \# pgsql元数据访问密码,一般与密码一致--set data.metadataConnection.pass=XXXXX  \# pgsql连接端口,根据实际进行修改--set data.metadataConnection.port=35432 \# pgsql授权用户名--set postgresql.auth.username=airflow \# pgsql授权密码,一般与密码一致--set postgresql.auth.password=XXXXX \# 外部redis连接地址,注意格式,否则连接会报错--set data.brokerUrl=redis://redis-pod.middleware:6379/0 \# 元数据连接数据库名,不存在则到pgsql中新建,否则报错--set data.metadataConnection.db=airflow_plus \# false表示使用外部pgsql--set postgresql.enabled=false \# false表示使用外部redis--set redis.enabled=false \# 由于直接在新的命名空间与新库部署,所以不需要迁移,设置为false--set triggerer.waitForMigrations.enabled=false \--set webserver.waitForMigrations.enabled=false \--set scheduler.waitForMigrations.enabled=false \# git工具仓库地址--set images.gitSync.repository=registry.cn-hangzhou.aliyuncs.com/goojia/k8s \# git版本--set images.gitSync.tag=git-sync-v3.3.0 \# 公司gitlab airflow项目地址--set dags.gitSync.repo=http://gitlab.XXXX.com/dev0/airflow.git \# 允许git同步--set dags.gitSync.enabled=true \# git同步分支--set dags.gitSync.branch=master \# git同步授权秘钥,就是secret.yaml中配置的--set dags.gitSync.credentialsSecret=git-credentials \# 其他的一些暂时用不到的先为false--set createUserJob.applyCustomEnv=false \--set createUserJob.serviceAccount.create=false \--set migrateDatabaseJob.applyCustomEnv=false \--set createUserJob.useHelmHooks=false \--set migrateDatabaseJob.enabled=false \--set migrateDatabaseJob.serviceAccount.create=false \--set migrateDatabaseJob.useHelmHooks=false \--set cleanup.serviceAccount.create=false \# workers默认为Stateful Sets,需要设置为false,才会为Deployment部署为Pod--set workers.persistence.enabled=false \# workers pod数--set workers.replicas=3 \# 关闭创建用户job--set webserver.defaultUser.enabled=false \# 如果有对镜像改造的需求,这里授权访问公司repo#--set registry.secretName=nexus-registry-secret

至此一切OK了,./install.sh一键部署吧

5.访问airflow

http://IP:30120/, 默认用户名admin 密码admin

主页面:

日志查看:

K8S妥妥的多worker节点:

6. 总结与其他

在实操的过程中,遇到问题询问ChatGPT会省不少时间,有些ChatGPT也解答不好的话,最好下载下来Helm Chart对应版本源码,及Airflow源码,也可能会很快搜到一些有效信息

其实在用的时候,公司有自己的工具类,目前的话手工到workers中去一个个安装,即使更新也是手工修改,也尝试了通过改写父类方法每次都提前安装的方式不过没成功,任务多起来每次都要安装还不如一个个worker去安装,反正目前worker数也不多,如果你有更好的方式欢迎与我沟通交流

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...