當Unikernel遇上Docker,會發生什么?
本文主要是對在巴塞羅那舉辦的DockerCon大會上介紹的Unikernel的總結。Unikernel是一種新的容器化發展方向,使用Rump Kernels構建Rump Kernels微服務,可以像傳統的容器一樣管理使用,能充分利用到現有容器生態系統的優點。
今天,在歐盟巴塞羅那舉辦的DockerCon大會上,Unikernel閃亮登場!
作為閉幕黑科技主題keynote的一部分, Anil Madhavapeddy( MirageOS項目負責人),展示了如何像其他任何容器一樣使用Unikernel。他先用Docker創建了一個unikernel微服務,然后接著部署了一個真正的Web應用,數據庫、Web服務和PHP代碼運行在使用 Rump Kernels構建的隔離的unikernel微服務上。Docker像管理Linux容器一樣管理Unikernel,但是不用再部署一個傳統的操作系統!
這種集成使得各地的開發者都可以使用Unikernel,并把容器生態中熟悉的工具和實際工作流與Unikernel改進的安全性、效率和專業化 結合起來。在這篇文章中我們會透露讓你如何參與其中的更多細節,不過在我們進入Anil演示的更多細節前,我們先了解一些關于Unikernel的背景以 及為什么可以這樣使用Docker。
為什么是Unikernel?
隨著公司開始使用云計算,對單一用途的機器映像一直處于增長趨勢,但很顯然這還有巨大的改進余地。當前,每臺運行應用的虛擬機都必須有一個操作系統副本,特別是對隔離要求高的應用。運行在虛擬機上的應用程序也受到操作系統漏洞影響,包括那些與應用日常功能毫無關系的漏洞。例如,USB驅動-存在于操作系統但是與云部署毫無關系-這個驅動有 多個漏洞,允許執行任意代碼。修補這樣的漏洞是一個完全沒必要的維護負擔。
Unikernel采取不同的方法:應用代碼只與它需要用來創建一個專業,單地址空間機器鏡像相關的OS組件鏈接— 這樣就減少了不必要的代碼。使用'操作系統庫'的技術創建,與傳統的操作系統相比Unikernel提供很多好處,包括:
- 改進的安全性 - Unikernel不包含與部署無關的代碼,大大減少應用程序的攻擊面。
- 更小的空間 - unikernel代碼通常要比傳統當量小幾個數量級,并且可以更容易地進行管理。
- 細粒度優化 - 由于Unikernel通過一個關聯的編譯器工具鏈構建,可以在設備驅動程序和應用程序邏輯層面進行全系統優化,無形中更提高了專業化。
- 快速啟動時間 - 由于Unikernel可以在不到一秒鐘啟動,資源分配會變得更加動態。 </ul>
這些好處與 微服務和'不可變基礎設施'發展理念尤其相關-虛擬機被視為一次性消耗品并可定期從版本庫的代碼重新分配。這樣的虛擬機是不允許直接修改的:所有的更改必須通過修改源代碼進行。
Unikernel自然借用了微服務架構和不可變基礎設施的概念:源代碼和生成的二進制是緊密關聯的,可以輕松控制版本。如果說傳統的棧,使我們走向微服務,那么Unikernel將推動我們走向不變的nanoservices世界。
雖然Unikernel提供了一種方式,但是在生產配置中采用它們還有很大的挑戰。unikernel生態系統才剛剛興起,并且這種新技術需要適應現有的工作流程和工具。
進入Docker!
為什么是Docker?
Linux的容器通過允許在傳統操作系統為其上的多個'容器化'應用程序提供功能,已經讓開發者更快地邁向微服務。這些容器相互隔離,因此可以單獨替換或修改,這也是微服務架構模式的核心。雖然容器技術出來已經有一段時間了,而且應用的步伐也在快速增長。從過去幾年可以看到,工具的激增包括鏡像庫,編排工具等等,使得容器更易于大規模使用。在Docker的帶領和培育下,建設了一個充滿活力、開放和欣欣向榮的生態系統,幫助改善了每個人的開發工作流程。
隨著越來越多的支持工具和基礎設施,可以明確看出生態系統已經不僅僅是Linux容器本身了。Unikernel是否適合這個生態系統?如果適合,Unikernel與容器有什么關聯?
容器和Unikernel其實是一體的。一方面,在最上層,我們使用傳統方法在一個VM中運行一個包括單一應用的全OS棧。下一步自然是在OS上 使用容器,這會有更好的資源使用體驗并允許每個應用更加自包含。如果從這個角度來看,Unikernel只是在這條道路上又邁出的一步,可以被看作是極端 的、自包含的應用程序。現在我們面臨的挑戰是讓Unikernel與容器一樣簡單易用。
應對這一挑戰的第一步是將Unikernel與現有容器基礎設施,特別是Docker工具和生態系統集成。
利用廣泛使用和大家都理解的包模型和運行框架,把Unikernel看作只是另一種類型的容器,這將幫助我們讓各地的開發人員都用上Unikernel。
它還使得Unikernel可以使用整個容器生態的工具,包括業務流程和其他任何可用的。采用現有的工具鏈將加速Unikernel的進程,同時 也展現了Docker生態系統的靈活性和廣度。通過使用Docker抽象掉了底層操作系統的復雜性,開發人員可以選擇如何'containerise'他 們的應用程序,無論是針對一個傳統的Linux容器,或者一個新的unikernel'容器'。
DockerCon演示
也正是這些最初的步驟使開發人員能夠利用現有的Docker工具,構建和運行unikernel微服務,正像今天Anil在DockerCon的演示一樣!首先,他用Docker創建一個unikernel微服務,然后他啟動Unikernel集群部署包括數據庫,Web服務和PHP代碼的Web應 用。整個構建系統包含在一個易于使用的Dockerfile,每個微服務變成一個專門unikernel。這些Unikernel在自己有硬件保障的 KVM虛擬機上運行。Docker像管理Linux容器一樣管理unikernel容器和網絡!
這些早期的工作使得Unikernel實現了像Docker部署方式一樣的可用目標!既然現在Unikernel可以通過Docker進行管理,那么它就可以為Unikernel帶來所有現有生態系統編排和管理方面的優點。
該演示包括Nginx,MySQL和PHP,LAMP環境典型的幾個組件。這些沒有改動過的,現成的組件采用Docker工具鏈使用 Unikernel創建,而不是用典型的操作系統!為了運行這些特定的應用,為這些Unikernel創建了一個集群。觀看下面視頻了解更多詳情!
視頻
參與其中!
這里描述的演示僅僅是個開始。Unikernel實現有很多種,并有大量的工作要做,以確保它們都能獲得集成后的好處,同樣提升Docker充分利用這些新技術的能力。 查看相關的unikernel項目,并向這篇博客貢獻你的體驗吧!感謝 Anil、 Balraj、 David, Jeremy Justin、 Martin、 Mindy、 Thomas他們對初稿的意見。
原文鏈接:Unikernels, meet Docker! (翻譯:朱高校)來自
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!