多年间,Docker、Kubernetes 被视为云计算时代下开发者的左膀右臂。
不过,近日,Kubernetes 官方突然发文宣布,在 K8S v1.2 版本之后,将弃用 Docker,转而使用其他容器运行时。
那么,这是否意味着 Docker 将不能再使用?而这究竟又是怎么一回事?
对此,Kubernetes 在官方博客中表示,用户无须惊慌,这则消息并没有听起来那么吓人。
Docker 作为基础运行时正在被弃用, 用户可以使用为 Kubernetes 创建的容器运行时接口 (CRI)。不过,Docker 仍然是构建容器的利器,其生成的映像将一如既往地在集群中与所有容器运行时继续工作。
不过,该篇博客也指出,如果你是 Kubernetes 的终端用户,那么这一改变不会给你带来太大的影响。它并不意味着 Docker 的消亡,也并不意味着你不能再将 Docker 用作开发工具。
不过,如果你使用的是 GKE 或 EKS 之类的托管 Kubernetes 服务,那么需要确保在将来删除 Docker 支持的 Kubernetes 版本中,确保辅助节点使用受支持的容器运行时。如果其中的节点有自定义项,则可能需要根据用户的环境和运行时要求进行相应的更新。
在 v1.20 版本中,你将收到 Kubernetes 针对 Docker 弃用的警告。在将来的 Kubernetes 版本(目前预估在 2021 年下半年 v1.23 版本)中删除 Docker 运行时支持时。
为了进一步解释,Kubernetes 官方表示,在 Kubernetes 集群中,有一个称为容器运行时的东西,负责提取和运行容器映像。Docker 是该运行时的热门选择(其他常见选项包括容器和 CRI-O),但是 Docker 的设计并非旨在嵌入 Kubernetes 中。
而站在更广泛的角度来看,我们日常称之为"Docker"的技术实际上是一个完整的容器技术堆栈,它本身就是一个高级容器运行时。此外,Docker 还包含了许多 UX 增强功能,使得我们在进行开发工作时很容易与之交互,但这些 UX 增强功能对于 Kubernetes 来说并不是必需的。
在常规应用中,Docker 不符合 CRI(容器运行时接口),用户使用 Kubernetes 集群必须借助另一个名为 Dockershim 的中间件工具来获取其真正需要的内容,该工具已被容器化。这意味着,官方必须要在 Docker 和 Kubernetes 之间再多走一步,这无疑增加了复杂性与成本。
实际上,Kubernete 早在 v1.23 发行版中就已将 Dockershim 从 Kubelet 中删除,从而删除了对 Docker 作为容器运行时的支持。
因此,作为用户,接下来,只需要将容器运行时从 Docker 更改为另一个受支持的容器运行时即可。
值得注意的是,开发者在开发中使用的 Docker 安装与 Kubernetes 集群中的 Docker 运行时无关。
或许这样说,依旧让很多人感到困惑。
简而言之,Docker 在宣布此更改之前的所有方式仍然对开发者有用。Docker 生成的镜像实际上是一个 OCI 镜像。
任何与 OCI 兼容的镜像,对于 Kubernetes 而言,都是一样的。除了 Docker 之外,containerd 和 CRI-O 都可以提取这些镜像并运行它们。
对于这一事件,Kubernetes 评价道,弃用 Docker ,这一变化即将到来,虽然会为部分用户带来不便,但带来的影响并不是灾难性的,相反,它倒是一件好事。从长远来看,它会让事情变得更加简单。
更多内容参考: https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/