pod是怎么来的?

用4000多字说明 容器、Pod 到底是什么?

字面上,“Container”这个词很难让人形象地理解其真正含义,Kubernetes 中的“Pod”也是如此。

仅凭几句解释并不能充分认识这些概念,甚至还会引起误解,譬如把容器与轻量化虚拟机混为一谈。

为了尽可能深入理解容器,我们从最原始的文件系统隔离讲起。

1 、文件系统隔离

1979年,Unix 系统引入了一个革命性的技术 —— chroot(chang root)。

chroot 允许管理员将进程的根目录锁定在指定的位置,从而限制该进程访问的文件系统范围。chroot 的隔离能力对安全性至关重要,比如创建一个隔离环境,用来安全地运行和监控可疑的代码或者程序,因此 chroot 之后的环境也被形象地称为jail(监狱)。

仅需几步,就能创建一个 chroot 环境。


$ mkdir -p new-root/{bin,lib64,root}
$ cp /bin/bash new-root/bin
$ cp /lib64/{ld-linux-x86-64.so*,libc.so*,libdl.so.2,libreadline.so*,libtinfo.so*} new-root/lib64
$ sudo chroot new-root

这个 jail 用处不大,只有 bash 以及一些内置的函数,但也足以说明它的作用“运行在此 jail 下进程的文件系统与宿主机隔离了”。


bash-4.2# cd bin 
bash-4.2# pwd
/bin

我们再运行一个 docker,看看两者之间的区别。


$ docker run -t -i ubuntu:18.04 /bin/bash

root@028f46a5b7db:/# cd bin
root@028f46a5b7db:/bin# pwd
/bin

看起来跟 chroot 差不多,也是一个与宿主机隔离的文件系统环境,那这是否意味着 chroot 就是容器了呢?

肯定不是,chroot 只是改变了根目录,而非创建了真正的独立隔离、安全的环境,chroot 内的进程通过几行代码就能从当前的 jail 中逃逸,而且文件系统、网络、设备等等都没有被充分隔离。

2、 资源全方位隔离

chroot 最初的目的是为了实现文件的隔离,并非为了容器而设计。