智匯華云 | 構(gòu)建華云虛擬化平臺(tái)服務(wù)容器鏡像解析 一,背景 以openstack為代表的IaaS開(kāi)源技術(shù)和以Docker為代表的PaaS/CaaS容器技術(shù)日益成熟,二者如何強(qiáng)強(qiáng)聯(lián)合,一直是業(yè)界頗為關(guān)心的焦點(diǎn)領(lǐng)域。Openstack是個(gè)大和全的IAAS開(kāi)源體系框架,涉及的技術(shù)領(lǐng)域和組件非常多;對(duì)openstack的可用性和管理維護(hù)上是最讓人頭疼的的兩個(gè)難題;我們的華云虛擬化平臺(tái)是基于openstack演進(jìn)而來(lái),必不可少的會(huì)帶有這兩個(gè)問(wèn)題,而通過(guò)docker容器化華云虛擬化平臺(tái)的管理方案解決以上兩個(gè)問(wèn)題。經(jīng)過(guò)調(diào)研和對(duì)比,華云虛擬化平臺(tái)服務(wù)容器化選用kolla進(jìn)行自動(dòng)化構(gòu)建。相比于其他部署工具,Kolla完全革新地使用了Docker容器技術(shù),將每一個(gè)華云虛擬化平臺(tái)服務(wù)運(yùn)行在不同的Docker容器中。 二,原理 Kolla是基于使用 Dockerfile + jinja2 實(shí)現(xiàn)的構(gòu)建鏡像。大致原理是Kolla 中嵌入了docker和jinja2,使用 Jinja2 模板生成 Dockerfile 文件,然后把Dockerfile文件投喂給docker進(jìn)行容器鏡像的構(gòu)建,構(gòu)建完成,還可以根據(jù)配置將鏡像推送的指定的 Registry 服務(wù)器。 (容器鏡像構(gòu)建) Jinja2模板示例: Kolla在構(gòu)建鏡像過(guò)程中可以通過(guò)讀取配置填充到j(luò)inja2的模板中,生成不同的架構(gòu)的鏡像例如X86 或ARM。 三,詳細(xì)構(gòu)建流程: 1,根據(jù)需要修改kolla-build的配置,構(gòu)建時(shí)會(huì)讀入該配置 2,生成dokcerfile時(shí)會(huì)把 docker 整個(gè)目錄復(fù)制到一個(gè)臨時(shí)的工作目錄,然后在其中掃描包含有 Dockerfile.j2 文件的文件夾,一個(gè)文件夾就對(duì)應(yīng)一個(gè)鏡像。 3,構(gòu)建鏡像列表是將上一步生成的Dockerfile 都讀取到內(nèi)存,處理里面的 FROM 語(yǔ)句,可以獲得每個(gè)鏡像的 parent 名字。還有其它一些關(guān)于安裝方式的細(xì)節(jié)也要處理,不用過(guò)多關(guān)心。這一步完成我們就得到了一個(gè)鏡像列表 4,查找和建立鏡像關(guān)系是遍歷整個(gè)鏡像列表,把它們的依賴關(guān)系整理清楚,因?yàn)槿A云虛擬化平臺(tái)服務(wù)組件很多,各個(gè)組件之間存在依賴關(guān)系,需要把他們理清楚 5,過(guò)濾出目標(biāo)鏡像列表:因?yàn)榭偣茬R像數(shù)量比較多,所以需要根據(jù)用戶提供的參數(shù)做一下過(guò)濾,過(guò)濾的參數(shù)可以通過(guò)配置文件指定 6,構(gòu)建:真正進(jìn)行容器鏡像的構(gòu)建工作,此時(shí)是根據(jù)目標(biāo)鏡像列表中的數(shù)據(jù)進(jìn)行構(gòu)建的 7,構(gòu)建完后,會(huì)反饋哪些鏡像構(gòu)建成功,哪些構(gòu)建失敗 |
|