事实上你完全不需要感到恐慌

英文:kubernetes官网,翻译:k8s技术圈

Kubernetes 在 v1.20 版本之后将废弃 Docker 作为容器运行时。

事实上你完全不需要感到恐慌。

Docker 作为底层运行时被废弃,转而使用为 Kubernetes 创建的 Container Runtime Interface(CRI) 的运行时,Docker 生成的镜像将继续在你的集群中与所有运行时一起工作。

如果你是 Kubernetes 的终端用户,对你来说不会有太大的改变,这并不意味着 Docker 的死亡,也不意味着你不能或者不应该再使用 Docker 作为开发工具。Docker 仍然是一个非常有用的构建容器的工具,docker build 产生的镜像仍然可以在你的 Kubernetes 集群中运行。

如果你使用的是像 GKE 或 EKS 这样的托管 Kubernetes 服务,在未来的 Kubernetes 版本中删除 Docker 支持之前,你需要确保你的 worker 节点使用的是支持的容器运行时,如果你有节点定制的需求,那么你可能需要根据你的环境和运行时需求来更新它们。请与你的云服务商合作,以确保适当的升级测试和规划。

如果你要升级自己的集群,那么你还需要进行一些更改来避免集群崩溃。在 v1.20 时,你会收到 Docker 的废弃警告。当 Docker 运行时支持在 Kubernetes 的未来版本(目前计划在2021年底发布1.23版本)中被移除时,它将不再被支持,你需要切换到其他符合标准的容器运行时,如 containerdCRI-O。只需确保你选择的容器运行时支持当前使用的 docker 守护程序配置即可(例如日志)。

为什么大家都会感到困惑呢?

其实我们这里谈论的是两种不同的环境,这可能造成了大家的困惑。在你的 Kubernetes 集群内部,有一个叫做容器运行时的东西,负责拉取和运行你的容器镜像。Docker 是该运行时的一个流行选择(其他常见的选项包括 containerd 和 CRI-O),但 Docker 并没有被设计成嵌入 Kubernetes 内部,这就造成了一个问题。

你会看到,我们称之为 Docker 的东西实际上并不是同一件事情,它是一个完整的技术栈,而其中包含一个叫 containerd 的东西,这个本身就是一个高级容器运行时。Docker 非常酷也非常有用,因为它具有许多 UX 增强功能,当我们在进行开发工作的时候操作非常方便,但是 UX 增强的功能并不是 Kubernetes 所必须的,因为 Kubernetes 并不是人。

由于这个对人类友好的抽象层,你的 Kubernetes 集群必须使用另一个叫做 Dockershim 的垫片工具来间接获取它真正需要的数据。这并不是很好的一种方式,因为我们还必须去多维护一套东西,增加了复杂性。Dockershim 将在 v1.23 版本时被从 Kubelet 中移除,这也因此移除了对 Docker 作为容器运行时的支持。你可能会想,containerd 包含在 Docker 栈中,为什么 Kubernetes 还是需要一个 Dockershim 呢?

这是因为 Docker 并不符合CRI,即容器运行时接口,如果符合的话,我们就不需要这个 shim 了,也就不会发生今天这个事情了。但这并不是世界末日,你不需要惊慌–你只需要把你的容器运行时从 Docker 换成其他支持的容器运行时即可。

对开发者来说意味着什么?

作为一个开发者,Docker 对你来说仍然是有用的,在宣布这个变化之前它的所有方式都是有用的。Docker 产生的镜像并不是真正的 Docker 专用的镜像,它是一个 OCI(Open Container Initiative)镜像。任何符合 OCI 的镜像,无论你用什么工具来构建它,对 Kubernetes 来说都是一样的,containerdCRI-O 都知道如何拉取这些镜像并运行它们。这就是为什么我们有一个关于容器应该是什么样子的标准。

所以即将到来的这个变化,它会给一些人带来部分问题,但这并不是灾难性的问题,从长远来看,以后会变得更简单。如果这仍然让你感到困惑,也没太大关系 - Kubernetes 中有非常多的组件要做,没有人是100%的专家。我们的目标是确保每个人都能了解 Kubernetes,对即将发生的变化有更多的了解,希望这能解答你的大部分疑问,并安抚了一些焦虑的情绪!

原文链接:https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/

译文链接:https://mp.weixin.qq.com/s/MVSIRRzEvU9TxTe2MH0pAA

评论