长久以来,在K8S环境中,都是将docker作为K8S默认的容器运行时,docker和k8s的结合也一直挺顺手的。
然而在2020年末,Kubernetes正式发布了1.20版本,其中最重要的一个更新就是将要弃用dockershim
(不是docker)
dockershim是K8S为了按照CRI协议对接docker而实现的。
这就存在2个问题:
如果没有了dockershim,K8S能继续对接docker吗? 答:不行
如果无法使用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. 容器运行时有一堆命令和名词都是什么意思?互相之间什么关联?如namespace
、cgroup
、docker
、dockerd
、dockershim
、containerd
、containerd-shim
、containerd-shim-runc-v2
、ctr
、crictl
、runc
、oci
、cri
、high-level
、low-level
、cri-o
、podman
、buildah
、kata
、kata-runtime
、containerd-shim-kata-v2
、runtime-class
等。
上面大部分困惑在网络上找不到答案,因为容器运行时有太多的术语、关系,错综复杂(只了解CRI是无法做好弃用Docker准备滴),没有人把这些都讲清楚,如果只掌握部分,不敢真正在生产环境中弃用docker。
为了真正理清楚K8S容器运行时,我进行了知识的梳理,并以视频形式提供了完整内容:从Docker历史出发,逐步讲解K8S容器运行时的架构,并深入CRI、OCI、containerd、kata、podman、runtimeclass(多容器运行时),涵盖了数十个术语的解析,以及实践踩坑。
课程视频已全部发布在腾讯课堂,售价仅98元。
扫码直达
课程目录
本文分享自微信公众号 - 老叶茶馆(iMySQL_WX)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。