kubelet创建容器的步骤

1、Kubelet 通过 CRI 接口(gRPC)调用 dockershim,请求创建一个容器。CRI 即容器运行时接口,目前 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就规避了这个问题;

5、我们知道创建容器需要进行设置 namespaces 和 cgroups,挂载 root filesystem等操作,而这些事该怎么做已经有了公开的规范了,那就是开放容器标准OCI,OCI的一个参考实现就是 runC。于是containerd-shim 需要调用 runC 这个命令行工具,来进行设置 namespaces 和 cgroups,挂载 root filesystem等操作进而启动容器;

6、runC 启动完容器后本身会直接退出,containerd-shim 则会成为容器进程的父进程,负责收集容器进程的状态,上报给containerd,并在容器中pid为1的进程退出后对容器中的子进程进行清理,确保不会出现僵尸进程。

备注:shim垫片其实就是适配器Adapter,用于将各种容器运行时本身的接口适配到 Kubernetes 的 CRI 接口上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值