在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元。
什么是Pod
一个Pod相当于一个共享的context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
对Pod的context层面来理解的话,可以理解成多个Linux命名空间的联合
- PID 命名空间(同一个Pod中应用可以看到其他进程)
- 网络 命名空间(同一个Pod中的应用对相同的IP地址和端口有访问权限)
- IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)
- UTS 命名空间(同一个Pod中的应用共享一个主机名称)
同一个Pod中的应用可以共享磁盘,磁盘是Pod级的,应用可以通过文件系统调用,额外的,一个Pod可能定义顶级的cgroup隔离,这样的话绑定到任何一个应用。由于docker的架构,一个Pod是有多个相关的且共享磁盘的容器组成,PID的命名空间共享还没有应用到Docker中。和相互独立的容器一样,Pod是一种相对短暂的存在,而不是持久存在的,正如我们在Pod的生命周期中提到的,Pod被安排到节点上,并且保持在这个节点上知道被终止(根据重启的设定)或者被删除,当一个节点死掉之后,上面的所有Pod均会被删除。测试的Pod永远不会被转移到其他的节点,作为替代,他们必须被replace。
根据上面所提到的这些,简单总结来说:
- Pod是kubernetes集群中最小的部署和管理的基本单元,协同寻址,协同调度。
- Pod是一个或多个容器的集合,是一个或一组服务(进程)