首页 新闻 会员 周边

Pod 内部的所有容器共享同一个 PID 命名空间,​共享pid命名空间是啥意思

0
[已关闭问题] 关闭于 2026-06-21 14:47

1. 什么是 PID 命名空间?
在 Linux 系统中,PID(Process ID,进程号)是每个运行程序的唯一身份证。
● 默认情况(隔离):在标准的容器技术(如 Docker)中,每个容器都有自己独立的 PID 命名空间。这意味着,容器 A 里有一个 PID=1 的进程,容器 B 里也有一个 PID=1 的进程。它们互相看不见,互相不知道对方的存在,就像住在不同房间里的两个人,各自管自己的房间。

2. 什么是“共享” PID 命名空间?
在 Kubernetes 中,一个 Pod 里的所有容器被强制要求共享同一个 PID 命名空间。这就好比拆掉了房间之间的墙,把几个容器放进了同一个大房间(大沙盒)里。
在这个大房间里:
● PID 全局唯一:不再有两个 PID=1 的进程。整个 Pod 只有一个 PID=1,那就是我们之前提到的 pause 容器。
● 互相可见:容器 A 里的进程可以清楚地看到容器 B 里的进程,并且它们拥有各自真实的、全局递增的 PID(比如 2, 3, 4...)。

pause  容器作为 PID=1 的主进程,可以接管并回收整个 Pod 内所有容器产生的“僵尸进程”,防止系统资源泄漏。

那pod里面的各个容器的cmd的进程呢?对于每一个具体的业务容器(比如 Nginx 容器、Java 容器),你在 Dockerfile 或 K8s YAML 中配置的  CMD  或  command ,就是这个容器内部的主进程(PID=1), 从“整个 Pod”的视角来看:不是,它们只是“子进程”,

只有 pause 容器是绝对的“老大”(PID=1)。
● 各个容器的 CMD 进程,在这个共享的 PID 命名空间中,其实是 pause 进程的子进程(PID 可能是 2, 3, 4... 等等)。

一句话概括:
在整个 Pod 的底层架构中, pause  是主进程;但在每个容器的业务逻辑中, CMD  是主进程。

*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1802
提问于:2026-06-21 14:46
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册