本文转自 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 切换成你须要的容器运行时即可。