containerd存储驱动一探究竟
番外篇,简单讲讲容器镜像的存储驱动,为简单演示,以 overlay 存储驱动为例。
可以通过 Linux kennel
查看 Overlay Filesystem
的相关明细介绍,以下内容主要以演示为主,加深理解,且此内容的理解是对后续 Containerd
中 Snapshotter Service`` 和
DiffApplier Service` 必备的基础。
模拟
[1-1] 模拟已经存在一个 layer 包含单一文件 file_a
的 snapshot
。
1 | mkdir -p /tmp/a/1/fs |
[1-2] 如若这个时候接收到再创建 layer
的请求,具体内容如下:
1 | mkdir -p /tmp/a/2/fs |
[1-3] 此时存储驱动 overlay
将进行如下处理,且将最终序列化好的 mount
进行返回,表意如下:
1 | Type: Overlay |
[1-1…1-3]逻辑处理在 containerd
服务中,通过 Snapshotter Service
处理。
[2-1] mount
挂载模拟
1 | mkdir /tmp/mount |
查看挂载点 mount
:
1 | [root@k8s-slave tmp]# tree mount/ |
[2-2] 添加测试文件 file_b
1 | touch /mount/file_b |
由于 upperdir
配置为 /tmp/a/2/fs
,验证 file_b
的位置:
1 | [root@k8s-slave tmp]# ls -al a/2/fs/ |
同时请注意关于 file_a
的描述,其实这代表着对于上一层的 COMMIT
。
[2-1…2-2] 逻辑处理在 containerd
服务中,通过 DiffAplier Service
处理。
[3-1] 对 mount
进行挂载点的卸载,看看 file_b
文件的真实添加位置。
1 | umount overlay |
在 overlay mount如果再加一层 layer的话,该如何处理,感兴趣的可以自己模拟下看看最终表现。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kirago杂谈!