我需要一个部署,每个豆荚有一个单一的容器,每个容器有2个Java进程运行。由于容器以进程(P1)启动,如果该特定进程(P1)被终止,则Pod重新启动。有没有可能,容器从两个进程开始,即使其中一个进程被终止,容器(或Pod,在我们的例子中,因为每个Pod只有一个容器)会重新启动?我找不到任何与此相关的文件,说明它可以或不能这样做。另外,如何使用2个进程启动容器?如果我在我的docker映像中尝试这样的操作(javaProcess是一个Java文件),它只运行第一个进程:
java -jar abc.jar
java javaProcess
or
java javaProcess
java -jar abc.jar
如果我用一个进程(P1)启动容器,并在容器启动后启动另一个进程(P2),容器将不会绑定到P2,因此如果P2终止,容器将不会重新启动。但是,我需要它重新启动!
4条答案
按热度按时间4si2a6ki1#
您可以使用supervisord完成此操作。您的主进程应该绑定到docker映像中的Supervisor ord,并且应该使用Supervisor管理两个Java进程。
Supervisor的主要用途是基于其配置文件中的数据创建和管理流程。它通过创建子流程来实现这一点。Supervisor产生的每个子进程在其整个生命周期内都由Superord管理(Superord是它创建的每个进程的父进程)。当孩子死亡时,Supervisor通过SIGCHLD信号通知其死亡,并执行适当的操作。
以下是启动两个Java进程的Superord配置文件示例。(Supervisord.conf)
在您的docker文件中,您应该这样做:
4smxwvx52#
从Kubernetes配置运行Supervisor
要添加到@AnuruddhaLankaLiyanarachchi答案,您还可以通过在YAML文件中提供
command
和args
密钥,从Kubernetes安装程序运行Supervisor:lf3rwulv3#
您可以添加‘&’符号在后台运行进程。
通过这种方式,您将在Pod中运行两个进程。但是,您的容器将绑定到前台的进程!
osh3o9ms4#
我需要一个部署,每个豆荚有一个单一的容器,每个容器有2个Java进程运行。
这是一个在一个吊舱中运行两个集装箱的典型案例。我能想到的唯一例外是P1和P2共享一个套接字,或者(更糟糕的是)使用共享内存。
使用Superord将会起作用,但它是Kubernetes的反模式。正如你已经注意到的,有几种P1/P2故障的组合最好由Kubernetes直接处理。