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

问题描述 投票:2回答:2

一些背景:我在Kubernetes上设置了Airflow(在AWS上)。我能够运行DAG查询数据库,发送电子邮件或做任何不需要包已经不属于Airflow的包。例如,如果我尝试运行使用Facebook-business SDK的DAG,DAG显然会因为依赖项不可用而中断。我尝试了几种不同的方法来尝试获得这种依赖性,以及其他已安装但尚未成功的方法。

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

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

我希望运行pip install作为我的initContainer或容器的一部分会使我的pod中的这些依赖项可用。但事实并非如此。这就好像pip安装运行没有任何问题,但是当我的pod完全设置时,python包无处可寻。

我忘了说我找到了一种让它工作的方法,但感觉有点hacky并且应该有更好的方法 - 如果我打开一个shell到我的webserver容器并安装所需的依赖项然后打开一个shell到我的调度程序并执行相同的操作,找到依赖项并且DAG可以正常工作。

python kubernetes pip airflow
2个回答
1
投票

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

我看到两个选择:

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

2)将pip install添加到正在pod中运行的命令。在它们之间用&&将一些命令串在一起并不常见,以便在起始pod中执行一系列操作。


0
投票

我建议您更新Airflow Docker镜像以包含所需的库。

如果您计划为特定DAG使用大量不同的库,则可能需要创建多个Docker镜像,然后在任务级别引用它们。

MyOperator(...,
    executor_config={
    "KubernetesExecutor":
        {"image": "myCustomDockerImage"}
    }
)

参考:baseoperator.py

© www.soinside.com 2019 - 2024. All rights reserved.