【容器运行时进阶系列】containerd的bind mount与overlay的使用场景分析对比

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
分析维度bind mountoverlay2
定义从属于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
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“【容器运行时进阶系列】containerd的bind mount与overlay的使用场景分析对比” 的相关文章