深究Containerd源碼-7-Containerd-shim-runc-v2分析
代碼基于v1.7.0-beta.0-89-g344da9edb ?
看啟動流程,首先將流程回溯到上一章shimManager.startShim,在binary.Start流程中,會給shim增加一個start參數(shù),
此action決定了在shim啟動流程中,走到了case start,如下,通過manager.Start會再通過子進(jìn)程的方式啟動shim,將子進(jìn)程啟動的監(jiān)聽服務(wù)定制返回給containerd,實現(xiàn)containerd進(jìn)程和shim進(jìn)程解除父子關(guān)系,新的獨(dú)立shim進(jìn)程啟動ttrpc服務(wù),實現(xiàn)rpc交互。

獨(dú)立進(jìn)程的shim服務(wù),主要包括如下plugin,核心是ttrpc.v1.task,該服務(wù)實現(xiàn)了runc容器的生命周期管理功能。

展開ttrpc.v1.task,類圖如下,主結(jié)構(gòu)service實現(xiàn)了ttrpcService和TaskService接口,支持ttrpc調(diào)用,主要關(guān)聯(lián)Container結(jié)構(gòu),一個shim支持創(chuàng)建多個container,Container主要關(guān)聯(lián)Process接口,Process接口主要實現(xiàn)容器進(jìn)程的生命周期管理,由Init實現(xiàn)此接口,并關(guān)聯(lián)到go-runc項目Runc結(jié)構(gòu),Runc對于一個runc實例。

看Create流程,如下,最終是通過Cmd啟動runc create進(jìn)程。

開源的東西,不需要說明出處,就說你自己寫的