我到底应该使用哪个 CRI 替换 kubernetes 集群的 Docker?
前一段时间 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 集群。
接下来我们就可以进行一些简单的基准测试了。