airflow - Airflow 与 Kerberos 的集成如何工作?
问题描述
我们正在使用具有以下设置的 Airflow 2.0.1:
- 芹菜执行器和 4 个节点上的 4 个工人。
- 我们的大部分任务都运行一些通过 BashOperator 启动的 Hadoop 应用程序
- 使用模仿
- 仅使用默认队列
首先,我们设置了一个自己的作业来更新 run_as_user 用户的 Kerberos 票证。大约一周后它运行良好,然后一名工人开始因丢失 Kerberos 票而失败。我们找不到上次成功运行和失败作业之间的任何变化;节点上有有效票证;所以我们阻止了工人。第二天,我们完全重新启动了 Airflow,所有工作人员都报告了缺少 Kerberos 票证。暂时,当 kinit 在 DAG 中运行并根据https://airflow.apache.org/docs/apache-airflow/2.0.1/security/kerberos启用 Kerberos 时,我们可以使用一名工作人员运行作业.html?highlight=kerberos。
问题是
- 如果有人可以更详细地描述,Airflow 与 Kerberos 的集成是如何工作的
- 为什么当我们通过 BashOperator 启动应用程序时看不到从命令行使用的票证
解决方案
感谢您的评论。我做了一些测试,并认为现在更好地理解发生在我们身上的事情:
从 BashOperator 访问 hdfs 开始因 Kerberos 错误而失败,我认为我必须根据https://airflow.apache.org/docs/apache-airflow/2.0.1/security/kerberos.html?highlight=kerberos设置配置。在测试它时,工作人员试图通过在airflow.cfg 中配置并由airflow kerberos 创建的run_as_user 用户票证缓存文件读取它并没有权限...
因此,我正在检查票在生产中的存储位置,它们位于运行 Airflow 工作程序的服务的 /tmp 中。我的意思是 kinit 创建的票证在 DAG 中的 BashOperators 中运行,但是我们更新票证的脚本对 Airflow 工作程序运行的所有节点执行 ssh,因此票证存储在常规服务器 /tmp 中。
在我们在服务中启动 Airflow 几天后,失败就开始了。我们仍然有很多直接在 DAG 中的 kinit(因为这是我们之前使用的方式,因为之前我们使用了队列)。通过在几个没有队列的节点上启动工作人员,我们还设置了更新 ticktes 的脚本(执行 ssh ...),以确保在所有节点上更新票证。我认为 Kerberos 问题是在服务重新启动后发生的,因为 DAG 中 kinit 创建的票证已被删除。如果是这样的话,我们第一次启动服务时也会出现Kerberos问题,但我们也有其他问题,所以可能我们没有注意到。
推荐阅读
- visual-studio-code - 如何在 vscode 中更改“命令调色板边框”颜色
- jquery - return 语句警告后如何解决无法访问的代码?
- java - 将对象的信息传递给另一个活动
- python - 按月过滤日期 DRF
- javascript - @ViewChild(CdkPortalOutlet) 在 AfterViewInit 中返回未定义
- python - 分页:无效的查询参数
- php - 将数据添加到特定的 PhpMyAdmin 帐户.. 如何?
- javascript - 如何在 Electron 框架中设置 cookie?
- linux - 一个 bash shell 程序等待列表中的所有服务器启动,然后运行启动脚本
- apache-spark - 确保 DF 的每个分区对于一列/一组列具有相同的值