containerd-shim的parent进程是什么进程?

What process is the parent process of containerd-shim?

我用 minikube 设置了 2 个 k8s 环境。一个带有 --container-runtime=docker 标志,一个带有 --container-runtime=containerd 标志。这是我看到的差异。

当我设置 container-runtime=docker 时,会发生这些事情

  1. 有一个 dockerd 服务 运行ning
  2. dockerd 服务生成 containerd 作为它自己的 child
  3. /usr/bin/containerd-shim-runc-v2 个 运行 实际容器的进程,其中每个 containerd-shim-runc-v2parent 是系统上的 PID 1 .

当我设置container-runtime=containerd时,这些事情发生了

  1. 没有dockerd服务,没有歧义。
  2. 有一个 containerd 进程,它由 PID 1 拥有。再一次,这并不奇怪。
  3. containerd-shim 个进程 运行 个实际容器,每个 containerd-shim 个进程的 parent 是 containerd

这是我的问题

  1. containerd-shimcontainerd-shim-runc-v2 有什么区别?他们似乎大多采用相似的标志等
  2. 为什么在场景 1 中 shims 是 PID 1 的 children 而场景 2 shims 是 containerd 的 children ?

编辑:刚想到编辑。在 ubuntu 20 框上,如果我安装 docker,dockerd 是一个单独的进程,其 parent 是 PID 1,containerd 是一个单独的进程,其 parent PID为1,所有容器都是PID为1的container-shim-runc-v2的children?!?!为什么 containerd 不是 dockerd 的 child?这是在哪里配置的?

我深入研究了这个话题,得出以下结论和来源。

1. containerd-shim 和 containerd-shim-运行c-v2 之间有什么区别?他们似乎大多采用相似的标志等

这些只是不同的版本,containerd-shim-runc-v2containerd-shim 的最新版本。见源码here.

看起来 dockor 仍然使用 containerd-shim 而不是 containerd-shim-runc-v2。基本功能仍然与 shim 的功能相同,即 shim 监视 运行c 容器以在 运行c 完成 运行 时间时通知 containerd。

如果您担心 API 中的差异,请参考源代码。但在功能上它们只是垫片的不同版本 API.


2。为什么在场景 1 中,填充程序是 PID 1 的子项,而场景 2 中的填充程序是 containerd 的子项?

最终,它们都是 PID 1 的子代,其中填充程序是 containerd 的子代,而 containerd 是 PID 1 的子代。

This blog post 很好地概述了 k8s 和工作节点上的 运行 次。特别是,关于 Docker、containerd 和 shims 的部分将为您的问题提供更多视角。

The shim sits between the container manager and a runtime to facilitate communication and prevent integration problems that may arise. It allows for daemon-less containers. It basically sits as the parent of the container’s processes to facilitate communications, and eliminates the long running runtime processes for containers. The processes of the shim and the container are bound tightly; however, they are totally separated from the process of the container manager.

Here 是关于 containerd、垫片以及它们如何与 linux 交互的更详尽的资源。

并且 this resource 在 linux 中深入研究了 运行c、containerd 及其 PID。