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

Kubernetes 从同一pod上的另一个容器在容器上运行python脚本,kubernetes,Kubernetes,我在同一个k8吊舱上有两个集装箱,container1,container2 我在container1中有python脚本,如何在container2上运行此python脚本 我的意思是像ssh: ssh user@container2 python < script_on_container1.py sshuser@container2python

我在同一个k8吊舱上有两个集装箱,
container1,container2

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

我的意思是像ssh:

ssh user@container2 python < script_on_container1.py 
sshuser@container2python
你不能;您需要从一个容器向另一个容器发出网络请求

我建议首先在本地Python虚拟环境中进行原型设计。在
container2
中,运行一些轻量级HTTP服务器,如Flask,当它收到请求时,它调用脚本将运行的任何代码。一旦您演示了这项工作,您就可以在本地Docker容器中设置相同的内容,如果可以的话,将这两个进程分成两个单独的Kubernetes部署


通常,对于容器,您不能在其他容器中“运行命令”。在您建议的解决方案中,容器通常不运行ssh守护进程,在不影响有效登录凭据的情况下维护它们确实很困难。(如果您将ssh私钥放入Docker映像中,任何拥有该映像的人都可以轻松地提取它。Kubernetes secrets使这一点更好,但不是很好。)一个容器调用另一个容器的标准模式是通过网络路径,通常,直接HTTP请求或通过RabbitMQ等排队系统。

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

  • 创建一个卷并在pod的两个容器(con1和con2)之间共享
  • con1
    中,创建一个在
    分钟后运行的cronjob
    并读取
    共享卷上可用的文件
  • 因此,每当
    con2
    在该文件中进行任何更改时,
    con1
    将通过共享卷执行共享文件中指定的任何操作 我希望这有帮助。

    您可以使用此脚本

    python kubernetes\u api\u exec.py container2 python
    或其他命令。比如,

    python kubernetes_api_exec.py <pod_name> container2 date
    python kubernetes_api_exec.py <pod_name> container2 uname -a
    
    python kubernetes\u api\u exec.py container2日期
    python kubernetes_api_exec.py container2 uname-a
    
    看起来很棒!,我可以从container1运行它吗?谢谢没用。如果我想从阿尔卑斯山集装箱运过来,我会得到“握手403禁止”
    python kubernetes_api_exec.py <pod_name> container2 date
    python kubernetes_api_exec.py <pod_name> container2 uname -a