如何理解pod
在k8s的世界里,经常遇见pod这一概念,你可能知道个大概,它是存在于k8s里最小的api对象,是最小的调度单位,它由多个容器组成,但它存在的具体意思,你说的清吗。
镜像类似于“.exe“的可执行文件,容器相当于可执行文件运行起来后的进程,而k8s可以理解为:操作系统。
有许多应用在运行的时候都会有多个进程在跑,同时由于socket通信和文件交换等,linux本身也有进程组的概念,假如现在我们没有pod一说,但还想运行这个应用应该怎么做呢。
方法一、我们可以将这些进程运行在同一个容器中,有一个PID=1的主进程就行了,但子进程挂掉的时候,你怎么知道呢
方法二、将这些进程单独做成容器,跑在同一台上,假如你跑了其中的5个进程,此时节点机上已经没有内存资源了,剩下的内存又必须跑着这台服务器上,那程序该怎样运行呢。
但有了pod后,这种问题就很好解决了,可以统一按照pod而非容器的资源进行计算的。
pod的本质:一组共享了某些资源的容器,pod里面所有的容器共享的是同一个network namespace,同时可以声明共享同一个volume。pod的实现需要使用一个中间容器,这个容器
叫做infra容器,它永远是pod中第一个被创建的容器,其它定义的容器都是通过join network namespace的方式,与infra容器关联在一起的,关联图见下:
在k8s里,这个infra使用的是一个特殊的镜像,叫pause镜像,用于处于”暂停“状态的容器,解压后的大小也只有100~200KB.
他们可以直接使用localhost进行通信
他们的网络设备和infra容器一样
pod的生命周期只和infra容器有关,和该pod中别的容器无关
流量进出都是通过infra容器