kubernetes-如何从两个过程开始并绑定到两个过程



我需要一个部署,每个POD都有一个容器,每个容器都有2个Java进程运行。由于容器以过程(P1(开头,如果该特定过程(P1(被杀死,则POD重新启动。是否有可能,容器从2个过程开始,即使其中一个被杀死,容器(在我们的情况下,因为每个吊舱都有一个容器(重新启动?我找不到与此相关的任何文档,表明可以/无法完成。另外,如何使用2个进程启动容器?如果我在我的docker映像中尝试这样的事情(javaprocess是java文件(,它仅运行第一个过程:

java -jar abc.jar
java javaProcess
or 
java javaProcess
java -jar abc.jar

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

您可以使用Substisord进行此操作。您的主要过程应绑定到Docker Image中的主管,并应使用Substisord对两个Java过程进行管理。

Substisord的主要目的是创建和管理基于过程 在其配置文件中的数据上。它通过创建而做到这一点 子过程。主管产生的每个子过程都管理 主管的整个一生的一生(主管是父母 它创建的每个过程的过程(。当孩子去世时,主管是 通过Sigchld信号通知其死亡,并执行 适当的操作。

以下是一个示例主管配置文件,该文件启动了两个Java进程。(suspsisord.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

在您的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"]

kubernetes config

的运行主管

要添加到@anuruddhalankaliyanarachchi答案中,您还可以通过在yaml文件中提供commandargs键从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"]

您可以添加'&'签名在后台运行一个过程。

java javaProcess &
java -jar abc.jar

通过这种方式,您将在吊舱内部运行两个过程。但是,您的容器将绑定到前景中的过程!

我需要一个部署,每个POD都有一个容器和每个容器有2个Java流程运行。

这是一个教科书案例,用于在一个吊舱中运行两个容器。我唯一能想到的例外是P1和P2共享套接字或使用共享内存(更糟(。

使用Substisord可以使用,但它是Kubernetes的反图案。正如您已经注意到的那样,P1/P2失败的几种组合直接由Kubernetes处理。

最新更新