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

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

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

4654 次点击
所在节点    Kubernetes
50 条回复
napsterwu
2021-03-19 13:44:41 +08:00
所以有时候有人用 tail -f /dev/null
zhoudaiyu
2021-03-19 14:11:47 +08:00
@gesse 如果说多容器的话,我想随时启停某个容器是不是不是很好做
HarrisonZ
2021-03-19 14:14:06 +08:00
看看容器基础,还有能不能不要一提容器就是 docker,docker 只是降低了容器技术的门槛,做的易用了而已
zhoudaiyu
2021-03-19 14:21:40 +08:00
@HarrisonZ 我没有提 docker 啊
killva4624
2021-03-19 17:43:58 +08:00
我的理解:K8S 的设计就是为了解决容器生命周期问题。"主进程即容器"这样的概念可以把主进程精确到单个容器的颗粒度来管理。换句话说,如果你想在容器里跑后台进程,那么就需要另外一套机制来确保后台进程的生命周期(比如怎么启动后台进程,怎么确保后台进程存活),用 supervisor 或者 systemd 之类大部分是非云原生系统上云时候的过渡方案(又不想花精力做微服务拆分,又想容器化)。
阿里还专门弄了个富容器的概念,也是盯准了有这类需求的客户。

https://www.v2ex.com/t/454943
https://www.jianshu.com/p/d7dbeffc2dff

从技术的角度,我不喜欢这种做法,非常别扭。但从商业角度来看,是一种很 lazy 又讨巧的上云方案。
wxsm
2021-03-19 17:47:33 +08:00
你完全可以用 nohup 将某些进程后台运行,只要保证有一个进程前台运行即可,当然容器的健康与否只会关注前台进程,后台进程出现的问题自理。
GM
2021-03-19 17:49:04 +08:00
@whileFalse 并不算滥用,有些情况下很方便的。
rrfeng
2021-03-19 17:50:44 +08:00
容器 == 一个具有隔离空间的进程
进程结束 == 容器死亡

这没什么好争的。
killva4624
2021-03-19 17:51:46 +08:00
P 个 S:比如 C++ 里 MCP 框架用共享内存做 MQ 这种玩意……
0312birdzhang
2021-03-19 19:51:21 +08:00
一个 pod 里面可以有多个容器
ospider
2021-03-19 23:07:19 +08:00
Container 本身就是 Process Container 的缩写,是为一个进程创建的隔离环境。Process 之不存,Container 将焉附?

打个比方,进程好比人,容器好比一条裤子。人穿上裤子,裤子就跟着站了起来。离了人,裤子当然自己不可能自己站起来了。同时,如果我们看到裤子摊在地上,那可以知道里面一定没藏着人。你在容器里面跑 supervisord / nohup / systemd 这种操作就相当于拿根棍子把裤子强行撑了起来,可能你看着裤子站着呢,但是里面的人已经挂了。

如果想运行多个进程,docker-compose 不香么?
lfzyx
2021-03-19 23:32:53 +08:00
为啥不招个 devops 做这事呢
ch2
2021-03-20 02:27:33 +08:00
docker 的本质是一个或者一组进程,如果所有进程都死了,docker 本身也没有存续的必要了
raven2019
2021-03-20 16:40:56 +08:00
对于一个 java 进程的容器,想要方便的通过 ssh 远程登录上去,除了在容器里通过 supervisord 启动一个 sshd 进程,还有其他方式吗
kitthsu
2021-03-20 18:07:34 +08:00
@raven2019 用 k8s 的 exec 代理
loveyu
2021-03-20 20:42:43 +08:00
PHP 用 supervisor 上云就挺好的
bemyself
2021-03-21 13:43:30 +08:00
@loveyu supervisor 用来做什么
loveyu
2021-03-22 08:44:44 +08:00
@bemyself Nginx+php-fpm
whileFalse
2021-03-22 09:18:32 +08:00
@raven2019 “通过 SSH 登陆容器”就不是正常方式。
whileFalse
2021-03-22 09:21:38 +08:00
@GM 你当然可以举出一个“在容器中使用 Supervisor 很方便”的场景。
但容器就不是为你的这个场景设计的,所以这种用法也必然会带来不方便的地方。

如果又要用 supervisor,又难以承受带来的不便(像 lz 这样),那就叫滥用。

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

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

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

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

© 2021 V2EX