本文转自Rancher Labs
近期,Kubernetes在其最新的Changelog中发表,自Kubernetes 1.20之后将弃用Docker作为容器运行时。这一音讯在云原生畛域激发了不小的水花,在Rancher技术社区里许多小伙伴也对此进行了强烈的探讨。
Kubernetes为什么抉择弃用Docker呢?咱们须要先简略理解Dockershim。它是一个桥接服务,帮忙Kubernetes与Docker进行通信,Kubelet 之前应用 dockershim 实现对 Docker 的 CRI 反对(Docker自身目前尚未实现CRI)。但时至今日,保护Dockershim已成为运维/开发人员的沉重负担。因而Kubernetes社区倡议大家思考应用蕴含 CRI 残缺实现(兼容 v1alpha1 或 v1)的可用容器运行时。从而勾销了对Docker作为容器运行时的反对。
不过大家不用过分放心,近期从Rancher社区外面收集了一些大家比拟关注的问题,上面一一为大家解答:
1、Kubernetes Kubelet 弃用了Docker作为容器运行时,有代替计划吗?
在Kubernetes集群中,容器运行时负责提取和运行容器镜像。Docker只是被广泛应用的容器运行时,在Docker被弃用之后,咱们还有两个常见的选项:containerd 和 CRI-O。
Containerd 是一个工业级规范的容器运行时,它极为简略、强壮并且具备可移植性。Containerd 能够在宿主机中治理残缺的容器生命周期。这是一个100%开源的软件,已于去年2月份从CNCF毕业。
去年年初,Rancher推出的轻量级Kubernetes发行版K3s曾经应用containerd作为默认容器运行时。
containerd:https://github.com/containerd...
CRI-O是由Red Hat推出的一款容器运行时,旨在提供一种在OCI统一的运行时和Kubelet之间的集成形式。在文章后半局部咱们将会进一步比照containerd和CRI-O的性能,为您在抉择容器运行时的时候提供参考。
CRI-O:https://github.com/cri-o/cri-o
2、我依然能够在Kubernetes 1.20中应用Docker吗?
是的,如果应用Docker作为运行时,在1.20中只会在Kubelet启动时打印一个正告日志。Kubernetes最早将在2021年末公布1.23版本中将dockershim移除。
3、我现有的Docker镜像依然能够应用吗?
依然能够应用。Docker生成的镜像实际上并不是特定于Docker的镜像,而是OCI(Open Container Initiative)镜像。无论你应用什么工具构建镜像,任何合乎OCI规范的镜像在Kubernetes看来都是一样的。containerd和CRI-O都可能提取这些镜像并运行它们。所以您能够依然应用Docker来构建容器镜像,并且能够持续在containerd和CRI-O上应用。
4、我应该应用哪个CRI实现?
这是一个比较复杂的问题,它取决于许多因素。如果您之前纯熟应用Docker,那么迁徙到containerd应该是一个绝对容易的抉择,并且containerd具备更好的性能和更低的老本。当然,您也能够摸索CNCF畛域中的其余我的项目,来抉择更适宜您的环境。
起源:https://kubernetes.io/blog/20...
eBay对containerd和CRI-O进行了一组性能测试,包含创立、启动、进行和删除容器,以比拟它们所耗的工夫。如图所示,containerd在各个方面都体现良好,除了启动容器这项。从总用时来看,containerd的用时比cri-o要短。
以下数据来自eBay的分享:
containerd和cri-o的性能比拟
containerd和cri-o的综合比拟
Rancher,阿里云,AWS, Google,IBM和Microsoft作为初始成员,独特建设 containerd 社区。2017年3月,Docker 将 containerd 募捐给CNCF(云原生计算基金会)。containerd失去了疾速的倒退和宽泛的反对。Docker引擎曾经将containerd作为容器生命周期治理的根底,Kubernetes也在2018年5月,正式反对containerd作为容器运行时管理器。2019年2月,CNCF发表containerd毕业,成为生产可用的我的项目,更加稳固。
5、Rancher 对 Containerd 的反对
Rancher 在轻量级Kubernetes发行版 K3s和 RKE2(2020年10月推出)中早已将 containerd 作为默认的容器运行时。置信在 Rancher 2.x 反对 Kubernetes 1.20+ 之后会将这些贵重教训使用到新版本的Rancher 2.x 迭代中。
其实Kubernetes弃用Docker这一决定曾经酝酿很长时间了,可能对于没有亲密关注这个方面的工程师来说有些措手不及。但其实无需特地放心:如果你是Kubernetes的终端用户,这仅仅是一个后端容器运行时的更改,从应用方面来说简直感觉不到区别;如果你是一名开发/运维人员,你仍旧能够持续应用Docker来构建镜像,以雷同的形式将镜像推送到Registry,并且将这些镜像部署到你的Kubernetes中;如果你是运行和操作集群的用户,你只须要将Docker切换成你须要的容器运行时即可。