从同一容器中的另一个容器在容器上运行python脚本

时间:2020-04-20 09:27:25

标签: kubernetes

我在同一个k8吊舱container1, container2上有两个容器

我在container1中有python脚本,如何在container2上运行此python脚本?

我的意思是像ssh:

ssh user@container2 python < script_on_container1.py 

3 个答案:

答案 0 :(得分:1)

您不能;您需要从一个容器向另一个容器发出网络请求。

我建议首先在本地Python虚拟环境中对此进行原型设计。在container2中,运行诸如Flask之类的轻量级HTTP服务器,并在收到请求时调用脚本将运行的任何代码。证明了这一工作原理之后,您可以在本地Docker容器中设置相同的东西,如果可行,请将这两个过程分成两个单独的Kubernetes部署。

通常对于容器,您不能在其他容器中“运行命令”。在您提出的解决方案中,容器通常不运行ssh守护程序,并且在不损害它们的情况下维护有效的登录凭据确实很困难。 (如果将ssh私钥放入Docker映像中,则拥有该映像的任何人都可以轻而易举地提取它。Kubernetes的秘密使它变得更好一点,但效果并不好。)一个容器调用另一个容器的标准模式是通过网络路径,通常是直接HTTP请求或通过诸如RabbitMQ之类的排队系统。

答案 1 :(得分:0)

解决此问题的方法是执行以下步骤:

  1. 创建一个卷并在容器的两个容器(con1和con2)之间共享。
  2. con1中,创建一个在<X> mins之后运行的cronjob,并读取shared volume上可用的文件。
  3. 因此,只要con2对该文件进行任何更改,con1都会通过共享卷执行共享文件中指定的任何操作。

我希望这会有所帮助。

答案 2 :(得分:0)

您可以使用此脚本; https://gist.github.com/ahmetkotan/b592bf9919cfac7daa2e2e6c2e95772d

python kubernetes_api_exec.py <pod_name> container2 python < script_on_container1.py

或其他命令。例如;

python kubernetes_api_exec.py <pod_name> container2 date
python kubernetes_api_exec.py <pod_name> container2 uname -a