containerd_cri_runtime相关笔记
containerd cri plugin runtime相关学习笔记 RunPodSandbox() 1.获取SandBox的Config 2.生成SandBox的ID 3.基于SandBox name,查看该SandBox名称和id是否已经存在,若存在,fail 4. 确认SandboxImage存在,首先看本地是否存在,若不存在则从源中拉取 5. 对于不使用host network的pod,创建网络命名空间 1. 生成随机NameSpace路径 6. 根据Pod config的RuntimeClass获取ociRuntime 2. 调用setupPOD创建pod的namespace 7. 基于Pod id config 和ImageSpec的config及pod的NetNSPath生成sandbox spec runtime spec 8. 将容器类型加入sandbox 的 Labels 9. 从containerd config.toml文件获取 runtime options 10. 基于Sandbox配置生成opts 函数指针列表,比如说 Snapshotter NewSnapshot Spec...... 11. container Store插件穿件container 12. 创建sandboxRootDir,根据Sandbox id 13. 创建sandbox volatile Root Dir,用于保存Sandbox状态 14. 创建/dev/shm,/etc/hosts,/etc/resolv.conf 和/etc/hostname目录,位于Sandbox的 root 目录下 15. 将Sandbox储存为INIT状态 11. 触发containerd创建NewContainer 16. 创建NewTask 17. Pod状态变更为Ready状态 StopPodSandbox() 1.通过Sandbox id从Sandbox Store Plugin中获取Sandbox信息 2. 将归属本Sandbox的container stop掉 3. umount Sandbox相关的shm目录 4. 停止Sandbox Pod Container 5. 调用cni teardownPod umount NetNS目录 RemovePodSandbox() 1.根据id从sandbox Store 获取Sandbox信息 2. 若Sandbox状态处于Ready或者Unknown,直接fail 3. 若Sandbox NetNS 路径存在,证明NetNS未被关闭,fail 4. 将Sandbox中所有container 清除 5. 确认Sandbox root dir被删除 6. 确保Sandbox state dir被删除 7. 删除sandbox中container 8. 从sandboxStore中删除Pod信息 9. 从索引中释放id --> key ListPodSandbox() 从Sandbox Store 获取SandBox列表 PodSandboxStatus() 1. 获取Pod IP 2. 获取Sandbox Status 3. 从Sandbox Store获取Pod info CreateContainer() 1. 获取container的Config 2.获取Sandbox Config 3. 通过Sandbox ID获取Sandbox 4. 通过Sandbox id获取Sandbox对应task 5.生成container ID 6. 通过container config生成container metadata,并将id<-->name对添加到NameIndex 7. 通过container metadata和sandbox config的metadata部分生成 container的名称 8.获取所在Sandbox的info,因为container的Runtime必须同所在Sandbox的runtime相同 7.本地解析Image,对于container,其进入create container之前需要保证image已经被拉 下来 8.获取container的根目录并创建目录 10. 创建container卷挂载点 9.获取container易失根目录并创建,用于存储container状态信息 11. 生成container SPec 12.生成container创建参数设置callback数组 13. 设置container的LogPath 14. 基于securityContext生成UserString,默认情况下不配置 15. 调用containerd的container service组件创建container 16. 将container信息通过container store插件保存 StartContainer() 1. 通过container store获取container信息,包括id, Metadata,Container和Config 2. 通过meta中的sandbox id从Sandbox的Store插件获取sandbox配置信息,并确认 Sandbox处于Ready状态 赋值ioCreation函数,用于创建container logger 生成container task创建的options 调用container 创建新的Task 等待XXX异步任务结束 启动containerd的task 同步container的PID和启动时间这两项状态信息 开始在后台监测container退出事件