【容器运行时进阶系列】containerd的bind mount与overlay的使用场景分析对比
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
分析维度 | bind mount | overlay2 |
定义 | 从属于mount命令简单来说就是挂载一个已有的文件夹 | 联合文件系统解决方案 |
使用方式 | mount --bind <olddir> <newdir> 绑定后的两个目录类似于硬链接 mount -o remount,ro,bind <olddir> <newdir> 如果olddir是一个挂载点则 | mount -t overlay overlay -o lowerdir=<lower1-dir>:<lower2-dir>:<lower3-dir>,upperdir=<upper-dir>,workdir=<work-dir> <merged-dir> |
常用选项 | 1ro只读挂载 2remount将已挂载的目录重新挂载 3rbind递归挂载如果挂载的olddir内有挂载点会把这个挂载点也一起挂载到newdir下 | 1lowerdir=xxx指定用户需要挂载的lower层目录containerd场景下一般最大支持128层 2upperdir=xxx指定用户需要挂载的upper层目录 3workdir=xxx指定文件系统的工作基础目录挂载后内容会被清空且在使用过程中其内容用户不可见 4default_permissions功能未使用 5redirect_dir=on/off默认关闭 6index=on/off开启或关闭index特性开启后可避免hardlink copyup broken问题。默认关闭 |
containerd中使用场景 | 1主要用于Runc容器的挂卷场景包括host-path、/etc/hosts等文件 2当容器镜像只有一层的时候也会使用bind mount挂载 | 主要用于容器镜像挂载最终都挂载到bundle目录下的rootfs目录因此不用自行设置target |
containerd使用形式 | { "type": "bind", "source": "/path/on/host", "target": "/path/inside/container", "options": [ "ro", "rbind" ] } containerd对该挂载点对象的描述来自github.com/opencontainers/image-spec/specs-go/v1中的OCI规范定义 | { "type": "overlay", "source": "overlay", "options": [ "workdir=...", "upperdir=...", "lowerdir=..." ] } containerd对该挂载点对象的定义在mount/mount.go文件中 |
介绍 | 具体描述见containerd/docs/snapshotters at main · containerd/containerd · GitHub | |
约束 | overlay2最好搭配 xfs 文件系统使用并且使用 xfs 作为底层文件系统时d_type必须开启 | |
其他用途/拓展知识 | 1将一个目录创建一个挂载点通过mount命令可查看 mount --bind foo foo 然后就可以对这个目录增加一些mount选项 mount -o remount,bind,ro foo 2如果olddir是挂载点则bind mount后源和目的挂载点将属于相同peer group创建新mount NS时。新老NS中相同挂载点属于同一个peer group 3每个挂载点可以设置4种propagation type传播属性 mount --make-shared mountpoint mount --make-slave mountpoint mount --make-private mountpoint mount --make-unbindable mountpoint MS_SHARED: 相同peer group中所有挂载点下面的挂载信息共享改动同步 MS_PRIVATE挂载点配置后不属于任何peer group挂载信息不共享 MS_SLAVE相同peer group中只有slave挂载点跟随master挂载点变化挂载信息传播是单向的 MS_UNBINDABLE配置后挂载点不能作为bind mount的源 默认情况下子挂载点会继承父挂载点的propagation type | |
深入了解文章 | linux的mount bind命令_langb2014的博客-CSDN博客_mount: /dev/loop0 is write-protected, mounting rea | 深入理解overlayfs二使用与原理分析_luckyapple1028的博客-CSDN博客_overlayfs:/overlay |