Kubernetes 1.20 版本发布了,其中有一项重要变更,就是将对 Docker 的支持声明为了过期,在之后的版本中会直接移除。
这项变动引起了不小的轰动,那么 K8s 为什么要弃用 Docker 呢?对我们的影响有多大呢?
下面就聊聊这两个问题。
K8s 为什么要弃用 Docker?
简单来讲就是 K8s 支持 Docker 的代价太大了。
首先,对于 K8s 来说 Docker 太重了。
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,作为新的容器运行环境。