K8S即将弃用Docker?慌不?

Stella981
• 阅读 902

长久以来,在K8S环境中,都是将docker作为K8S默认的容器运行时,docker和k8s的结合也一直挺顺手的。

然而在2020年末,Kubernetes正式发布了1.20版本,其中最重要的一个更新就是将要弃用dockershim(不是docker)

dockershim是K8S为了按照CRI协议对接docker而实现的。

这就存在2个问题:

  1. 如果没有了dockershim,K8S能继续对接docker吗? 答:不行

  2. 如果无法使用docker,有替代品吗? 答:有,但没有想象中那么简单

若想搞懂上面提的问题,就需要先了解容器运行时

容器运行时,英文是Container Runtime,表示让容器运行起来的状态、所需的要求等等。

lxc、docker、rkt都是早期的容器运行时,架构也很简单,就是创建namespace、cgroup等,并运行指定的容器应用程序。

后来docker逐渐拆分成runc、containerd、dockerd,也使得容器运行时逐渐复杂起来,让我摸不着头脑,也使得我不得不花费大量时间进行深入学习研究。

看起来很复杂,是因为docker和k8s都有容器运行时的概念,同时又有2个协议CRI、OCI,都与容器运行时相关(除此之外还有很多)。

对Docker和K8S用户,会带来哪些影响?

对Docker使用者,例如通过docker制作镜像、调试镜像,或在无K8S环境运行的Docker,没有影响。但对K8S环境,届时将会无法使用docker。

在K8S环境中,不使用docker,可以使用containerd作为替代。

2016年,docker将containerd拆解成独立项目,2017将containerd捐献给了CNCF。随后containerd实现了CRI,可以与K8S进行结合。

我本来抱着“轻敌”的想法,觉得containerd用起来肯定和docker差不多,毕竟是从docker拆出来的,命令参数应该都差不多。

结果被事实打了脸,完全不一样,而且文档少的可怜,更无奈的是文档中还有一些错误的地方得不到及时修正。

导致我原本想直接在生产环境中使用containerd替代docker的计划,变得更加小心,也为此专门花了2个月时间来深入研究K8S容器运行时,包含containerd、kata、多容器运行时等等一系列和容器运行时相关的技术。

因为文档缺乏,有的时候不得不翻看源码来寻找一些组件之间的关联,否则难以理解为什么能这样,为什么不能那样。

关于容器运行时的15个困惑

学习过程中,我遇到15个困惑:

困惑1. K8S要弃用的是docker还是dockershim?为什么要弃用,什么时候弃用?替代品是谁?

困惑2. dockershim是什么?dockershim和docker是什么关系,和CRI又是什么关系?

困惑3. dockershim和containerd-shim都有shim字样,他们是一回事吗?

困惑4. 容器运行时是CRI还是OCI?

困惑5. 使用docker和弃用docker后的架构分别是什么样的呢?

困惑6. 弃用docker只是简单的删除docker二进制就行了吗

困惑7. 弃用docker后如何制作并上传镜像呢?

困惑8. 原来docker创建的容器、下载的镜像,containerd能继续沿用吗?

困惑9. containerd的镜像mirror、证书如何配置?

困惑10. 没有了docker,如何查看容器、查看镜像呢?

困惑11. 能用podman替代docker用于k8s环境吗?

困惑12. crictl和podman的参数很相似,可以互相替换吗?

困惑13. kata如何使用,以及能直接用于k8s环境吗?

困惑14. k8s集群可以同时运行多个容器运行时吗?

困惑15. 容器运行时有一堆命令和名词都是什么意思?互相之间什么关联?如namespacecgroupdockerdockerddockershimcontainerdcontainerd-shimcontainerd-shim-runc-v2ctrcrictlruncocicrihigh-levellow-levelcri-opodmanbuildahkatakata-runtimecontainerd-shim-kata-v2runtime-class等。

上面大部分困惑在网络上找不到答案,因为容器运行时有太多的术语、关系,错综复杂(只了解CRI是无法做好弃用Docker准备滴),没有人把这些都讲清楚,如果只掌握部分,不敢真正在生产环境中弃用docker。

为了真正理清楚K8S容器运行时,我进行了知识的梳理,并以视频形式提供了完整内容:从Docker历史出发,逐步讲解K8S容器运行时的架构,并深入CRI、OCI、containerd、kata、podman、runtimeclass(多容器运行时),涵盖了数十个术语的解析,以及实践踩坑。

课程视频已全部发布在腾讯课堂,售价仅98元。

扫码直达

K8S即将弃用Docker?慌不?

课程目录

K8S即将弃用Docker?慌不?

本文分享自微信公众号 - 老叶茶馆(iMySQL_WX)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这