通过Helm升级Airflow部署遇数据库哈希匹配异常问题
解决Airflow 2.6 Helm升级时数据库哈希不匹配的问题
问题根源
你用Airflow 2.6的镜像执行数据库迁移,但实际数据库还是2.5的Schema,Airflow会校验数据库的版本哈希值,两者不匹配就会报错。直接降级数据库风险太高,试试下面几个方案:
方案1:用2.5版本镜像完成到2.6的迁移(推荐)
这是官方合规的升级路径,先通过旧版本镜像把数据库从2.5升到2.6,再执行Helm升级:
- 临时在K8s集群中启动一个Airflow 2.5的Pod,连接现有数据库执行迁移:
注意:如果数据库连接需要secret或特定环境变量,要给Pod加上对应的挂载和配置(比如# 替换镜像版本为你之前用的2.5具体版本,比如2.5.3 kubectl run airflow-db-migrate-temp --image=apache/airflow:2.5.3 --rm -it -- \ airflow db upgrade--env或--volume参数),确保Pod能正常访问数据库。 - 迁移完成后,重新执行你的
helm upgrade --install命令,此时数据库已经是2.6的Schema,哈希校验会通过。
方案2:临时跳过哈希校验(应急用)
如果临时启动2.5容器有困难,可以临时跳过哈希检查让迁移继续,但不建议长期使用:
- 在你的values.yml中添加以下配置:
airflow: config: AIRFLOW__DATABASE__SKIP_DB_CHECKS: "True" - 执行Helm升级,迁移Pod会跳过哈希校验尝试完成迁移。完成后记得立即移除这个配置,避免后续出现schema不一致问题。
方案3:手动更新数据库哈希值
如果你能获取到Airflow 2.6对应的正确哈希值,可以直接修改数据库记录:
- 连接到Airflow数据库Pod:
kubectl exec -it <你的数据库Pod名称> -- psql -U <Airflow数据库用户名> -d <Airflow数据库名> - 查询当前版本记录:
SELECT * FROM airflow_version; - 更新为2.6对应的哈希值(可以从正常运行的2.6环境数据库中复制,或者从Airflow 2.6的源码中找到):
UPDATE airflow_version SET version_hash='<2.6对应的哈希值>' WHERE version='2.6.0'; - 退出数据库后重新执行Helm升级即可。
注意事项
所有操作前一定要备份数据库,避免数据丢失。优先用方案1,这是最稳妥的方式。
内容的提问来源于stack exchange,提问作者kenneth Odumah
相关产品推荐
相关产品推荐

