作者:叶苇
背景
近日,Kubernetes官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时。但 Docker 作为容器镜像构建工具的作用将不受影响,用其构建的容器镜像将一如既往地在集群中与所有容器运行时正常运转。
在这里,日常使用docker和k8s的大家,是不是会有这样的疑问:现有打包的景象要怎么迁移?会不会出现不兼容?对以后开发和工作会有怎么样的影响?
在这里,小编可以很肯定的回答大家,不会有什么影响,该用docker的地方还是可以用docker,现有的镜像也不需要迁移,日后的开发工作流也不会发生很大的改变
Kubernetes调度容器的架构
按照1.20的changelog原文
Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community
原文说的是kubelet是通过一个叫做dockershim的模块实现对docker的支持,然后以后版本会移除这个dockershim模块。
典型的k8s runtime架构(dockershim)
到底这个dockershim是何方神圣,以至于k8s需要把它弃用呢?
故事还得从 k8s 发布之初和docker的关系说起。k8s发布之初,容器实现在当时占用垄断地位的是docker,并且大家最熟悉以及用的最多的也是docker,为了迎合主流,kubernetes官方也是率先使用了docker 作为底层容器的实现。
于是乎,kubelet调度底层容器的架构是这样的