POD是什么?
pod是Kubernetes项目中最小的API对象,也可说是Kubernetes项目中的原子调度单位。在通俗的概念里,pod是一个容器池,在这个池子里我们可以运行很多个容器,看起来就像虚拟机里可以运行很多服务一样。但在本质上,pod跟虚拟机几乎没有任何相似之处。为什么这样说呢?还要从容器的原理来看,毕竟pod中是运行了一个或多个容器的“组合”。
容器原理
容器其实是一种沙盒技术。顾名思义,沙盒就像是一个箱子一样,把我们所写的应用装起来。这样,不同箱子里的应用会因为有箱子边界的限制而互不干扰,我们可以将其“搬到”任何宿主机上随意运行。这种边界技术的实现得益于Linux系统的Cgroup和Namespace技术。具体例子如下:
#我们在宿主机上运行一个容器
docker run -it busybox /bin/sh
#这时我们进入了容器中,查看一下容器中的进程
ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
10 root 0:00 ps
从以上代码可以看出,当我们运行容器的时候,容器最先运行的进程是/bin/sh,它是容器的1号进程,而且这个容器里面只有两个进程,这与我们在宿主机中看到的情况是截然不同的,这就说明这个容器的环境已经与宿主机的环境完全隔离开了。这是怎样实现的呢?其实如果这时你重新打开一个shell查看宿主机上的ps 进程就会发现,我们进入容器的exec命令在宿主机上的pid跟容器内的pid是不一样的,这是因为我们要通过 Docker 把这个 /bin/sh 程序运行在一个容器当中时,docker会使用namespace技术重新计算进程的编