CRI 规范中,创建 Pod 的主流程大概是:
- kubelet 调用 CRI RunPodSandbox 接口,通常来说就是创建 pause 容器,准备 network ns 之类的操作
- 根据 Pod 定义的容器,调用 CreateContainer 和 StartContainer 接口运行容器
这里其实可以看到创建容器和启动容器是两个操作,对应到 containerd 中的实现,创建容器是创建了容器元数据,而启动容器才实际启动了容器进程。对应 containerd 中 container 和 task 的概念。
cri、OCI