dockershim
的模块,该模块实现了对Docker的 CRI
支持,在此PR后续版本将删除dockershim
。--delete-local-data
参数。上面中提到两个名词,分别为 CRI
和 dockershim
。下面分别解释一下:
大家在看到 CRI
时就会想起 OCI
,这两个名词概念容易混淆。
CRI
:容器运行时接口 container runtime interface
,CRI 中定义了容器和镜像两个接口,实现了这两个接口目前主流的是:CRI-O、Containerd。(目前 PCI 产品使用的即为 Containerd)。
其主要的作用:
OCI
:开放容器标准 open container initiative
,OCI 中定义了两个标准:容器运行时标准
和 容器镜像标准
,实现了这一标准的主流是:runc(也即我们日常说的 Docker)、Kata-Container。
主要作用,制作容器:
ImageSpec
runtimeSpec
Dockershim 作用
:把外部收到的请求转化成 Docker Daemon
能听懂的请求,让 Docker Daemon 执行创建、删除等容器操作。
通过上面来看,Docker Daemon
和 dockershim
看上去就是两个不干活的东西,Kubelet 为啥不直接调用 containerd
呢?其实和容器历程有关,这里不在阐述。
尽管现在已经有 CRI-O
,containerd-plugin
这样更精简轻量的 Runtime
架构,但 dockershim
这一套作为经受了最多生产环境考验的方案,迄今为止仍是 Kubernetes 默认的 Runtime 实现。不过 Containerd
逐渐被人们所知晓。
虽然未来 Kubelet 删除 dockershim 支持,但并不说明 Docker 马上就不能在 Kubernetes 中使用,目前容器市场 Docker 还是占用很大的比例。这中间会有一个过渡期,大家可以关注 Containerd
或者 Podman
。Centos8 开始,仓库源默认容器已经从 Docker
切换为 Podman
。