您當(dāng)前的位置是:  首頁(yè) > 新聞 > 文章精選 >
 首頁(yè) > 新聞 > 文章精選 >

用Buildroot創(chuàng)建OpenStack Ironic部署鏡像

2017-08-16 11:09:36   作者:Jonathan Zhang    來(lái)源: 開(kāi)源云中文社區(qū)   評(píng)論:0  點(diǎn)擊:


  Ironic是一個(gè)OpenStack項(xiàng)目,它提供裸機(jī)(而不是虛擬機(jī))。
  一個(gè)稱為Ironic Python Agent(IPA)的工具用于控制和配置這些物理節(jié)點(diǎn),執(zhí)行擦除機(jī)器和將鏡像寫入磁盤等任務(wù)。這是通過(guò)引導(dǎo)自定義的Linux內(nèi)核和運(yùn)行IPA并連接到Ironic Conductor的initramfs鏡像來(lái)完成的。
  Ironic項(xiàng)目通過(guò)Disk Image Builder支持幾個(gè)不同的鏡像構(gòu)建器,包括CoreOS、TinyCore等。
  然而,這些鏡像構(gòu)建器都有限制,例如,它們需要root權(quán)限,它們的大小都是幾百兆字節(jié)(除了TinyCore)。TinyCore的缺點(diǎn)之一是硬件支持有限,雖然它不在生產(chǎn)中使用,但它被用于OpenStack門控測(cè)試(在具有大約300MB RAM的虛擬機(jī)中啟動(dòng))。
  大型部署鏡像意味著節(jié)點(diǎn)的配置時(shí)間較長(zhǎng),因此筆者開(kāi)始創(chuàng)建一個(gè)小型、可定制的鏡像,以解決其他現(xiàn)有鏡像的問(wèn)題。
  Buildroot
  筆者選擇使用Buildroot,這是一個(gè)大家都認(rèn)為易于使用的、構(gòu)建嵌入式Linux鏡像的工具。
  到目前為止,它作為一個(gè)概念驗(yàn)證是相當(dāng)成功的。
  Linux內(nèi)核是2MB
  壓縮的initramfs映像是25MB
  通過(guò)OpenStack Ironic門控測(cè)試
  高度可定制(多虧了Buildroot)
  可以通過(guò)menuconfig系統(tǒng)進(jìn)行定制,類似于Linux內(nèi)核。
  Buildroot menuconfig
  源代碼
  用于構(gòu)建鏡像的所有源代碼都位于ipa-buildroot存儲(chǔ)庫(kù)中筆者的GitHub帳戶(https://github.com/csmart/ipa-buildroot)上。筆者還寫了一些文檔,用于引導(dǎo)你完成整個(gè)構(gòu)建和定制過(guò)程。
  ipa-buildroot存儲(chǔ)庫(kù)包含IPA特定的Buildroot配置,并跟蹤Git子模塊中的上游Buildroot。通過(guò)使用上游Buildroot和外部存儲(chǔ)庫(kù),IPA Buildroot配置作為常規(guī)Buildroot構(gòu)建的選項(xiàng)出現(xiàn)。
  在Buildroot 默認(rèn)配置列表中的IPA
  Buildroot將編譯內(nèi)核和initramfs,然后發(fā)布構(gòu)建腳本克隆Ironic Python Agent存儲(chǔ)庫(kù)并為目標(biāo)創(chuàng)建Python Wheels。
  以下最終鏡像將在。/output/images下找到:
  • bzImage(內(nèi)核)
  • rootfs.cpio.xz(ramdisk)
  • rootfs.iso9660(ISO鏡像)
  這些文件可以上傳到Glance與Ironic一起使用。
  自定義
  Buildroot允許你自定義構(gòu)建參數(shù)、目標(biāo)initramfs和Linux內(nèi)核。這樣做也很簡(jiǎn)單,每次運(yùn)行make時(shí),它會(huì)回到你離開(kāi)的地方,重新創(chuàng)建你的鏡像。
  該構(gòu)建腳本直接獲取Ironic Python Agent,使得構(gòu)建高度靈活地獲取要使用的確切版本。你可以通過(guò)在Buildroot的menuconfig中自定義設(shè)置來(lái)指定Ironic Python Agent和需求存儲(chǔ)庫(kù)的位置和分支。
  設(shè)置Ironic Python Agent和Requirement位置、Git版本
  筆者從頭開(kāi)始(使用tinyconfig)創(chuàng)建了內(nèi)核配置,并故意努力實(shí)現(xiàn)平衡大小和功能。應(yīng)該在大多數(shù)基于Intel的計(jì)算機(jī)(BIOS和UEFI)上引導(dǎo),但對(duì)硬盤和以太網(wǎng)控制器等硬件的支持被故意限制。我們的目標(biāo)是從小開(kāi)始,再根據(jù)需要增加更多支持,因此可能需要修改才能在你的硬件上工作。
  使用imagebuild腳本自動(dòng)構(gòu)建
  手動(dòng)進(jìn)行構(gòu)建是很好的,因?yàn)樗兄诹私馄唇舆^(guò)程,但是手動(dòng)涉及的更多。
  Ionic Python Agent(IPA)repo有一些鏡像創(chuàng)建腳本,這使得構(gòu)建CoreOS和TinyCore鏡像非常簡(jiǎn)單。筆者現(xiàn)在提供一些補(bǔ)丁,來(lái)增加對(duì)創(chuàng)建Buildroot鏡像的支持。
  這些補(bǔ)丁包含幾個(gè)腳本,其中包括手動(dòng)構(gòu)建方法和一個(gè)Makefile來(lái)將它們整合在一起。只有install-deps.sh腳本需要root權(quán)限,而且如果它檢測(cè)到?jīng)]有依賴關(guān)系,其他所有Buildroot任務(wù)將作為非特權(quán)用戶運(yùn)行。這是Buildroot方法的一大優(yōu)點(diǎn)!
  再次強(qiáng)調(diào),筆者已經(jīng)在repo中包含了文檔(https://github.com/csmart/ironic-python-agent/tree/buildroot/imagebuild/buildroot#buildroot-ironic-python-agent),所以請(qǐng)參閱有關(guān)如何構(gòu)建和自定義鏡像的更多細(xì)節(jié)。但總的來(lái)說(shuō),做這個(gè)是很簡(jiǎn)單的:
  這些操作將自動(dòng)執(zhí)行以下任務(wù):
  • 獲取Buildroot Git存儲(chǔ)庫(kù)
  • 加載默認(rèn)的IPA Buildroot配置
  • 下載并驗(yàn)證所有源代碼
  • 構(gòu)建工具鏈
  使用工具鏈構(gòu)建:
  • 系統(tǒng)庫(kù)和軟件包
  • Linux內(nèi)核
  • 用于IPA和依賴關(guān)系的Python Wheels
  創(chuàng)建內(nèi)核、initramfs和ISO鏡像
  默認(rèn)配置指向上游IPA Git存儲(chǔ)庫(kù),但是你可以將其更改為指向任何你喜歡的repo和提交。 例如,如果你正在處理IPA,你可以將Buildroot指向當(dāng)?shù)氐腉it repo,然后構(gòu)建并引導(dǎo)該鏡像進(jìn)行測(cè)試。
  幫助
  • 要查看可用的Makefile目標(biāo),只需運(yùn)行幫助目標(biāo):
  • make help
  如果你輸入-help選項(xiàng),那么shell腳本也可以提供幫助:
 
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專題