为什么 K8S 要求 Pod 中的 Container 启动时至少有一个进程是前台运行的?

2021-03-19 08:43:08 +08:00
 zhoudaiyu

不是很明白为什么必须前台,如果有的进程就是只能后台启动的,那怎么办呢?

4630 次点击
所在节点    Kubernetes
50 条回复
baiyi
2021-03-19 08:48:27 +08:00
没有进程容器不就停止了吗。可以启用一个类似监控或者管理的进程来保持容器运行。
zhoudaiyu
2021-03-19 08:49:26 +08:00
@baiyi #1 对 我们用 supervisor 但是不太明白为什么必须前台
binux
2021-03-19 08:50:03 +08:00
没前台那就 waitpid 呗
baiyi
2021-03-19 08:50:56 +08:00
@zhoudaiyu #2 你可以理解为容器的本质就是这个进程在运行,进程结束了,容器也就结束了。
whileFalse
2021-03-19 08:55:31 +08:00
请详述场景。我觉得你对容器的使用方法不太正确。
---------------------
虽然容器能像完整的虚拟机那样运行一堆进程,但容器本身的设计理念是仅运行单个任务;如果有多个任务,则应拆成多个容器。那么容器本身的生命周期应该和该单个任务的生命周期相同。即这个任务进程退出,容器也就退出了。

如果容器的主要任务是个后台进程,那么你的主进程应该监视该后台进程的执行情况,等待该后台进程退出后主进程也退出。
whileFalse
2021-03-19 08:58:22 +08:00
@zhoudaiyu 我觉得容器里装 supervisor 就是属于滥用容器。
noqwerty
2021-03-19 09:32:08 +08:00
容器里又套一个 supervisor 是啥操作…
Tink
2021-03-19 09:34:48 +08:00
同楼上,还在 container 里面用 supervisor 确实有点搞事情
UN2758
2021-03-19 09:42:44 +08:00
同问这是啥操作,有什么动机吗
zhoudaiyu
2021-03-19 10:02:35 +08:00
@whileFalse
@noqwerty
@Tink
@UN2758 你说的是对的,应该拆成多个 container,比如 containerA 和 containerB,但是我们现在的场景是:containerA 想对 containerB 的进程操作,我们用的超低版本的 k8 是不支持进程空间共享的,所以弄了一个 supervisor 能管理多个进程
claymore94
2021-03-19 10:13:55 +08:00
我猜你是偏传统企业,我们也有个容器里面用 supervisor 管理两个进程
zhoudaiyu
2021-03-19 10:15:58 +08:00
@claymore94 其实主进程就是一个 tomcat,但是有一些辅助进程需要按需启动
claymore94
2021-03-19 10:18:20 +08:00
这样,容器的 entrypoint 可以是一个 sh 脚本,脚本最后 supervisord -c /etc/supervisord.conf, /usr/bin/tail -f /dev/null,容器不退出就可以了,方式有很多
ljhrot
2021-03-19 10:26:37 +08:00
当你为了容器化而容器化的时候,各种各样的问题就会接踵而来,在不知不觉投入的成本已经超过了容器化带来的好处
Tink
2021-03-19 10:35:29 +08:00
@zhoudaiyu 你只要保证容器不死就行了对不,container 启动脚本你先启动你要用的进程,然后再起一个不死进程就行了
CallMeReznov
2021-03-19 10:35:50 +08:00
不多说,一张图
coderxy
2021-03-19 11:50:04 +08:00
这不是 k8s 的要求,这是 docker 的要求。
gesse
2021-03-19 13:01:02 +08:00
container 里用 supervisor 是什么操作? supervisor 的每一个子进程都需要单独放入一个容器做前台进程。
zhoudaiyu
2021-03-19 13:05:22 +08:00
@gesse 需要多进程
gesse
2021-03-19 13:11:04 +08:00
@zhoudaiyu
那不是应该开启多个容器吗?

如果牵涉到非网络进程间通信,那就是一个前端进程开启多个子进程。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/763043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX