深究Containerd源碼-3-CRIService RunPodSandbox流程分析
代碼基于v1.7.0-beta.0-89-g344da9edb?
首先看下類圖,criService中的Sandbox/Container對象都關(guān)聯(lián)containerd.Container接口,這個接口的實現(xiàn)containerd.container關(guān)聯(lián)containerd.Client,如下,結(jié)合官方的全局架構(gòu)圖,這個Client即API層到Core Services層的客戶端。


RunPodSandbox是criService注冊的GRPC服務(wù)調(diào)用,流程十分的長,總體上可分三個階段:
生成Sandbox對象
生成containerd.Container對象
準(zhǔn)備任務(wù)運行環(huán)境生成Task,并執(zhí)行Task

階段1生成Sandbox對象流程主要是根據(jù)請求信息生成ID和名稱等。

階段2首先確保Sandbox鏡像存在,不存在的話則pull拉取,核心邏輯在于通過containerd.Client調(diào)用ContainerService.Create,此處先留白分析API層邏輯,下面會詳細(xì)分析Services層邏輯

階段3首先構(gòu)建sandbox運行時所需要的目錄,然后根據(jù)網(wǎng)絡(luò)配置,如非hostNetwork則構(gòu)建網(wǎng)絡(luò)相關(guān)配置,同上具體邏輯先留白,先理順API層全局邏輯,然后通過containerd.Client調(diào)用TaskService創(chuàng)建并運行。

附日志
標(biāo)簽: