首页 > 其他分享 >Containerd的架构简单学习

Containerd的架构简单学习

时间:2023-11-28 19:59:36浏览次数:35  
标签:容器 架构 Containerd bundle 学习 v1 io containerd 镜像

简单说明

这里,我们介绍一下containerd架构,以便于更好了理解containerd容器。

服务端子系统(Bundle和Runtime)和组件

下图是containerd的架构示意图:

containerd是典型的C/S架构,在服务端包含Bundle和Runtime两大Subsystems(子系统)服务,外部用户通过GRPC API与服务进行交互。

  • Bundle: bundle服务允许用户从磁盘镜像中提取和打包bundles
  • Runtime: 运行时服务支持运行bundles,包括运行时容器的创建

一般每个子系统都有一个或多个相关的控制器组件来实现子系统的功能,并以服务的形式暴露给外部访问。 除了子系统之外,还有几个可能跨越子系统边界的组件,包含:

  • Executor: 执行器实现实际的容器运行时
  • Supervisor: 监控器监视并报告容器状态
  • Metadata: 元数据存储在bolt db,存储对images和bundles的任何持久引用
  • Snapshot: 管理文件系统上容器镜像的快照,对标Docker中的 graphdriver。镜像的层被分解成快照
  • Events: 支持事件的收集和使用,提供一致的事件驱动的行为和审计。事件可以重播到各个模块
  • Metrics: 每个组件都将暴露一些指标,通过Metrics API进行访问

客户端组件

为了灵活性,一些组件是在客户端实现的:

  • Distribution: 提供镜像的拉取和推送上传功能

containerd创建bundle的数据流

containerd在架构上被设计为主要是协调bundles的创建和执行。bundles是指被Runtime使用的配置、元数据、rootfs数据。一个bundle就是一个运行时的容器在磁盘上的表现形式,简化为文件系统中的一个目录。

下图是containerd创建bundle的数据流图:

1.指示Distribution Controller去拉取一个具体的镜像,Distribution将镜像分层内容存储到内容存储中(content store),将镜像名和root manifest pointers注册到元数据存储中(metadata store)。
2.一旦镜像拉取完成,用户可以指示Bundle Controller将镜像分解包到一个bundle中。从内容存储中消费后,图像中的层被解压缩到快照组件中。
3.当容器的rootfs的快照准备好时,Bundle Controller控制器可以使用image manifest和配置来准备执行配置。其中一部分是将挂载从snapshot模块输入到执行配置中。
4.然后将准备好的bundle给Runtime子系统以执行, Runtime子系统将读取bundle配置来创建一个运行的容器。

以上对应containerd的数据根目录下的各个子目录:

$ tree -L 2 /var/lib/containerd/root/
/var/lib/containerd/root/
├── io.containerd.content.v1.content
│   ├── blobs
│   └── ingest
├── io.containerd.grpc.v1.cri
│   ├── containers
│   └── sandboxes
├── io.containerd.metadata.v1.bolt
│   └── meta.db
├── io.containerd.runtime.v1.linux
├── io.containerd.runtime.v2.task
│   └── k8s.io
├── io.containerd.snapshotter.v1.btrfs
├── io.containerd.snapshotter.v1.native
│   └── snapshots
├── io.containerd.snapshotter.v1.overlayfs
│   ├── metadata.db
│   └── snapshots
└── tmpmounts

content中保存是OCI标准tar和mainfest配置文件的,即保存的是镜像,解压后,可以mount给容器使用。 snapshotter的主要作用是通过mount各个层,为容器准备rootfs。

参考链接:

标签:容器,架构,Containerd,bundle,学习,v1,io,containerd,镜像
From: https://www.cnblogs.com/yuhaohao/p/17862811.html

相关文章

  • 【python入门之基本数据类型的学习】---基本数据类型(list、str)【二】
    【三】字符串类型(str)【1】作用字符串类型(str)用于表示文本信息,是一种非常重要的数据类型,用于处理文字、字符等信息【2】定义(1)定义方式字符串可以使用单引号、双引号或三引号进行定义#定义方式1:name_1='Jack'#(当左边有赋值符号和遍历名的时候,它就是字符串)#定......
  • pandas学习
    1.Series类型Series类型由一组数据及与之相关的数据索引组成也可以自定义索引:1.1初始化从标量创建:从字典创建:从ndarray类型创建:1.2基本操作Series类型包括index和values两部分。Series类型的操作类似ndarray类型Series类型的操作类似Python字典类型可以使用......
  • 《信息安全系统设计与实现》第十三周学习笔记
    《信息安全系统设计与实现》第十三周学习笔记第十四章MySQL数据库系统MySQL简介MySQL是一个关系数据库系统在关系数据库中,在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有关联。关系结构使得可在表上运行查询来检索信息并修......
  • 学习笔记4
    用户与权限管理1.用户与用户组用户的操作使用管理员账户或sodo提权创建用户:useradd-m用户名-m: 自动建立用户的登入目录-uUID: 指定UID,这个UID必须是大于等于500,并没有其他用户占用的UID-gGID/GROUPNAME: 指定默认组,可以是GID或者GROUPNAME,同样也必须真实存在-......
  • 拉链表学习
    拉链表介绍:记录历史。记录一个事务从开始,一直到当前状态的所有变化的信息。业务场景表中的部分字段会被更新。需要查看某一个时间点或者时间段的历史快照信息。表中的记录变化的比例和频率不是很大。具体案例......
  • 学习笔记5
    命令查找1.命令搜索whereis 搜索命令的位置和帮助文档的位置which 搜索位置和命令的别名2.find类似于Windows中的搜索文件find[-path]-options‘文件’path:要查找的目录,默认是当前目录option:-name 按文件名的某种规则的查找-type 按文件类型查找f普通文件......
  • 学习笔记6
    文本传输1.管道将程序或命令的输出作为另一个程序或者命令的输入,就是用管道来进行完成管道把一系列的命令链接起来管道符:|命令:xargs2.输入重定向在Linux系统中,所有的都是文件或文件夹,终端也是文件输入重定向指的是把命令或者程序的标准输入重定向到指定的文件中,输入可以不......
  • Markdown学习
    Markdown学习标题三级标题四级标题字体Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说Java,走向人生巅峰分割线图片超链接点击跳转到狂神博客列表ABCABC表格名字性别生日张三男1997.1.1代码hellopublic......
  • Linux yum管理器学习
    学习 Linux 的 Yum 管理器可能会有以下一些心得体会:1. 方便的软件安装:Yum 管理器是一个强大而方便的工具,用于在 Linux 系统中安装、更新和删除软件包。它通过与软件仓库的连接,提供了一种简单的方式来获取和安装软件,无需手动下载和安装单个软件包。1. 确认系统支持 Yum:......
  • p2s学习笔记第三录
    datawhalep2s学习chapter_4与选学01chapter_4:条件if语句if语句ifx==0:print(a)if-else语句ifx==0:print("B",end="")else:print("D",end="")abs转换示例defabs(n):ifn>=0:sign=+......