本文转自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. DWVA-命令注入漏洞闯关(Command Injection)

    前言 Vulnerability: Command Injection LOW级别 代码: <?php if( isset( $_POST[ 'Submit' ] ) ) { // 几首一个变量 ...

  2. tp5 上传视频方法

    控制器调用 /** * 视频上传 */ public function video_add(){ if (request()->isPost()){ $video = $_FILES['vide ...

  3. guitar pro系列教程(十九):Guitar Pro添加音符之前我们要做什么?

    前面的章节我们已经讲了不少关于{cms_selflink page='index' text='Guitar Pro'}的功能之类的讲解,那一般我们在打谱之前要做的是什么呢,很多新手玩家,对这方面也是 ...

  4. workerman windows环境下无法启动问题

    问题描述 使用laravel框架composer加载workerman/gateway-worker扩展使用workerman做客服系统.通过laravel的command命令: php artisa ...

  5. On-Demand Learning for Deep Image Restoration

    摘要 论文来源:ICCV 2017 之前的缺点:目前的机器学习方法只专注于在特定困难程度的图像损坏(如一定程度的噪声或模糊)情况下进行良好的训练模型. 改进的方法:提出了一种基于深度卷积神经网络的按需 ...

  6. Spring Boot 统一返回结果及异常处理

    在 Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 & 异常处理 基础上优化.调整 一.通用类 1.1 通用的返回对象 public class CommonReturn ...

  7. java集合类(新手也能掌握)

    文章目录 1.集合概述 (1)集合: (2)集合分类: 2.Collection接口 3.List接口 (1)List接口简介 (2)ArrayList集合 (3)LinkedList集合 (4)It ...

  8. mysql-installer-web-community和mysql-installer-communityl两个版本的区别

    mysql的官网上提供了两个mysql共享版本的安装,一个20M,一个373.4M.二者的区别是前者是联网安装,当安装时必须能访问互联网,后者是离线安装使用的,一般建议下载离线安装使用的版本. 学Py ...

  9. PyQt(Python+Qt)学习随笔:QTableWidgetItem项whatsThis、toolTip、statusTip提示信息访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget表格部件的QTableWidgetItem项提示信息包括工具栏提示.状态栏提 ...

  10. PyQt(Python+Qt)学习随笔:QListWidget插入多项的insertItems方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 除了insertItem方法能插入项外,QListWidget支持一次插入多个项,对应的方法就是in ...