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