【问题标题】:What does it mean that Kubernetes removed support for Docker but supports containerd (which is part of Docker)?Kubernetes 移除了对 Docker 的支持但支持 containerd(它是 Docker 的一部分)是什么意思?
【发布时间】:2021-11-09 16:55:00
【问题描述】:

Kubernetes 移除了对 Docker 的支持但支持 containerd 是什么意思。 Docker 开发了 containerd 并使用它来管理容器。

有两种不同的容器吗?

  1. kubernetes 支持的一种
  2. docker 使用的另一个

如果不是,那么为什么 kubernetes 不能与 Docker 守护进程使用的 containerd 通信/使用?

【问题讨论】:

  • 请阅读文章@danielorn 参考资料。除非您是任何类型的 Kubernetes 开发人员(或监控软件开发人员),否则它不会对您产生负面影响,因为 Kubernetes 仍然运行 Docker 创建的映像。

标签: docker kubernetes containerd


【解决方案1】:

总之

  • containerd 是 Docker 的一部分(拉取和运行镜像的部分)
  • 由于 Kubernetes 只关心拉取和运行镜像而不是创建它们,因此支持 Docker(它不实现 CRI)作为运行时没有什么意义,而 containerd(实现 CRI)是唯一的东西需要
  • 即使 Kubernetes 不再支持 Docker 作为容器运行时,使用 docker 创建的映像仍然可以在 Kubernetes 中运行,因为它们遵循 OCI-spec

Docker 作为底层运行时已被弃用,取而代之的是 使用容器运行时接口 (CRI) 创建的运行时 Kubernetes。 Docker 生成的图像将继续在您的 与所有运行时一样的集群。

更长的答案

containerd 是一个容器运行时,它是一个用于拉取镜像、管理网络、存储和启动容器的软件(使用runc)。还有其他容器运行时,例如 cri-o 也可用于此目的。这些容器运行时可以处理遵循 OCI 规范的任何图像,这是容器图像格式的规范。

另一方面,Docker 远不止这些。它是一个多功能工具,既可以创建符合 OCI 标准的图像,也可以运行它们。当 Docker 拉取或运行镜像时,它使用 containerd。

Kubernetes 严重依赖插件架构,其中存储、网络等各种需求都可以通过任何遵循 Kubernetes 指定接口的实现来满足。对于容器运行时,Kubernetes 定义了容器运行时接口 CRI,任何实现该接口的容器运行时都可用于在 Kubernetes 中拉取镜像和启动容器

Docker 附带的额外功能,如创建镜像等,对 Kubernetes 来说几乎没有价值,它只关心拉取镜像和运行容器。 Docker 没有实现 CRI 的事实使得 Kubernetes 支持 Docker 作为运行时变得不必要的复杂,而它所需要的只是容器化运行时。

[...]

Docker 很酷而且很有用,因为它有很多 UX 增强功能 这对人类来说真的很容易

[...]

由于这个人性化的抽象层,您的 Kubernetes 集群必须使用另一个名为 Dockershim 的工具来获得它 真正需要的,就是containerd。这不是很好,因为它给了 我们另一个必须维护并且可能会损坏的东西。 这里实际发生的是 Dockershim 正在被删除 早在 v1.23 版本中就来自 Kubelet,它删除了对 结果,Docker 作为容器运行时。你可能在想 自己,但如果容器包含在 Docker 堆栈中,为什么 Kubernetes 需要 Dockershim?

Docker 不符合容器运行时接口 CRI。如果 是的,我们不需要垫片,这不会是一件事

引用摘自文章Don't Panic: Kubernetes and Docker

【讨论】:

  • 感谢您的见解。 kubernetes 1.22 仍然可以与 dockerd 捆绑的 contianerd 一起使用吗?
  • containerd 是容器化的,无论它是否与 docker 捆绑在一起。自 Kubernetes 1.10 以来,containerd 一直是受支持的容器运行时,并将继续如此。但是,计划在 1.22 版中删除对 Docker 作为运行时的支持。之后,不再可以将 Kubernetes 配置为使用 Docker 作为运行时,而是需要使用 containerd(或其他符合 CNI 的运行时)。具体如何配置containerd请看:kubernetes.io/docs/setup/production-environment/…
猜你喜欢
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多