一、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企业版的容器运行时
扫描二维码,分享此文章