此文仅仅以个人的角度整理一些零碎的资料来帮助学习k8s

CRI

全称Container Runtime Interface,容器运行时接口。定义了k8s与容器运行时通信的API。

OCI

全称Open Container Initiative,开放容器计划。OCI的官方网站(https://opencontainers.org/)主页有这么一段说明。简单来说就是一套开源的关于容器运行时和镜像的规范。由Docker和一些容器领域的领头在2015年发起的项目。

Open Container Initiative

The Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.

Established in June 2015 by Docker and other leaders in the container industry, the OCI currently contains two specifications: the Runtime Specification (runtime-spec) and the Image Specification (image-spec). The Runtime Specification outlines how to run a “filesystem bundle” that is unpacked on disk. At a high-level an OCI implementation would download an OCI Image then unpack that image into an OCI Runtime filesystem bundle. At this point the OCI Runtime Bundle would be run by an OCI Runtime.

runC

OCI的一个实现,开始是Docker捐了libcontainer给社区,再后来发展成了runC。这是一个底层与容器运行时交互的工具,在containerd和cri-o里都有使用它。

关系图

在网上找到了一张图很容易理解上面这些概念的关系图。

出处:https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/

运行时种类

Containerd

containered原是Docker内部开发使用的运行时,后来在2017年3月捐给了Native Computing Foundation(CNCF)。它在Docker里的内部构造如下。Docker原生并不支持CRI,所以使用dockershim作为媒介来与kubelet进行通信。

在2017年12月释出的containerd1.0里虽然使用了CRI-Containerd来和kubelet通信,但是那时候containerd并没有原生支持CRI。

再后来,在containerd1.1里以插件的形式加入了CRI的原生支持,因为少了一层gRPC通信,所以速度更快,CPU和内存使用更少了。

CRI-O

CRI-O是Kubernetes Incubator Project开发项目,它是一个遵守了CRI与OCI标准的轻量容器运行时,于2017年10月发布1.0。

它的架构如下。因为它遵守了CRI标准所以可以直接和kubelet通信,同时它还遵守了OCI标准所以可以作为底层的运行时与runC通信。

最后修改:2021 年 09 月 25 日 01 : 52 AM
如果觉得我的文章对你有用,请随意赞赏