我需要一个部署,其中每个pod都有一个容器,每个容器都有2个java进程在运行。因为,容器以进程(P1)开始,如果该特定进程(P1)被终止,则pod重新启动。是否有可能,我启动容器从2个进程开始,即使其中一个被杀死,容器(或我们的情况下的pod,因为每个pod只有一个容器)重新启动?我找不到任何与此相关的文档,说它可以/不可以完成。另外,如何使用2个进程启动容器?如果我在docker镜像中尝试这样的东西(javaProcess是一个java文件),它只运行第一个进程:
java -jar abc.jar
java javaProcess
or
java javaProcess
java -jar abc.jar
如果我使用一个进程启动容器(P1)并在容器启动后启动另一个进程(P2),则容器将不会绑定到P2,因此如果P2终止,容器将不会重新启动。但是,我需要重启!
答案 0 :(得分:4)
您可以使用supervisord执行此操作。您的主进程应该绑定到docker image中的supervisord,并且应该使用supervisord管理两个java进程。
supervisord的主要目的是创建和管理基于流程的流程 在其配置文件中的数据。它通过创造来做到这一点 子进程。由主管生成的每个子进程都是为管理的 由supervisord完成其整个生命周期(supervisord是父母 它创建的每个过程的过程)。当一个孩子去世时,主管就是 通过SIGCHLD信号通知其死亡,并执行 适当的操作。
以下是一个启动两个java进程的示例supervisord配置文件。 (supervisord.conf)
[supervisord]
nodaemon=true
[program:java1]
user=root
startsecs = 120
autorestart = true
command=java javaProcess1
[program:java2]
user=root
startsecs = 120
autorestart = true
command=java javaProcess2
在您的泊坞窗文件中,您应该执行以下操作:
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]
答案 1 :(得分:2)
从Kubernetes配置运行主管
要添加到@AnuruddhaLankaLiyanarachchi答案中,您还可以通过在Yaml文件中提供command
和args
键,从Kubernetes设置中运行超级用户:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-example
spec:
containers:
- name: nginx-pod-example
image: library/nginx
command: ["/usr/bin/supervisord"]
args: ["-n", "-c", "/etc/supervisor/supervisord.conf"]
答案 2 :(得分:0)
您可以添加'&'签名以在后台运行进程。
java javaProcess &
java -jar abc.jar
通过这种方式,您将在pod中运行两个进程。但是,您的容器将绑定到前台的进程!