CRI工作在kubelet与container runtim之间,其实就是三组gRPC的接口,其中Sandbox 接口为Container提供一定的运行环境,包括pod的网络等;Container接口包括容器生命周期的具体操作;Image接口则提供对镜像的操作。常见的容器运行时有docker、containnerd等。
PodSandbox是K8s为兼容不同运行时环境预留的空间,即 K8s 允许 low-level runtime 依据不同的是实现去创建不同的 PodSandbox,对于kata来说PodSandbox就是虚拟机,对于docker来说就是Linux namespace。当Pod Sandbox建立起来后,Kubelet就可以在里面创建用户容器;当删除Pod时,Kubelet 会先移除Pod Sandbox然后再停止里面的所有容器。在默认情况下,Pod Sandbox 其实就是 pause 容器。Kubelet 代码引用的 defaultSandboxImage 其实就是官方提供的 gcr.io/google_containers/pause-amd64 镜像。