如何理解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容器

 

posted @ 2018-12-21 19:07  fengzhihai  阅读(698)  评论(0编辑  收藏  举报