gpt4 book ai didi

Kubernetes - 一个容器如何启动 2 个进程并绑定(bind)到这两个进程?

转载 作者:行者123 更新时间:2023-12-03 01:13:24 26 4
gpt4 key购买 nike

我需要一个部署,其中每个 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),则容器不会绑定(bind)到 P2,因此如果 P2 终止,容器将不会重新启动。但是,我需要它重新启动!

最佳答案

您可以使用 supervisord 来执行此操作。你的主进程应该绑定(bind)到docker镜像中的supervisord,并且两个java进程应该使用supervisord进行管理。

supervisord‘s primary purpose is to create and manage processes based on data in its configuration file. It does this by creating subprocesses. Each subprocess spawned by supervisor is managed for the entirety of its lifetime by supervisord (supervisord is the parent process of each process it creates). When a child dies, supervisor is notified of its death via the SIGCHLD signal, and it performs the appropriate operation.

以下是启动两个 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

在你的 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 - 一个容器如何启动 2 个进程并绑定(bind)到这两个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com