本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

你的集群为 v1.24 准备好了吗?

早在 2020 年 12 月,Kubernetes 就宣布了弃用 Dockershim。在 Kubernetes 中,dockershim 是一个软件垫片,允许你将整个 Docker 引擎用作 Kubernetes 内的容器运行时。在即将发布的 v1.24 版本中,我们将移除 Dockershim——从弃用到移除之间的延迟符合项目政策,即在弃用后至少支持一年。如果你是集群运营者,本指南包含了你在此版本发布前需要了解的实际情况。此外,你还需要做什么来确保你的集群不会崩溃!

首先,这会影响到你吗?

如果你是自己部署集群,或者不确定这次移除是否会影响到你,为了安全起见,请检查你是否有任何对 Docker Engine 的依赖。请注意,使用 Docker Desktop 构建应用程序容器并不意味着你的集群对 Docker 有依赖。由 Docker 创建的容器镜像符合开放容器倡议 (OCI) 标准,这是一个定义了容器格式和运行时行业标准的 Linux 基金会治理结构。这些镜像在 Kubernetes 支持的任何容器运行时上都能正常工作。

如果你正在使用云提供商的托管 Kubernetes 服务,并且没有明确更改容器运行时,那么你可能什么都不用做。Amazon EKS、Azure AKS 和 Google GKE 现在都默认使用 containerd,但如果你有任何节点自定义设置,应确保它们不需要更新。要检查节点的运行时,请遵循找出节点上使用的容器运行时的步骤。

无论你是自己部署集群还是使用云提供商的托管 Kubernetes 服务,你都可能需要迁移依赖 Docker Engine 的遥测或安全代理

我有 Docker 依赖,现在该怎么办?

如果你的 Kubernetes 集群依赖 Docker Engine,并且你打算升级到 Kubernetes v1.24(出于安全和类似原因,你最终应该这样做),你需要将你的容器运行时从 Docker Engine 更改为其他运行时,或者使用 cri-dockerd。由于 containerd 是一个已毕业的 CNCF 项目,并且是 Docker 内部的运行时,因此它是一个安全可靠的替代容器运行时。幸运的是,Kubernetes 项目已经记录了更改节点容器运行时的过程,并以 containerd 为例。切换到其他支持的运行时的说明也类似。

我想升级 Kubernetes,并且需要保持与 Docker 作为运行时的兼容性。我有哪些选择?

别担心,你不会被置之不理,也不必承担停留在旧版 Kubernetes 的安全风险。Mirantis 和 Docker 联合发布并正在维护一个 dockershim 的替代品。这个替代品叫做 cri-dockerd。如果你确实需要保持与 Docker 作为运行时的兼容性,请按照项目文档中的说明安装 cri-dockerd。

就这样吗?

是的。只要你在面对这个版本时了解正在发生的变化以及你自己集群的细节,并确保与你的开发团队进行清晰的沟通,那么这次变动的影响将是最小的。你可能需要对你的集群、应用程序代码或脚本进行一些更改,但所有这些要求都已在文档中说明。从使用 Docker Engine 作为运行时切换到使用其他支持的容器运行时之一,实际上是移除了中间人,因为 dockershim 的目的就是访问 Docker 本身使用的容器运行时。从实践角度来看,从长远来看,这次移除对你和 Kubernetes 维护者都更有利。

如果你仍有疑问,请先查看Dockershim 移除常见问题解答