容器本质上是一个进程,是一个视图被隔离,资源受限制的进程,容器里面PID=1的进程就是应用自己,这意味着管理容器等同于直接管理应用自己,这是一种不可变设施的理念,即你的应用就等同于你的基础设施,它必定是不可变的。网络
Pod其实是kubernetes 中抽象出来的一个进程组,因为容器之间本来是被Linux Namespace 和 cgroups隔离开的,因此 Pod 所要面对的问题是如何去打破这个隔离,而后共享某些资源,这也是Pod设计中要解决的核心难题。所须要共享资源分为两个部分:网络 和 存储。spa
第一个问题是,Pod里面的多个容器如何去共享网络?kubernetes 提供了这样的解决方案:它会在每一个Pod里面,额外起一个Infra container 小容器来共享整个Pod里面的Network Namespace,因此在一个Pod里面的全部容器,它们看到的网络视图是彻底同样的。设计
第二个问题即是存储。Pod 中容器之间共享存储是很是简单的,这得益于kubernetes 的Volume机制,关键的是kubernetes把Volume变成了Pod level,因此同属于一个Pod的容器,它们共享全部的Volume。进程