Pod 是 Kubernetes 应用程序的基本执行单元,即它是 Kubernetes 对象模型中创建或部署的最小和最简单的单元。
Pod 封装了应用程序容器(或者在某些情况下封装多个容器)、存储资源、唯一网络 IP 以及控制容器应该如何运行的选项。 Pod 表示部署单元:Kubernetes 中应用程序的单个实例,它可能由单个 容器 或少量紧密耦合并共享资源的容器组成。
Pod 为其组成容器提供了两种共享资源:网络 和 存储。
每个 Pod 分配一个唯一的 IP 地址。 Pod 中的每个容器共享网络命名空间,包括 IP 地址和网络端口。 Pod 内的容器 可以使用 localhost 互相通信。 当 Pod 中的容器与 Pod 之外 的实体通信时,它们必须协调如何使用共享的网络资源(例如端口)。
一个 Pod 可以指定一组共享存储卷。 Pod 中的所有容器都可以访问共享卷,允许这些容器共享数据。 卷还允许 Pod 中的持久数据保留下来,以防其中的容器需要重新启动。 有关 Kubernetes 如何在 Pod 中实现共享存储的更多信息,请参考卷。
Pod 是 cloud native 形式中对『多进程』的抽象模型,这个抽象简化了应用程序的部署和调度,管理。
pod 内的容器拥有相同的 network namespace,可以通过 localhost 或者本地 socket 通讯,容器之间可以通过内部定义的共享存储卷来共享数据
举一个简单的例子:
在日志采集的需求下,如果用容器中多进程的模型的话,那么我们需要在每个需要采集日志的容器中运行 log collector process 来采集日志,上报给类似于 ELK 的系统,而使用多容器的模型,我们可以将 log collector 单独做成一个 container,使用 sidecar 的形式于业务容器运行在一起,不侵入业务容器,而且 log collector 可以复用