容器引擎架构
下面这层的左边是容器镜像的一个存储,中线 images、containers 下面是 Metadata,这部分 Matadata 是通过 bootfs 存储在磁盘上面的。右边的 Tasks 是管理容器的容器结构,Events 是对容器的一些操作都会有一个 Event 向上层发出,然后上层可以去订阅这个 Event,由此知道容器状态发生什么变化。
最下层是 Runtimes 层,这个 Runtimes 可以从类型区分,比如说 runC 或者是安全容器之类的。

一个 CRI Client。一般就是 kubelet 通过 CRI 请求,向 containerd 发送请求。containerd 接收到容器的请求之后,会经过一个 containerd shim。containerd shim 是管理容器生命周期的,它主要负责两方面:第一个是它会对 io 进行转发。第二是它会对信号进行传递。
创建一个容器的流程。首先它会去创建一个 matadata,然后会去发请求给 task service 说要去创建容器。通过中间一系列的组件,最终把请求下发到一个 shim。containerd 和 shim 的交互其实也是通过 GRPC 来做交互的,containerd 把创建请求发给 shim 之后,shim 会去调用 runtime 创建一个容器出来。
exec 的时候,需要把这个进程加入到一个已有的 namespace 里面;
start 的时候,容器进程的 namespace 是需要去专门创建。
Shim 是一个轻量级的进程,用于在容器运行时和底层容器执行引擎之间充当中间层。在容器技术中,Shim 扮演着连接容器运行时(如 Docker)和底层执行引擎(如 runC)的角色,它负责处理容器的生命周期管理和操作,并将请求转发给底层执行引擎进行处理。
Shim 通常执行以下几项关键任务:
1. 生命周期管理:*Shim 负责管理容器的生命周期,包括容器的创建、启动、停止和销毁等操作。它与容器运行时进行交互,以便在容器的生命周期过程中进行适当的管理和控制。
2. 事件处理:Shim 可以处理与容器相关的事件和请求,如资源请求、网络配置和存储管理等。它负责解析这些请求,并与底层执行引擎进行通信以执行相应的操作。
3. 通信接口:Shim 提供了容器运行时与底层执行引擎之间的通信接口,使得它们可以有效地进行交互和通信。通过这个接口,容器运行时可以将请求传递给 Shim,然后由 Shim 将请求转发给底层执行引擎。
业界主流容器运行时
docker的runc
kata:使用轻量化的虚拟机承载容器,通过虚拟机监视器vmm访问主机内核
gvisor:使用虚拟内核拦截系统调用
发展方向:
定制虚拟化和内核:通过更轻量的安全隔离
去除host的shim
rust化
基于虚拟化的机密计算
镜像功能卸载,主机看不到容器镜像
远程认证

浙公网安备 33010602011771号