一、CRI接口(Container Runtime Interface)
1)概念
是一个插件接口,使得
kubelet能够使用各种容器运行时,而无需重新编译集群组件它是
kubelet与容器运行时之间通信的主要协议当通过
gRPC连接到容器运行时,kubelet将充当客户端
2)CRI协议定义
参考协议定义
2)实现了CRI接口的容器运行时
Containerd
Containerd最早是
Docker Engine中的,后来Docker为了将Docker Engine做得更轻量、快速和健壮。2016年,将
containerd从dockerd中独立出来,并完成了与dockerd的集成。独立出来的dockerd全面支持OCI规范,这样containerd也支持除runc依赖的其他OCI实现。2017年,Docker将
containerd捐献给CNCF基金会2019年,
containerd毕业
containerd独立后,发送给Docker Engine的请求,将经过以下几步:Docker daemon完成镜像管理的操作(拉取、更新镜像)daemon会为创建容器进行准备工作(创建 OCI bundles):镜像的信息和运行时的信息。daemon调用containerd的 API- 收到请求的
containerd不会直接去操作容器(也就是不直接作为容器的父进程,从而防止containerd挂掉影响容器),而是先创建一个container-shim进程 container-shim调用 runc cli 来运行容器,并启动 Unix domain socket 暴露 API 提供给containerd进行容器的管理。
CRI-O
由
Red Hat牵头,Intel、IBM、Hyper、SUSE等公司联合开发的一种容器运行时,它诞生以来就为了完成一项任务:实现Kubernetes CRI接口。原理:它在后端利用
runc进行基本容器的管理,同时服务器向前端提供gRPC API服务。介于两者之间的所有事情都由CRI-O本身或一些核心库完成。
Docker Engine
就是Docker之前的架构
Mirantis Container Runtime
这是Docker企业版的容器运行时
扫描二维码,分享此文章