首页 > 其他分享 >Containerd是如何存放容器镜像和数据的--overlayfs

Containerd是如何存放容器镜像和数据的--overlayfs

时间:2023-02-28 22:32:50浏览次数:45  
标签:upper -- Containerd overlayfs io containerd 镜像 目录

overlayfs是内核支持的文件系统,具体可参考​​overlayfs in kernel​​文档中的解释。overlaylfs是文件系统之上的文件系统。可以称之为上层文件系统。了解虚拟化的同学应该了解underly网络和overlay网络。所谓overlay网络也就是在物理网络基础上虚一个网络平面出来。Overlayfs 既然是上层文件系统,他就不需要直接和磁盘等存储系统进行交互,他就直接和其他文件系统交互就行了。

Mount -t overlay overlay -o lowerdir=/low1,low2,low3,upperdir=/upper,workdir=/work  merged_dir

命令把多个目录整合成一个目录。用户添加和更新、删除的文本都存放在upper目录中。而lowder是只读的。work 目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见。merged_dir则是把upper目录和lowerer目录合并,这个合并规则就是overlayfs要实现的逻辑。新增文件写入uppder目录。Workerdir删除文件需要记录一个标记.Low1 、low2 、low3、upper优先级逐步提高,如果存在同名同目录文件,以优先级高的为本。修改low目录中文件,则需要拷贝一份low目录文件到upper层。然后修改。此处会导致第一次拷贝慢。

Containerd是如何存放容器镜像和数据的--overlayfs_Containerd

lower层:拉镜像解压而成,只读

upper层:创建容器时生成,可写层

containerd中的overlayfs 原理

1)在containerd中,用户pull拉镜像时,会返回多个层(layer),这些层都是压缩文件。containerd会把这些压缩文件解压然后存到/var/lib/containerd/io.containerd.snapshooter.v1.overlay中(lowder)。io.containerd.snapshotter.v1.overlayfs中对应的是layer解压后的文件夹。我们看到这些文件夹以1、2、3等命名。镜像对应的层文件夹都是只读的。

2)容器启动时,在/var/lib/containerd/io.containerd.snapshooter.v1.overlay创建一个读写目录,也就是所谓的upper层。

Containerd的配置文件中有如下两个配置:

cat /etc/containerd/config.toml

root = "/var/lib/containerd"

state = "/run/containerd"

root配置的目录是用来保存持久化数据的目录,包括​​content​​, ​​snapshot​​, ​​metadata​​和​​runtime​​。

state配置的目录是用来保存运行时数据。

pull镜像时,镜像对应的config、index、layer、manifest都存储在/var/lib/containerd/io.containerd.content.v1.content/blob/sha256中。index和manifest可以直接用cat命令查看,layer文件可以用tar解压缩。因此content中保存的是config, manifest, tar文件是OCI镜像标准的那套东西。(镜像存放在/var/lib/containerd/io.containerd.content.v1.content/blob/sha256中)

启动镜像后,会在目录/run/containerd/io.containerd.runtime.v2.task/k8s.io/和/var/run/containerd/io.containerd.runtime.v2.task/k8s.io下面生成一个$CONTAINER ID的文件夹,这个目录就是overlayfs 中merge目录。

验证overlayfs文件系统挂载
mount |grep overlayfs

标签:upper,--,Containerd,overlayfs,io,containerd,镜像,目录
From: https://blog.51cto.com/u_11791718/6091847

相关文章

  • 2-28
    #include<stdio.h>voidmain(){ /* charnum[10];//第四 charmi[10]; scanf("%s",num); scanf("%s",mi); printf("%s\t",num); printf("%s\n",mi); */ //charnu......
  • 网络原理4
    实验总结实验一配置实验环境同种设备用交叉线,异种设备用直通线(路由器和PC机是同种设备)配置PC1IP为192.168.1.2网关为192.168.1.1配置PC2IP为192.168.1.3网关为192.168.1.1......
  • Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
    技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平......
  • 关于在接入交换机上配置静态路由
    近期,在一台二层的接入交换机上看到了一条缺省的静态路由:iproute0.0.0.00.0.0.0192.168.1.1已知,该接入交换机有一个管理接口,管理IP为192.168.1.10/24经实验发现,这条缺省......
  • 2023.2.28周二每日总结
    今天下午的课上学习了python的一些基础,知道了python中存储数据的方法,即每个数据存在一个独特的地址不需要提前申请变量,包裹一些列表的乘法是怎么分配的,并且进一步学习了ja......
  • LeetCode 84. 柱状图中最大的矩形()
    原题解题目约束题解方法一classSolution{public:intlargestRectangleArea(vector<int>&heights){intn=heights.size();vec......
  • Oracle 求当前日期是周几--to_char()
    Oracle求当前日期是周几--to_char()大概就是下面这种方法to_char(date,'D')Selectto_char(date,'ss')fromdual取当前时间秒部分Selectto_char(date,'mi')fromd......
  • ics-05
    挺有意思的一题攻防世界->web->ics-05打开题目链接,就是一个很正常的管理系统,只有左侧的可以点着玩并且点到**设备维护中心时,页面变为index.php查看响应发现云平台设......
  • ClickHouse(13)ClickHouse合并树MergeTree家族表引擎之CollapsingMergeTree详细解析
    目录建表折叠数据算法资料分享参考文章该引擎继承于MergeTree,并在数据块合并算法中添加了折叠行的逻辑。CollapsingMergeTree会异步的删除(折叠)这些除了特定列Sign有1和-1......
  • VScode+Markdown+PicGo
    在Vscode上写Markdown代码,并且用PicGo上传图片。以下内容有Markdown插件OfficeViewer,所见即所得。注意此插件的编辑模式下不能使用PicGo扩展,只有VS的普......