Pod和Docker

2020-09-15  本文已影响0人  小圆圈Belen

学习了这篇文章:https://blog.csdn.net/i042416/article/details/85259003
大佬就是大佬,讲的很清楚。

为什么Kubernetes要引入pod的概念,而不直接操作Docker容器

首先我们要明确一个概念,Kubernetes并不是只支持Docker这一个容器运行时,通过我的另一篇文章什么是Kubernetes的CRI-容器运行时接口介绍的内容,我们知道Kubernetes通过CRI这个抽象层,支持除Docker之外的其他容器运行时,比如rkt甚至支持客户自定义容器运行时。

这个问题不易回答的原因,是因为包含了这一组业务容器的逻辑单元,没有一个统一的办法来代表整个容器组的状态,这就是Kubernetes引入pod的概念,并且每个pod里都有一个Kubernetes系统自带的pause容器的原因,通过引入pause这个与业务无关并且作用类似于Linux操作系统守护进程的Kubernetes系统标准容器,以pause容器的状态来代表整个容器组的状态。


Kubernetes里的每个pod都有唯一的IP地址。Pod的IP地址可以通过命令kubectl describe pod来查看:


这个IP地址用来支持Kubernetes的底层网络借助Flannel,openswitch等虚拟二层网络技术来实现集群内任意两个pod之间的TCP/IP通信。也就是说,一个Pod内的容器与另外主机的pod容器能够直接通信。

Pod被创建后,会被Kubernetes master调度到某个具体的node上进行绑定:



上图中蓝色高亮区域代表的就是这个被观察的pod被分配到的node的名称。

pod和node绑定之后,node上的kubelet进程会对pod进行初始化操作,启动相关的Docker容器。

上图红色区域显示了Docker容器从正在从远端pull镜像,到pull完成,到创建Docker容器运行实例,到最终启动实例的状态迁移过程。

上一篇下一篇

猜你喜欢

热点阅读