Kubernetes 取消了对 Docker 的支持但支持 containerd(它是 Docker 的一部分),这意味着什么?

San*_*ngh 4 docker kubernetes containerd

Kubernetes 取消了对 Docker 的支持,但支持 Containerd,这意味着什么?Docker 开发了containerd 并用它来管理容器。

有2个不同的containerd吗?

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

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

dan*_*orn 7

简而言之

\n\n
\n

Docker 作为底层运行时已被弃用,取而代之的是使用为 Kubernetes 创建的容器运行时接口 (CRI) 的运行时。Docker 生成的映像将一如既往地在您的\n集群中的所有运行时中继续工作。

\n
\n

较长的答案

\n

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

\n

另一方面,Docker 的功能远不止于此。它是一个多功能工具,既可以创建 OCI 兼容的映像,也可以运行它们。当 Docker 拉取或运行映像时,它会使用 containerd。

\n

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

\n

Docker 附带的额外功能(例如创建映像等)对于 Kubernetes 来说几乎没有价值,因为 Kubernetes 只关心拉取映像和运行容器。事实上,Docker 没有实现 CRI,这使得 Kubernetes 支持 Docker 作为运行时变得不必要的复杂,因为它只需要 Containerd 运行时。

\n
\n

[...]

\n

Docker 很酷而且很有用,因为它有很多用户体验增强功能\n这使得它对人类来说真的很容易

\n

[...]

\n

由于存在这种人性化的抽象层,您的 Kubernetes\n集群必须使用另一个名为 Dockershim 的工具来获取它\n真正需要的东西,即 containerd。\xe2\x80\x99s 不太好,因为它给了\n另一个必须维护并且可能会损坏的东西。\n这里实际发生的情况是 Dockershim 早在v1.23 版本,因此删除了对 Docker 作为容器运行时的支持。您可能会想,如果 Docker 堆栈中包含了 Containerd,为什么 Kubernetes 需要 Dockershim?

\n

Docker 与 CRI(容器运行时接口)兼容。如果是的话,我们就不需要垫片,这也不会成为一个问题

\n
\n

引用摘自文章《别惊慌:Kubernetes 和 Docker》

\n