Pod
为什么需要使用 Pod 包含容器而不是直接使用容器
对于一个由多个进程组成的应用程序,无论使用IPC进程间通信,还是本地存储文件进行通信,都要求这些进程位于同一台极其上。 如果在单个容器中运行多个不相关的进程时,会存在下述问题:
- 主进程是正常运行的而其他进程的异常,则无法让 Docker 识别为崩溃的容器,从而触发自动重启机制。
- 单个容器中运行的进程都将记录到相同的标准输出中,这将很难确定每个进程分别输出了什么。
考虑上述实践过程中发现的问题,Docker 与 Kubernetes 将容器设计为每个容器只运行一个进程(除非进程本身产生子进程)
。
正是由于不能将多个进程聚集在一个单独的容器中,才需要一种更为高级的结构来将容器绑定在一起,并将其作为一个单元进行管理,这就是 Pod 的本质。
通过在 Pod 中下同时运行一些密切相关的进程,并为它们提供几乎相同的环境,在保证一定的隔离的情况下,使得这些进程仿佛全部运行于单个容器中。
既利用了容器所提供的特性,同时又使得这些进程仿佛全部运行同个容器中一样,近乎完美的结局了这个问题。
Kubernetes 通过配置 Docker 来让一个 Pod 内的所有容器共享相同的 Linux 命名空间,而不是每个容器都有自己的一组命名空间。 由于一个 Pod 中的所有容器都在相同的 network、IPC 命名空间 和 Linux 命名空间下运行,所以这些容器共享相同的主机名、网络接口以及能够通过IPC进行通信。