Kubernetes - 如何使用 2 个进程启动容器并绑定到它们?

Dre*_*ams 5 kubernetes

我需要一个部署,其中每个 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
Run Code Online (Sandbox Code Playgroud)

如果我用一个进程(P1)启动容器并在容器启动后启动另一个进程(P2),则容器不会绑定到 P2,因此如果 P2 终止,容器将不会重新启动。但是,我需要它重新启动!

Anu*_*chi 5

您可以使用supervisord来做到这一点。您的主进程应该绑定到 docker 镜像中的 supervisord,并且应该使用 supervisord 管理两个 java 进程。

supervisord 的主要目的是根据其配置文件中的数据创建和管理进程。它通过创建子流程来做到这一点。由 supervisor 产生的每个子进程在其整个生命周期内都由 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 Code Online (Sandbox Code Playgroud)

在您的 docker 文件中,您应该执行以下操作:

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"]
Run Code Online (Sandbox Code Playgroud)