我在同一个k8吊舱container1, container2
上有两个容器
我在container1
中有python脚本,如何在container2
上运行此python脚本?
我的意思是像ssh:
ssh user@container2 python < script_on_container1.py
答案 0 :(得分:1)
您不能;您需要从一个容器向另一个容器发出网络请求。
我建议首先在本地Python虚拟环境中对此进行原型设计。在container2
中,运行诸如Flask之类的轻量级HTTP服务器,并在收到请求时调用脚本将运行的任何代码。证明了这一工作原理之后,您可以在本地Docker容器中设置相同的东西,如果可行,请将这两个过程分成两个单独的Kubernetes部署。
通常对于容器,您不能在其他容器中“运行命令”。在您提出的解决方案中,容器通常不运行ssh守护程序,并且在不损害它们的情况下维护有效的登录凭据确实很困难。 (如果将ssh私钥放入Docker映像中,则拥有该映像的任何人都可以轻而易举地提取它。Kubernetes的秘密使它变得更好一点,但效果并不好。)一个容器调用另一个容器的标准模式是通过网络路径,通常是直接HTTP请求或通过诸如RabbitMQ之类的排队系统。
答案 1 :(得分:0)
解决此问题的方法是执行以下步骤:
con1
中,创建一个在<X> mins
之后运行的cronjob,并读取shared volume
上可用的文件。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