我到底应该使用哪个 CRI 替换 kubernetes 集群的 Docker?



image.png
前一段时间 kubernetes 对 docker 的弃用引起了不小的讨论,但其实 docker 并不是 kubernetes 中的 CRI 唯一实现。那么除了 docker 之外,我们还可以使用其他什么 CRI 呢?
下面是我已经测试的几个 CRI,并进行一些基准测试来对他们进行了简单的对比,希望对你有所帮助:

  • dockershim
  • containerd
  • crio

对于 cri-o,已经测试了2个后端:runc 和 crun,以测试对 cgroupsv2 的影响。

测试环境

我这里的测试环境是一个 1.19.4 版本的 kubernetes 集群,使用 ansible 进行创建(https://gitlab.com/incubateur-pe)。集群运行在 kvm 上,配置如下:

  • master:Centos/7, 2vcpus/2G内存。
  • crio-crun 节点:Fedora-32, 2vcpus/4G内存。
  • 其他节点:Centos/7, 2vcpus/4G内存.

底层是 i7-9700K ,64G的内存和一个 mp510 nvme 硬盘。

创建集群

这里我直接使用 molecule 创建一个集群,并配置了它在每个 worker 节点上使用不同的 cri,对应的 ansible 源码位于:https://gitlab.com/incubateur-pe/kubernetes-bare-metal/-/tree/dev/molecule/criBench
使用上面的脚本,执行 molecule converge 命令后,大概10分钟左右,我们就可以得到一个如下所示的 kubernetes 集群。
image.png
接下来我们就可以进行一些简单的基准测试了。