打包
前面我们有提到,在实际的系统运行中,进程并不是孤立存在的,而是进行协同工作的,例如 Web Server 和日志收集器。Web Server 将日志写入文件中,而日志收集器则不间断地从文件中读取日志并发送给外部日志收集系统。此时 Web Server 进程和日志收集进程就必须要共享同一个挂载命名空间
那么在进行容器调度时,假如 Web Server 需要 2G 内存空间,Log Collector 需要 100M 内存空间,Node-A 还有 2G 内存空间可用,Node-B 还有 3G 内存空间可用
这两个容器必须要被调度到同一个节点上,如果被调度到 Node-A,那么在调度剩下的一个容器时就会发现没有内存可用了。如果被调度到 Node-B,如果此时 Node-B 可用内存也变成了 2G 的话,同样会导致调度失败
这就是单一容器成组调度的问题,Kubernetes 通过引入 Pod 这一最小调度单位来解决这个问题,把两个容器打包成一个整体,然后按所有容器所需资源进行调度
管理多个容器
通过 Pod 对多个容器进行打包后,Pod 就可以对多个容器同时进行管理了,包括容器的启动顺序、容器运行崩溃后的重启,设置容器的网络配置、存储配置等等