Kubelet 创建一个容器时需要的步骤

Kubelet 创建一个容器时需要的步骤:

Kubelet 想要创建一个容器时,它需要以下几个步骤:

  1. Kubelet 通过 CRI(容器运行时接口,Container Runtime Interface) 接口(相当于gRPC)调用 dockershim,请求创建一个容器。 在这一步中 , Kubelet 可以视作一个简单的 CRI Client,而 dockershim 就是接收请求的 Server。目前 dockershim 的代码其实是内嵌在 Kubelet 中的,所以接收调用的就是 Kubelet 进程;
  2. dockershim 收到请求后,它会转化成 Docker Daemon 能听懂的请求,发到 Docker Daemon 上,并请求创建一个容器;
  3. Docker Daemon 早在 1.12 版本中就已经将针对容器的操作移到另一个守护进程 containerd 中了。因此 Docker Daemon 仍然不能帮人们创建容器,而是需要请求 containerd 创建一个容器;
  4. containerd 收到请求后,并不会自己直接去操作容器,而是创建一个叫做 containerd-shim 的进程,让 containerd-shim 去操作容器。 这是因为容器进程需要一个父进程来做诸如收集状态、维持 stdin 等 fd 打开工作。假如这个父进程就是 containerd,那每次 containerd 挂掉或升级后,整个宿主机上所有的容器都需要退出,但是引入了 containerd-shim 就规避了这个问题(containerd 和 shim 并不是父子进程关系);
  5. 创建容器是需要做一些设置 namespace 和 Cgroups、挂载 root filesystem 的操作。这些事已经有了公开的规范 OCI(Open Container Initiative,开放容器标准)。它的一个参考实现叫做 runc。containerd-shim 在这一步需要调用 runc 这个命令行工具,来启动容器;
  6. runc 启动完容器后,它会直接退出,containerd-shim 则会成为容器进程的父进程,负责收集容器进程的状态,上报给 containerd。并在容器中 pid 为 1 的进程退出后接管容器中的子进程,然后进行清理,确保不会出现僵尸进程。

最后说一下shim的作用:一个 shim 的职责就是作为 Adapter 将各种容器运行时本身的接口适配到 Kubernetes 的 CRI 接口上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值