11 | 容器文件系统:我在容器中读写文件怎么变慢了?
该思维导图由 AI 生成,仅供参考
问题再现
- 深入了解
- 翻译
- 解释
- 总结
文章介绍了在升级宿主机操作系统后,容器中文件读写性能下降的问题,并详细讨论了OverlayFS作为一种UnionFS的实现方式。在Ubuntu 20.04上的容器中文件读写性能下降的问题引起了作者的关注,通过对比在不同版本的Ubuntu上运行容器的性能测试,发现在Ubuntu 20.04上的容器中文件读写性能只有Ubuntu 18.04的1/8左右。文章首先解释了容器文件系统的重要性,指出使用UnionFS可以有效减少磁盘上冗余的镜像数据,减少网络传输。然后详细介绍了OverlayFS的基本概念和使用方法,以及容器镜像文件中各层作为OverlayFS的lowerdir的目录,加上一个空的upperdir一起挂载后,就组成了容器的文件系统。文章还分析了在内核5.4中对异步I/O操作的缺失,以及在Linux内核5.6版本中通过补丁解决了这个问题。总的来说,本文深入浅出地介绍了容器文件系统和性能问题,适合技术人员快速了解容器文件系统和性能问题。
《容器实战高手课》,新⼈⾸单¥59
全部留言(19)
- 最新
- 精选
- 谢哈哈经过实验确认,只会在merge即联合挂载点里生成一个文件名,也就是说overlay文件系统为了省存储空间是做了同名文件合并优化的
作者回复: 赞!
2020-12-09213 - Geek3340老师提到的aufs,是完全被废弃吗?aufs的废弃是指在内核层的废弃吗?之前安装docker时,时可以配置使用aufs 还是overlay2,也就是说内核层还未完全去除对aufs的支持吗?
作者回复: aufs的代码从来就没有进入Linux内核的主干。
2020-12-1010 - 上邪忘川实验过程如下,结果是lower1目录中的文件覆盖了lower2中同名的文件。 [root@localhost ~]# cat overlay.sh #!/bin/bash umount ./merged rm upper lower1 lower2 merged work -r mkdir upper lower1 lower2 merged work echo "I'm from lower1!" > lower1/in_lower.txt echo "I'm from lower2!" > lower2/in_lower.txt echo "I'm from upper!" > upper/in_upper.txt # `in_both` is in both directories echo "I'm from lower1!" > lower1/in_both.txt echo "I'm from lower2!" > lower2/in_both.txt echo "I'm from upper!" > upper/in_both.txt sudo mount -t overlay overlay \ -o lowerdir=./lower1:./lower2,upperdir=./upper,workdir=./work \ ./merged [root@localhost ~]# sh overlay.sh [root@localhost ~]# cat merged/in_lower.txt I'm from lower1!
作者回复: @上邪忘川 很好的测试步骤。我再问一个问题,“merged/in_lower.txt ”里的值有可能是"I'm from lower2!"吗?
2020-12-1054 - Alery老师,假如我将一个卷(宿主机上的某个目录)挂在到容器文件系统中的某个目录,我在容器中对这个卷中的数据做读写操作,因为这个挂载路径也是容器文件系统的一部分,性能是不是也是会有影响的?
作者回复: 如果以volume的方式挂载到容器中,那么它就不是以overlayfs的文件系统。 性能是否影响要看volume目录的位置在哪个物理磁盘上,和它共享物理磁盘的有哪些读写进程。
2020-12-133 - 美美想和老师探讨一个非技术问题,老师对当前k8s和docker的相爱相杀有什么看法?老师觉得未来docker市场会被podman取代吗?如果会的话,这个过程大概要多久
作者回复: 容器云平台里,k8s肯定是主流,用了k8s, 基本就不需要要docker了,启动容器的程序肯定是越简单越好。 我们在2019年初就不用docker了。
2020-12-1023 - 流浪地球和老师探讨一个问题,本文中描述的现象,一个重要的原因是容器镜像里只有rootfs,没有linux内核,宿主机上的所有容器是共用宿主机内核的。所以,当宿主机内核版本升级后,容器镜像并没有相应的升级,也会产生这个问题,文中并没有对这个知识要点说明。不知道我的理解是否正确
作者回复: @流浪地球 容器镜像中只有rootfs没有Linux内核是对的。 在文章里,宿主机内核升级后,无论容器的镜像是否升级,都会有这个问题。文中的问题是overlayfs引起的,和镜像中的文件没有关系。
2020-12-0933 - 姜姜思考题: 我认为在多个lower之间出现同名文件,在merge中也是上层lower覆盖下层lower。 个人理解: “merge层”相当于提供给用户进行交互的视图层; “upper层”相当于存储实际发生变动的地方; “lower层”是不变的,用户通过merge层视图对lower层文件的所有操作,都被重定向到“upper层”了,特殊的是删除操作,会在upper层生成一个特殊的c类型的文件来代表该文件被删。 用户交互时只能对merge层的视图来操作。 在merge层的视图中,上层覆盖下层同名文件,上下关系不只是upper和lower之间,即便在多个lower层中,也是上层覆盖下层。 以上观点纯属我的猜测,因为还没来得及验证,如果有误请帮忙指出
作者回复: @姜姜 可以用文档中的脚本稍微修改一下,就可以验证了
2020-12-172 - 水蒸蛋老师,我没想通容器既然有内核文件为什么会依赖宿主机的内核,如果依赖宿主机内核那还要容器的内核干什么呢,这么多不同的linux版本难道内核版本都是一样的?
作者回复: @水蒸蛋 容器和宿主机是共享内核的。不通的Linux版本内核不一样。
2020-12-162 - 杨莉锋centos 7.3 容器节点tmpfs文件类型与 Overlayfs文件类型的区别
作者回复: tmpfs只是用来存放一些临时文件的内存文件系统,比如/tmp目录可以使用tmpfs。
2021-01-061 - Geek_c2089d老师,我想请教一个问题,就是已经创建的容器,怎么能新增一个挂载目录!
作者回复: 容器不像虚拟机,不能动态的挂载volume.
2020-12-2531