Pod由一组应用容器组成,其中包含共有的环境和资源约束。在 CRI里,这个环境被称为PodSandbox。Kubernetes有意为容器运行时留 下一些发挥空间,它们可以根据自己的内部实现来解释PodSandbox。对 于Hypervisor类的运行时,PodSandbox会具体化为一个虚拟机。其他例 如Docker,会是一个Linux命名空间。在v1alpha1 API中,kubelet会创建 Pod级别的cgroup传递给容器运行时,并以此运行所有进程来满足 PodSandbox对Pod的资源保障。 在启动Pod之前,kubelet调用RuntimeService.RunPodSandbox来创建
环境。这一过程包括为Pod设置网络资源(分配IP等操作)。 PodSandbox被激活之后,就可以独立地创建、启动、停止和删除不同的 容器了。kubelet会在停止和删除PodSandbox之前首先停止和删除其中的 容器。
kubelet的职责在于通过RPC管理容器的生命周期,实现容器生命周 期的钩子,存活和健康监测,以及执行Pod的重启策略等。
RuntimeService服务包括对Sandbox和Container操作的方法,下面的 伪代码展示了主要的RPC方法: