容器概念:OCI、CRI、CNI介绍
在容器及 Kubernetes 相关的技术中,我们经常会听到几个名词,很容易弄混。如:OCI、CRI、CNI、CSI。下边简单介绍下他们的概念,以及它们之间的关系名词解释
服务之间相互通信,走的是接口(协议、规范)。容器相关的一些开源软件(如:Kubernetes、Containerd、CRI-O、runc、Kata-Containers),大多是通过 protobuf 作为通信协议来开发的。大家通过约定的规范来定义接口,各自实现接口上下层,来完成具体功能的开发。
下边是一些概念的解释:
CRI (Container Runtime Interface):容器运行时接口,CRI中定义了容器和镜像两个接口,实现了这两个接口的目前主流的是:CRI-O、Containerd。(目前 PCI 产品使用的即为 Containerd)。
OCI(Open Container Initiative):开放容器标准,OCI 中定义了两个标准:容器运行时标准和容器镜像标准,实现了这一标准的主流是:runc(也即我们日常说的 Docker)、Kata-Container
CNI(Container Network Interface):容器网络接口,CNI接口只有两个:容器创建分配网络资源、容器删除释放网络资源。
CSI(Container Storage Interface):容器存储接口,用于 Kubernetes 中。
关系
Kubelet 通过轮询 kube-apiserver 来判定是否要在当前节点启动 Pod。
当需要创建 Pod 的时候,Kubelet 会通过调用 CNI 接口获取网络资源(如 IP 等),然后调用 CRI 接口去创建容器,并把网络资源设进容器中。
CRI服务(Containerd、CRI-O)会去调用 OCI 标准运行时(runc、Kata-Container)来创建容器。
页:
[1]