Kubernetes新版本不支持Docker,是真的吗?

资讯 1年前 (2023) 千度导航
65 0 0

经常听到有人困惑:听说K8s自某个版本开始,不再支持Docker,是真的吗?

先说结论:这个说法既是对的,也是不对的

Kubernetes 在 1.20 版本中提出将在未来的版本中废弃 Docker 作为容器运行时;并在2020年底的 Kubernetes 1.24 版本中正式弃用dockershim。

搞清楚以下两个问题,那么上面的困惑就一目了然了

dockershim是什么?

dockershim的替代者(继任者)或替代方案是什么?

1. dockershim是什么

dockershim是 Kubernetes早期版本包括的一个组件,实现支持 Docker。但 Docker 由于比 Kubernetes 更早,没有实现 CRI,所以这就是 dockershim 存在的原因,它支持将 Docker 硬编码到 Kubernetes 中。随着容器化成为行业标准,Kubernetes 也支持通过 Container Runtime Interface (CRI)来运行容器,而 dockershim 就逐渐成为了 Kubernetes 项目中的一个异类,导致代码脆弱。

所以,弃用dockershim目的就是要通过标准化的CRI来管理容器。打个比方,就好比https替代了http一样,是大势所趋。

2. dockershim的替代者

移除dockershim后,K8S通过符合CRI (Container Runtime Interface)的容器运行时来管理容器,官方文档给出了4个常见的容器运行时:

  • containerd

containerd是docker的核心依赖,原本是docker开发的,后来捐赠给了CNCF,且实现了CRI规范。它也是Kubernetes的默认CRI。可以简单看一下docker的架构图,如下:

Kubernetes新版本不支持Docker,是真的吗?

所以,使用containerd作为K8S的容器运行时,自己搭建的私有仓库、仓库中的docker镜像都可以正常使用,通过docker制作的镜像也可以用于K8S,既有的知识积累不会浪费。

  • CRI-O

一个由 redhat 发起并开源且由社区驱动的 container-runtime。

  • Docker Engine

就是平常说的Docker,不过这里用的是一个叫cri-dockerd的开源组件来实现Docker和K8s的集成。

  • Mirantis Container Runtime

一种商用容器运行时,以前称为 Docker 企业版。

3. 弃用Docker-Shim后,K8S的Docker的关系

如果K8s使用Containerd作为CRI的话,那么它们的关系将如下图所示:

Kubernetes新版本不支持Docker,是真的吗?

使用containerd替换Docker之后,此时不能再使用 docker ps等命令来管理容器了,需要用k8s提供的命令行工具crictl。

总结一下,K8s弃用的只是内置的、相对老旧的Dockershim组件,改为统一使用CRI接口管理容器。新版本的K8s既可以通过cri-dockerd组件集成docker,也可以直接集成docker的核心组件containerd,说K8S不支持docker只是误读。

版权声明:千度导航 发表于 2023年3月1日 22:58。
转载请注明:Kubernetes新版本不支持Docker,是真的吗? | 千度百科

相关文章