本文主要是介绍pod的好处和坏处,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们知道,Docker容器使用了“Namespace隔离,Cgroup做资源限制,rootfs做文件系统”,那么为什么需要pod呢?pod是一组共享了某些资源的容器,是K8S中原子调度单位。
1,编排需要
我们在部署进程的时候,通常需要多个进程一起部署。这些进程之间通常需要互相配合,通常需要发生文件交换,本地通信,共享某些namespace等。所以我们对这些进程需要成组部署。但是如果没有pod对他们进行成组部署会出现下面这个问题。
例如,现在有3个进程共需要3GB内存,而现在有两个节点,分别是2.5GB和3GB。若不成组部署,则前两个进程可能会被部署到2.5GB的节点上,而第三个进程则发现这个节点已经没有足够的空间部署了。所以我们把这个三个进程打包成一个整体,则在部署更加直观快捷。
2,共享资源需要(网络,volume)
Pod里面的容器共享network Namespace网络资源,并且可以共同声明一个Volume。例如,A容器共享B容器的网络资源和volume,那么在docker中的思路是:我们需要先部署B容器,再部署A容器。所以A和B之间的关系成拓补关系。
而在我们Pod中,我们会在事先部署0号容器infra,而这个infra容器为其他后加入的容器提供网络资源,也就是说其他所有的容器都需要共享infra容器的网络。所有,后面加入的容器则无需拓补关系部署。
于是,A和B通信则可以直接使用locakhost,他们看到的网络设备和infra设备是一样的,一个pod也就只有一个IP地址。
同样的,共享volume也是利用这种思想。一个 Volume 对应的宿主机目录对于 Pod 来说就只有一个,Pod 里的容器只要声明 挂载这个 Volume,就一定可以共享这个 Volume 对应的宿主机目录。
3,容器设计模式,sidecar
sidecar是指我们在一个pod中,启动一个辅助容器,用来辅助主容器的其他工作。例如,一下这个读取保存日志的例子。
当A B两个进程共享同一个目录,A工作并且负责把日志输出到这个目录下,那么B则只需要读取日志并转发到数据库保存下来。所以,这里B就是我们所说的sidecar容器。
以上3点是我们需要pod的好处。
那么我们使用pod的有什么坏处呢???
pod只是一个逻辑概念,并不是真实存在的,它是一种编排技术。但是pod又有充当虚拟机角色的作用。所以,坏处就来了,pod不是真的虚拟机,所以它提供的pod之间隔离的效果实际上是利用linux namespace,cgroup rootfs技术,而不是真正的隔离和独享。
这篇关于pod的好处和坏处的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!