有没有在 pod 上安装 python 包的特定方法?

Jes*_*cia 6 python pip kubernetes airflow

一些背景:我已经在 Kubernetes(在 AWS 上)上设置了 Airflow。我能够运行 DAG 来查询数据库、发送电子邮件或执行任何不需要 Airflow 中尚未包含的包的操作。例如,如果我尝试运行使用 Facebook 业务 SDK 的 DAG,则 DAG 显然会崩溃,因为依赖项不可用。我尝试了几种不同的方法来尝试安装此依赖项以及其他依赖项,但没有成功。

我尝试通过修改我的调度程序和网络服务器部署来安装 python 包,以将我的依赖项作为 initContainer 的一部分进行 pip 安装。当我这样做时,DAG 仍然损坏,因为它无法找到所需的包。当我打开 pod 的 shell 时,我可以看到依赖项尚未安装(我使用 检查pip list)。我还验证了没有安装其他 python/pip 版本。

当我打开 pod 的 shell 时,我还尝试通过运行 pip install 来安装依赖项。这种方式成功地将依赖项安装在正确的位置并使其可用。但是,我收到的消息不是 Web 服务器 UI 显示我的 DAG 已损坏this dag isn't available in the webserver dagbag object

我希望pip install作为 initContainer 或容器的一部分运行将使这些依赖项在我的 pod 中可用。然而,事实并非如此。就好像 pip install 运行时没有任何问题,但当我的 pod 完全设置完毕时,python 包却找不到了

我忘了说我已经找到了一种让它工作的方法,但感觉有点老套,应该有更好的方法 - 如果我打开一个到我的网络服务器容器的 shell 并安装所需的依赖项,然后打开一个到我的 web 服务器容器的 shell调度程序并做同样的事情,找到依赖关系并且 DAG 工作。

Lai*_*zer 2

init 容器是一个单独的 docker 实例。除非你为 python 库设置某种共享存储(这是相当可疑的),否则 init 容器中的任何 pip 安装都不会影响 pod 的运行容器。

我看到两个选择:

1)修改您正在使用的docker镜像以包含您需要的包

2)pip install在 pod 中运行的命令前面添加 a。&&为了在启动 Pod 中执行一系列操作,将几个命令串在一起的情况并不罕见。