什麼是Image Mode Operating System
什麼是Image Mode Operating System
陳勇勳 Jacky chen
- 恆逸教育訓練中心-資深講師
- 技術分類:網路管理與通訊應用
在IT發展的長河之中我們已經習慣了「直接」在電腦上安裝軟體、修改設定檔、debug等動作,久而久之檔案系統的內容就會變的雜亂無章,與其原本設定的任務內容大相逕庭,然而就在容器技術成熟之後這樣的問題已不復存在。
什麼是容器
簡單來說就是在電腦上開啟一個封閉的空間,並將在這個空間中安裝任務所需要的軟體而非整個作業系統,那這個空間中的軟體是如何安裝的呢?

如上圖所示,我們需要撰寫一個文字檔稱為 ContainerFile,內容是用來描述在這個封閉的環境中需要安裝哪些軟體及其它事項,接著再透過image build工具製作出 Container Image,最後就可以使用這個 Container Image 來開啟一個封閉的執行環境( 開啟一個容器 ),當然囉 ! 在這個環境中就只能執行 Container Image中所包含的應用程式,那如果Container Image中有應用程式要 update時又該如何處理呢?作法是修改 ContainerFile並且重新產生新的Container Image,接著「刪除」舊的容器再以新的Container Image開啟新的容器即完成升級的動作,那之後舊容器中的資料呢 ? 這是個好問題,容器的設計就是將程式、設定檔及資料分開來存放,以 httpd為例:

我們將 httpd 的「設定檔」及「網頁資料」放在實體主機上,在啟動容器時將這檔案mount到 Container 裡頭即可,如此縱使容器被刪除了其設定檔及資料依舊保存在實體主機上。
Red Hat的巧思
容器的設計可以確保 Container Image的內容全由ContainerFile決定,不會像實體機器一樣使用一段時間後檔案系統變的雜亂無章,那實體機器的檔案系統就要繼續的雜亂無章下去嗎?
Red Hat開發了Image Mode Operating System,簡單來說就是將Container Image技術套用到實體主機,其原理與容器很像,如下圖:

一樣要撰寫ContainerFile、一樣需要 Build Image,差別在於 Build出來的image中包含了一整個完整的作業系統,其中包含了 bootloader、kernel、systemd等(稱為 Bootable Image ),接著再透過 kickstart將這個Bootable Image部置到實體主機上,待開機完成之後其檔案系統結構如下所示:

如上圖最底下這一層就是Bootable Image這個 Image是「唯讀」的,但如果磁碟是唯讀的那麼Linux系統將會無法啟動,因為Linux在開機過程會產生暫存檔,如果這些暫存檔無法建立,那麼系統將會無法啟動,而且也無法儲存「設定檔」及「資料」,因此在開機的過程 BootLoader會將「硬碟」及「記憶體」是 Layer的型態黏貼到 image之上就形成上圖的結構,其中 /etc及 /var兩個目錄會對應到硬碟,另外如果在系統上以dnf安裝/升級/移除套作時則是寫入的記憶體,因此存在 /etc 及 /var 目錄下的檔案將會永久保留,但存在記憶體內的檔案在重開機之後就會消失;如果有需要更新系統時一樣是重新編輯ContainerFile、重新 Build Image,然後將新的Image安裝到系統中 ( 一台 Image Mode的系統中可以同時存在多個 Image ),最後重新啟動電腦並在開機選單中選擇新的 Image來啟動系統即可。
Image Mode技術帶來了以下幾個好處
- 實現「開發與生產環境」的絕對一致性
因為整個系統都是透過Container Image部署出來的,因此不論換到哪裡,整個系統的內容都會是一樣的。 - 簡化了系統維運的複雜度
在 Image Mode下對 Image 內容的變更只能透過重建的方式來處理,而這個關鍵就在於如何撰寫ContainerFile - 原子化更新與快速回滾
在Image Mode下系統是以替換image來更新系統,而一台電腦中可以同時存在多個Image,只要透過開機選單就可以選擇使用哪個Image來開機 - 提升安全性與不可變基礎設施(Immutable Infrastructure)
因為 Image 是唯讀的,因此可以防堵未經授權的系統檔案竄改 - 極致的跨平台部署彈性
裸機部署:透過 kickstart虛擬機部署:可以使用工具直接將 image轉換為各種不同格式的 VM image


0 意見:
張貼留言