11. [containerd] content服务解析
创始人
2024-03-12 07:46:10
0

containerd的核心Layer层存储组件content,用于存储下载的layer层数据,大家知道镜像是分层架构,一个镜像可能有很多Layer层组成,通过各Layer堆叠形成最终的文件系统,供运行时组件调用。本节详细分析content组件。

一、content服务接口

type Store interface {ManagerProviderIngestManagerIngester
}

1.Manager用于Layer层数据的删改查,对应下面四个方法。Walk方法,是查询的一种,将过滤出来的content应用WalkFunc方法。最后一个查Info,并不是读取Layer层数据,而是获取其属性信息,包括文件大小、修改时间等。

Delete(ctx context.Context, dgst digest.Digest) error
Update(ctx context.Context, info Info, fieldpaths ...string) (Info, error)
Walk(ctx context.Context, fn WalkFunc, filters ...string) error
Info(ctx context.Context, dgst digest.Digest) (Info, error)	

2.Provider用户Layer层数据的查询。下面方法读取数据。

ReaderAt(ctx context.Context, desc ocispec.Descriptor) (ReaderAt, error)

3.IngestManager用于管理正在下载的Layer层数据,提供状态查询、中断等方法,上面两个方法是下载完成的Layer管理接口。

Status(ctx context.Context, ref string) (Status, error)
ListStatuses(ctx context.Context, filters ...string) ([]Status, error)
Abort(ctx context.Context, ref string) error

4.Ingester用于下载Layer层数据,提供数据存储服务。

Writer(ctx context.Context, opts ...WriterOpt) (Writer, error)

二、content组件设计

containerd以插件形式管理各个组件,content组件生效需要提供两个组件标识。

plugin.GRPCPlugin 将 content组件注册为GRPC服务,对外提供服务接口,ctr、crictl等客户端可以访问该服务。
plugin.ServicePlugin 将content组件注册为一个功能服务,提供Layer层存储服务。
plugin.MetadataPlugin 该组件是所有组件的元数据管理中心,用于存储各组件的管理数据。
plugin.ContentPlugin content组件的存储实现服务,真正实现存储逻辑的。

他们几个的关系:
1)客户端调用从GRPCPlugin组件访问Content服务,GRPCPlugin加载ServicePlugin并调用其提供的服务。
2)ServicePlugin 调用MetadataPlugin,调用其提供的服务。
3)MetadataPlugin 调用ContentPlugin,调用其提供的存储服务。

containerd的源代码在这方面确实有点混乱,这几个组件很多方法名称相同,连IDE也无法正确分辨。

三、ContentPlugin

1. 存储目录定义

定义存储结构,组件包含两类数据,一类是正在下载的临时目录,一类是下载完成、验证完成的Layer层真实存储目录。

1)下载完成的Layer层存储目录:/var/lib/containerd/io.containerd.content.v1.content/blobs
2)Layer层临时存储目录:/var/lib/containerd/io.containerd.content.v1.content/ingest

2. Layer层存储服务

2.1)获取Layer层下载的Writer句柄

IngesterWriter(ctx context.Context, opts ...WriterOpt) (Writer, error) 实现。

1)存储Layer层数据,传入该Layer层的唯一标识,以及根据Manifest获取的Desc信息,Desc信息包含期望下载的Digest。
2)ingest目录其{namespace/id/ref}文件夹下,定义两个子文件 ref文件、data文件,ref文件存储Layer层的唯一标识,data文件Layer层数据。
3) 根据data文件是否有内容,判断是重新写入还是接着上次的offset继续写入。将data文件的WriteIO句柄封装到返回值Writer服务中。

2.2)Writer服务

1)Writer数据写入服务,这个好理解,写入Layer层数据到data文件
2)Digest获取写入数据的Hash值
3)Status获取已经写入数据状态,包括写入Size、Offset,以及期望的Digest等。
4)Truncate文件内容清空,Reset文件的Offset等。
5)Commit通知文件写入完毕,可以进行后续处理,例如将ingest文件存储到blobs目录。

四、MetadataPlugin

客户端真正的访问顺序,从MetadataPluginContentPlugin,在调用ContentPlugin存储Layer数据前,需要MetadataPlugin 先行对元数据进行处理。

1. 存储

metadata存储数据库:bolt
metadata存储目录:/var/lib/containerd/io.containerd.metadata.v1.bolt

2. 常用的存储字段

1)该Layer层存储完毕,记录元数据

Key:v1/{namespace}/content/blob/{digest}
Key1: createdat
Key2:updatedat
Key3:size

2)content的lease信息,下载完成后设置

Key: v1/{namespace}/leases/{leaseID}/content/{Digest}
Value: nil

3)正在下载的ref记录

Key:v1/{namespace}/content/ingests/{ref}
Key1:ref Value:{namespace}/{boltID}{ref}
Key2:expireat Value:{deadline time}
Key3:expected Value:{Digest}

4)下载环节设置,GC使用

Key: v1/{namespace}/leases/{leaseID}/ingests/{ref}
Value: nil

五、GarbageCollect 垃圾回收

content垃圾回收用于删除无用的content。

遍历所有的content存储,在v1/{namespace}/content/blob/v1/{namespace}/content/ingests存在的content保留,其他删除。

相关内容

热门资讯

暴涨超2300%! 转自:宁波晚报上市券商一季报披露“收官”。据悉,49家券商中,共有9家券商归母净利润同比翻倍,16家...
欧佩克+投下“重磅炸弹”!同意... 当地时间周六,欧佩克+成员国同意将6月份的石油供应增加41.1万桶/日,这是继5月出人意料地大幅增产...
“五一”我在岗|北京143路驾... 转自:中工网工人日报-中工网记者 王维砚5月1日清晨的阳光穿过北京143路公交车的玻璃,驾驶员徐金勇...
侄子代办老人丧事花光23万遗产... 封面新闻记者 石伟年逾八旬的五保夫妻先后去世,侄子代办丧事花光23万遗产,被其他亲戚起诉索赔。今年2...
外交部向日方提出严正交涉! 外交部亚洲司司长刘劲松就日本民用飞机侵闯我钓鱼岛领空向日方提出严正交涉2025年5月4日,外交部亚洲...
北京:节后首个工作日限行尾号2... 转自:北京日报客户端  5月6日是节后首个工作日,限行尾号2和7,早晚高峰市区路网通行压力预计较大,...
京东方,彻底稳了!   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 京东方A(00072...
今起北京高速公路迎“五一”假期... 中新网北京5月4日电 (记者 吕少威)记者4日从北京市交通委获悉,5月4日、5日,北京高速公路迎返京...
《无尽的尽头》开创“未检”题材...   正在腾讯播出的司法题材剧《无尽的尽头》,“五一”期间在江苏卫视首播。该剧聚焦未成年人司法保护,开...
马斯克的“星舰基地”成为新城镇... 格隆汇5月4日|美国亿万富豪埃隆·马斯克建立“星舰基地”城的想法成为现实。报道称,选举还选出了“星舰...
洱海更清了 - 资讯频道 清晨的阳光照耀洱海,湖面泛起粼粼金光。洱海之畔的生态廊道上,游客逐渐多了起来——有的跑步、骑行;有的...
成都民众兴隆湖畔露营过“五一”... 5月4日,四川成都兴隆湖人气旺,民众携带户外装备在湖畔安营扎寨,乐享“五一”露营生活。(无人机照片)...
卖徽章立牌、开设IP主题餐厅…... 转自:央视近年来兴起的一种新型消费现象——“谷子经济”,是指围绕漫画、动漫、游戏等二次元IP周边商品...
粤黔协作助力“黔货出山”“黔游... 转自:新华网黔西南州“薏仁丝苗米”等产品吸引消费者选购。受访者供图  日前,由贵州省8个协作市州和广...
现代 Ioniq 5 两年九个... IT之家 5 月 4 日消息,电池衰减一直是电动汽车车主的一大担忧,更换电池包往往意味着巨额的支出。...
湖南铁路助力新能源汽车“加速跑...   长沙晚报掌上长沙5月4日讯 (全媒体记者 吴鑫矾 通讯员 刘卓岳 孟祥琳 董剑锋)五一假期,湖南...
不必依葫芦画瓢 视觉中国 供图  ▌李峥杰  我的女儿快六岁了。她喜欢画画,画的东西奇奇怪怪,每次课都跟墙上老师贴的...
00后四川自贡籍运动员陈佳 夺... 刘晓丹 封面新闻记者 刘恪生5月4日,在刚刚结束的世界泳联跳水世界杯女子三米板跳水决赛中,四川自贡藉...
打破“仅当日有效” 多地景区从... 这个“五一”假期,游客发现很多景区有了新变化。现在,国内许多景点都开始实行“一票游多日”的制度。即购...
人社部最新定调,指导各地提高基... 转自:财话连篇1.7亿农民注意了!人社部最新定调,指导各地提高基础养老金。4月29日,人社部发布《2...