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

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切换成你需要的容器运行时即可。

Kubernetes弃用Docker后怎么办?的更多相关文章

  1. 系列好文 | Kubernetes 弃用 Docker,我们该何去何从?

    作者 | 张攀(豫哲) 来源 | 尔达 Erda 公众号 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!**在 Erda 开源的同时,我们计划编 ...

  2. Kubernetes将弃用Docker!与 containerd容器引擎

    时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...

  3. Kubernetes容器运行时弃用Docker转型Containerd

    文章转载自:https://i4t.com/5435.html Kubernetes社区在2020年7月份发布的版本中已经开始了dockershim的移除计划,在1.20版本中将内置的dockersh ...

  4. 在Mac和win7上分别安装了docker后,发现原来的vagrant都启动不了了

    在Mac和win7上分别安装了docker后,发现原来的vagrant都启动不了了 liugx@liugx vagrant$ vagrant up /opt/vagrant/embedded/gems ...

  5. Kubernetes k8s 基于Docker For Windows

      开启和安装Kubernetes k8s 基于Docker For Windows   0.最近发现,Docker For Windows Stable在Enable Kubernetes这个问题上 ...

  6. 假如kubernetes不支持docker了该怎么办

    假如kubernetes不支持docker了该怎么办 从官网安装文档可以看到kubernetes支持一下几种: https://kubernetes.io/docs/setup/production- ...

  7. K8S为什么要弃用Docker?Dockershim将移除

    一.背景由于最近知道了 K8s 新版本(v1.20)确定弃用 Docker 的消息,为了明确是否会对现有系统架构产生响,所以对涉及到的相关技术进行了一定的梳理(索性的是对现有的系统架构基本无影响:&g ...

  8. Kubernetes将弃用docker?

    1.前言 近日,Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时.并在1.23后不再支持dock ...

  9. Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂

    1 前言 Kubernetes又简称k8s,是Google开源的容器集群管理系统,最近也是火热.闲来无事(为了发文),捣鼓了一下,在Mac上搭建Kubernetes,遇到一些坑,也记录一下. 另外,D ...

随机推荐

  1. mysql学习——数据库基本操作

    查看当前数据库 创建数据库 查看数据库定义 删除数据库

  2. python笔记(1)---数据类型

    数据类型 基本的五大数据类型 对python中的变量有如下的五种基本的数据类型: Number数字 list列表 Tuple元组 string字符串 Dictionary字典 1.Number [注意 ...

  3. Python:安装Bio库不成功,出现ModuleNotFoundError: No module named 'Bio'

    Bio库的安装并不是pip install bio,而是biopython. ./anaconda3/bin/pip3 install biopython -i https://pypi.douban ...

  4. Mybatis是如何封装Jdbc的?

    JDBC六个步骤 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { //1. 加载驱动 C ...

  5. 关于uniapp无法navigateTo跳转的解决办法

    今天在分包时突然无法跳转了,记个笔记 场景: 位于tabbar页面(主包)的子组件跳转到分包页面时,无法跳转 尝试办法: 使用uniapp原生跳转 uni.navigateTo({ url:'xxxx ...

  6. webgl智慧楼宇发光效果算法系列之高斯模糊

    webgl智慧楼宇发光效果算法系列之高斯模糊 如果使用过PS之类的图像处理软件,相信对于模糊滤镜不会陌生,图像处理软件提供了众多的模糊算法.高斯模糊是其中的一种. 在我们的智慧楼宇的项目中,要求对楼宇 ...

  7. How tomcat works(深入剖析tomcat)阅读笔记1-4章

    How tomcat works chapter 1 简单的web服务器 这一张的主要内容就是实现一个简单的静态资源服务器,socket编程,利用java提供的socket和serverSocket编 ...

  8. linux查看内存及磁盘使用情况

    1.查看当前目录 命令:   df -h       (统一每个目录下磁盘的整体情况) 2.查看指定目录 在命令后直接放目录名,比如查看"usr"目录使用情况: 命令:   df ...

  9. LeetCode 029 Divide Two Integers

    题目要求:Divide Two Integers Divide two integers without using multiplication, division and mod operator ...

  10. 洛谷P3906 Hoof Paper, Scissor (记忆化搜索)

    这道题问的是石头剪刀布的的出题问题 首先不难看出这是个dp题 其次这道题的状态也很好确定,之前输赢与之后无关,确定三个状态:当前位置,当前手势,当前剩余次数,所以对于剪刀,要么出石头+1分用一次机会, ...