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

分析维度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>
常用选项

1)ro:只读挂载

2)remount:将已挂载的目录重新挂载

3)rbind:递归挂载,如果挂载的olddir内有挂载点,会把这个挂载点也一起挂载到newdir下

1)lowerdir=xxx:指定用户需要挂载的lower层目录(containerd场景下一般最大支持128层);
2)upperdir=xxx:指定用户需要挂载的upper层目录;
3)workdir=xxx:指定文件系统的工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见;
4)default_permissions:功能未使用;
5)redirect_dir=on/off:默认关闭
6)index=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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值