K8s 将弃用 Docker_java

Kubernetes 1.20 版本发布了,其中有一项重要变更,就是将对 Docker 的支持声明为了过期,在之后的版本中会直接移除。

这项变动引起了不小的轰动,那么 K8s 为什么要弃用 Docker 呢?对我们的影响有多大呢?

下面就聊聊这两个问题。

K8s 为什么要弃用 Docker?

简单来讲就是 K8s 支持 Docker 的代价太大了。

首先,对于 K8s 来说 Docker 太重了。

K8s 将弃用 Docker_java_02

Docker 是包含了很多东西的,例如:

  • CLI
  • API
  • Server
  • Container Runtime
  • Volumes
  • Network
  • build image

但是 K8s 只是使用其中的 container runtime(容器运行环境)。

其次,K8s 为了支持 Docker 还需要单独开发和维护一个组件 -- dockershim

因为 Docker 不支持 K8s 的 CRI 标准,所以 K8s 需要搭建一个对接 Docker 的桥梁,就是 dockershim。

dockershim 只是一个临时解决方案,长期的维护越来越麻烦,例如不兼容 cgroups v2、用户命名空间等新特性。

基于以上两个原因,K8s 决定弃用 Docker。

对我们有什么影响?

K8s 支持遵循 OCI(Open Container Initiative)标准的容器运行环境,包括:

  • containerd
  • CRI-O

而 Docker 构建的 image 就是遵循 OCI 标准的,所以在 K8s 中运行是完全没问题的。

这下就可以放心了,我们还是该怎么用 Docker 就怎么用。

例如:

对开发人员没有任何影响;

对于 CI/CD 构建流程也没有影响;

还有我们平时使用的工具,如 MiniKube、Docker Desktop 都没影响。

有影响的就是 K8s 的运维人员,需要使用 containerd or CRI-O 来替换 Docker,作为新的容器运行环境。