Kubernetes弃用Docker后怎么办?

本文转自Rancher Labsgit

近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20以后将弃用Docker做为容器运行时。这一消息在云原生领域激起了不小的水花,在Rancher技术社区里许多小伙伴也对此进行了激烈的讨论。github

Kubernetes为何选择弃用Docker呢?咱们须要先简单了解Dockershim。它是一个桥接服务,帮助Kubernetes与Docker进行通讯,Kubelet 以前使用 dockershim 实现对 Docker 的 CRI 支持(Docker自己目前还没有实现CRI)。但时至今日,维护Dockershim已成为运维/开发人员的沉重负担。所以Kubernetes社区建议你们考虑使用包含 CRI 完整实现(兼容 v1alpha1 或 v1)的可用容器运行时。从而取消了对Docker做为容器运行时的支持。docker

不过你们没必要过度担忧,近期从Rancher社区里面搜集了一些你们比较关注的问题,下面一一为你们解答:后端

一、Kubernetes Kubelet 弃用了Docker做为容器运行时,有代替方案吗?运维

在Kubernetes集群中,容器运行时负责提取和运行容器镜像。Docker只是被广泛使用的容器运行时,在Docker被弃用以后,咱们还有两个常见的选项:containerd 和 CRI-O。工具

Containerd 是一个工业级标准的容器运行时,它极为简单、健壮而且具有可移植性。Containerd 能够在宿主机中管理完整的容器生命周期。这是一个100%开源的软件,已于去年2月份从CNCF毕业。性能

去年年初,Rancher推出的轻量级Kubernetes发行版K3s已经使用containerd做为默认容器运行时。测试

containerd:https://github.com/containerd/containerd/阿里云

CRI-O是由Red Hat推出的一款容器运行时,旨在提供一种在OCI一致的运行时和Kubelet之间的集成方式。在文章后半部分咱们将会进一步对比containerd和CRI-O的性能,为您在选择容器运行时的时候提供参考。3d

CRI-O:https://github.com/cri-o/cri-o

二、我仍然能够在Kubernetes 1.20中使用Docker吗?

是的,若是使用Docker做为运行时,在1.20中只会在Kubelet启动时打印一个警告日志。Kubernetes最先将在2021年底发布1.23版本中将dockershim移除。

三、我现有的Docker镜像仍然可使用吗?

仍然可使用。Docker生成的镜像实际上并非特定于Docker的镜像,而是OCI(Open Container Initiative)镜像。不管你使用什么工具构建镜像,任何符合OCI标准的镜像在Kubernetes看来都是同样的。containerd和CRI-O都可以提取这些镜像并运行它们。因此您能够仍然使用Docker来构建容器镜像,而且能够继续在containerd和CRI-O上使用。

四、我应该使用哪一个CRI实现?

这是一个比较复杂的问题,它取决于许多因素。若是您以前熟练使用Docker,那么迁移到containerd应该是一个相对容易的选择,而且containerd具备更好的性能和更低的成本。固然,您也能够探索CNCF领域中的其余项目,来选择更适合您的环境。

来源:https://kubernetes.io/blog/2020/12/02/dockershim-faq/#which-cri-implementation-should-i-use

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毕业,成为生产可用的项目,更加稳定。

五、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切换成你须要的容器运行时便可。

相关文章
相关标签/搜索