Pod中的基础容器
Last updated
Was this helpful?
Last updated
Was this helpful?
Kubernetes 中以 Pod 为最小的不可分割单元,而 Pod 又是容器的集合。
通常情况下,我们在创建 Pod 时,可以指定其包含的一个或多个容器定义,不同的容器之间可以共享命名空间(通常情况下,默认共享网络命名空间)。
在 Pod 中会有一个基础容器 (pause),被称为 Pod infrastructure container,所以当用户创建包含 1 个容器的 Pod 时,实际该 Pod 创建了 2 个容器。
一个 Pod 中的其他容器(业务容器)与基础容器默认情况下共享网络命名空间和IPC命名空间,在新版 Kubernetes 中可以通过指定 pod.spec.shareProcessNamespace=true
令其与基础容器共享PID命名空间。
基础容器与业务容器共享命名空间主要有以下两个作用:
为所有业务容器提供命名空间基础;
管理业务容器中的进程,接管僵尸进程(开启了 pod.spec.shareProcessNamespace
的情况下);
为何要提供命名空间基础?
因为当业务容器由于某些原因运行失败或退出时,Pod 需要将该容器重启并重新提供服务,但是容器重启后,网络等信息会重新申请并更新,因此这里令其使用基础容器的网络命名空间,因为基础容器的生命周期是与 Pod 一致的,因此业务容器无论如何重启,都可以使用与原来一致的网络信息。
如何管理进程?
由于 Pod 在启动时,会先启动基础容器,即 pause 容器,该容器中仅运行一个程序,即 /pause
,该程序会一直循环查找是否有需要其回收的僵尸进程。
当启动完基础容器后,再启动业务容器,此时业务容器中的所有进程都是 /pause
的子进程,也就实现了基础容器管理进程的功能。