首先,Pod 是 K8s 调度的最小单元,为什么是 Pod 而不是容器作为最小调度单元呢?其实是为了解决容器的可管理性和资源共享问题。
1、可管理性
前面有提到,一个 Pod 可包含一个或多个容器,Pod 中的容器会被作为最小调度单元被 Master 调度到 K8s 集群中的 Node 节点上运行。既然一个 Pod 可包含多个容器,那对于那些联系紧密的容器就更易于管理,因为我们可以将这些联系紧密的容器封装到一个 Pod 单元中,然后 K8s 就可以进行统一调度了。
2、容器通信及资源共享
Pod 中的所有容器共享同一资源(同一个网络 namespace),即相同的 IP:Port
空间,它们可直接以 localhost
的方式通信。当 K8s 挂载 Volume 到 Pod 时,实际就是将 Volume 挂载到 Pod 中的每个容器上(因为它们资源共享),如下图所示:
整体流程:
- Pod 中包含两个容器,分别是
Container-A
、Container-B
; Container-A
定期从外部Resources
获取资源,然后将资源存放在共享Volume
中;Container-B
从共享Volume
中读取资源,并响应Request
的请求。