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