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

您的集群准备好迎接 v1.24 了吗?

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

首先,这是否会影响到您?

如果您是自行构建集群或不确定此移除是否会影响您,为了安全起见,请检查您是否有依赖 Docker Engine 的情况。请注意,使用 Docker Desktop 构建应用容器与您的集群是否依赖 Docker 无关。由 Docker 创建的容器镜像符合开放容器计划 (OCI) 标准,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 移除常见问题