前言

1.24之前装置k8s时,咱们都会先装置docker环境

之前,k8s的container是docker engine维护的:

如何看待K8s 1.5版本弃用docker? containerd是啥?

也就是说,咱们履行一个yaml文件,kubelet会帮咱们删去、扩容(维护)对应的Pod,Pod里面的container是docker engine维护的

docker盛世,K8s挑选docker

在遥远的2013年,Docker发布了第一版,当时的docker以app驱动,参阅了lxc,当时十分受欢迎

2014年,K8s是根据Borg容器管理的,有他的一套东西。

当时的人肯定会想:我为了用K8s还要学一遍?

K8s很聪明,他在前期的版别挑选了docker作为容器化底层支撑

K8s逐步强大,想要不受限于docker

跟着各大厂商热捧K8s,越来越多的容器技能想加入K8s,K8s就想了:

  1. 我怎么样交融别的容器技能,愈加多元?
  2. 我不能绑定在docker上面,我要主导一些

但是docker也很火!又不能直接除掉,双方都是血亏,又不想受限于docker

于是K8s在2016年的1.5版别就开始计划,官网当年的博客:

如何看待K8s 1.5版本弃用docker? containerd是啥?

如何看待K8s 1.5版本弃用docker? containerd是啥?

K8s提出了自己的一套接口规范 CRI (Container Runtime Interface)

docker就从亲儿子变成了挑选之一

如何看待K8s 1.5版本弃用docker? containerd是啥?

如何看待K8s 1.5版本弃用docker? containerd是啥?

如何看待K8s 1.5版本弃用docker? containerd是啥?

K8s没有直接去掉docker,而是在docker和kubelet之间增加了一个docker shim,相当于adapter

相当于折中的妥协!

但是,这样的话肯定会耗费多余功用、网络、cpu

docker的改变

docker这时候想,坏了,这家伙是想把我踢出局?

docker根据本身,移除了一些功用,新构建出了一个项目——containerd,相当于docker的核心功用。并且docker把containerd捐献给了CNCF(Cloud Native Computing Foundation)(云原生核算基金会)

2018年,K8s调用containerd架构图:

如何看待K8s 1.5版本弃用docker? containerd是啥?

再后来

如何看待K8s 1.5版本弃用docker? containerd是啥?

省去了许多环节,大大节省了功用

启动时长:

如何看待K8s 1.5版本弃用docker? containerd是啥?

如何看待K8s 1.5版本弃用docker? containerd是啥?

这样的话,其他的容器化技能也只要装置一个CRI Plugin就可以适配K8s了

1.24版别,docker shim现已被移除了

如何看待K8s 1.5版本弃用docker? containerd是啥?

对咱们的影响

containerd对原来的docker功用进行了一些削减,像docker ps都不能用了。

取而代之的是crictl

如何看待K8s 1.5版本弃用docker? containerd是啥?

如何看待K8s 1.5版本弃用docker? containerd是啥?

对咱们的影响其实不大,咱们学习K8s,实质上操作的是kubectl

发展总结

1.前期 K8s 1.5版别之前 kublet—>docker engine

2.K8s 1.5版别 发布了CRI 界说容器管理规范

3.kublet—>CRI—->docker shim—->docker engine 折中方案

4.docker核心剥离出来,构成一个containerd项目,捐献给CNCF,愈加拥抱云原生 containerd本质上还是docker,只不过docker换了一种方式陪伴在你身边

5.K8s 1.24开始今后

    kublet---> CRI --->[CRI plugin]containerd
    kublet---> CRI --->[CRI plugin]xxx(其他容器化技能)
    kublet---> CRI --->[CRI plugin]yyy(其他容器化技能)