Kubernetes弃用Docker后怎么办?
本文转自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后怎么办?的更多相关文章
- 系列好文 | Kubernetes 弃用 Docker,我们该何去何从?
作者 | 张攀(豫哲) 来源 | 尔达 Erda 公众号 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!**在 Erda 开源的同时,我们计划编 ...
- Kubernetes将弃用Docker!与 containerd容器引擎
时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...
- Kubernetes容器运行时弃用Docker转型Containerd
文章转载自:https://i4t.com/5435.html Kubernetes社区在2020年7月份发布的版本中已经开始了dockershim的移除计划,在1.20版本中将内置的dockersh ...
- 在Mac和win7上分别安装了docker后,发现原来的vagrant都启动不了了
在Mac和win7上分别安装了docker后,发现原来的vagrant都启动不了了 liugx@liugx vagrant$ vagrant up /opt/vagrant/embedded/gems ...
- Kubernetes k8s 基于Docker For Windows
开启和安装Kubernetes k8s 基于Docker For Windows 0.最近发现,Docker For Windows Stable在Enable Kubernetes这个问题上 ...
- 假如kubernetes不支持docker了该怎么办
假如kubernetes不支持docker了该怎么办 从官网安装文档可以看到kubernetes支持一下几种: https://kubernetes.io/docs/setup/production- ...
- K8S为什么要弃用Docker?Dockershim将移除
一.背景由于最近知道了 K8s 新版本(v1.20)确定弃用 Docker 的消息,为了明确是否会对现有系统架构产生响,所以对涉及到的相关技术进行了一定的梳理(索性的是对现有的系统架构基本无影响:&g ...
- Kubernetes将弃用docker?
1.前言 近日,Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时.并在1.23后不再支持dock ...
- Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂
1 前言 Kubernetes又简称k8s,是Google开源的容器集群管理系统,最近也是火热.闲来无事(为了发文),捣鼓了一下,在Mac上搭建Kubernetes,遇到一些坑,也记录一下. 另外,D ...
随机推荐
- mysql学习——数据库基本操作
查看当前数据库 创建数据库 查看数据库定义 删除数据库
- python笔记(1)---数据类型
数据类型 基本的五大数据类型 对python中的变量有如下的五种基本的数据类型: Number数字 list列表 Tuple元组 string字符串 Dictionary字典 1.Number [注意 ...
- Python:安装Bio库不成功,出现ModuleNotFoundError: No module named 'Bio'
Bio库的安装并不是pip install bio,而是biopython. ./anaconda3/bin/pip3 install biopython -i https://pypi.douban ...
- Mybatis是如何封装Jdbc的?
JDBC六个步骤 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { //1. 加载驱动 C ...
- 关于uniapp无法navigateTo跳转的解决办法
今天在分包时突然无法跳转了,记个笔记 场景: 位于tabbar页面(主包)的子组件跳转到分包页面时,无法跳转 尝试办法: 使用uniapp原生跳转 uni.navigateTo({ url:'xxxx ...
- webgl智慧楼宇发光效果算法系列之高斯模糊
webgl智慧楼宇发光效果算法系列之高斯模糊 如果使用过PS之类的图像处理软件,相信对于模糊滤镜不会陌生,图像处理软件提供了众多的模糊算法.高斯模糊是其中的一种. 在我们的智慧楼宇的项目中,要求对楼宇 ...
- How tomcat works(深入剖析tomcat)阅读笔记1-4章
How tomcat works chapter 1 简单的web服务器 这一张的主要内容就是实现一个简单的静态资源服务器,socket编程,利用java提供的socket和serverSocket编 ...
- linux查看内存及磁盘使用情况
1.查看当前目录 命令: df -h (统一每个目录下磁盘的整体情况) 2.查看指定目录 在命令后直接放目录名,比如查看"usr"目录使用情况: 命令: df ...
- LeetCode 029 Divide Two Integers
题目要求:Divide Two Integers Divide two integers without using multiplication, division and mod operator ...
- 洛谷P3906 Hoof Paper, Scissor (记忆化搜索)
这道题问的是石头剪刀布的的出题问题 首先不难看出这是个dp题 其次这道题的状态也很好确定,之前输赢与之后无关,确定三个状态:当前位置,当前手势,当前剩余次数,所以对于剪刀,要么出石头+1分用一次机会, ...