Pod概念源自谷歌内部Borg集群管理系统。Borg在设计中发现,一些应用程序之间存在密切的协作关系,这将它们部署在同一台主机上。例如,某个服务由两个程序组成,这两个程序通过UNIX套接字文件进行通信。如果将它们部署在不同主机上,那么将无法访问UNIX套接字文件,从而导致无法正常工作。如果将这两个程序容器化部署,并且每个程序都运行各自的容器,那么在集群中会面临同样的问题。Pod的引入巧妙地解决了这一难题,通过在Pod中定义这两个容器,它们始终会运行在同一节点上,在节点级别可以轻松实现各种文件的共享。
这类容器之间的关系可以被称为“密切协作关系”,具有以下特征:
容器之间需要进行文件交互,如数据文件、UNIX套接字文件等。
容器之间需要进行网络通信,如使用本地回环地址(127.0.0.1)访问对方。
容器之间访问频繁,期望提高访问性能。
这并不意味着所有具备这种“关系”的容器都必须被定义在同一个Pod中。例如,一个网站由Web服务和数据库服务组成,尽管Web服务经常调用数据库服务进行读写数据,但并非必须被部署在同一节点上,更适合分别运行在两个独立的Pod中。