生命不息,折騰不止。在折騰中成長,在踩坑中進步。linux
不錯,再一次折騰了一把,此次是把測試環境的hadoop集羣從KVM中遷移到了LXD容器中。目前運行很穩定,此次就來分享一下此次的體會和一些感覺吧。git
因爲這篇blog並非純技術文章詳細介紹LXD搭建和維護的,只是談談使用的一些感覺體會,因此不會有詳細的安裝和使用的過程了,感興趣的讀者能夠找官方文檔去實踐。不過這玩意目前來看文檔確實比較少,好在使用特別簡單。github
關於KVM可能不少人都不陌生,談到Linux下的虛擬機,津津樂道的就屬KVM和XEN了。這裏我不打算對KVM進行拓展了,關於市面上KVM的資料已經爛大街了。測試環境少不了虛擬機,經過虛擬化隔離資源的特性,能夠充分利用物理機的資源,擴充機器數量。不過當初研究KVM的時候,着實痛苦了一把。配置相對繁瑣,爲了性能還須要啓用部分硬件的半虛擬化支持,當時記得還買過一本《深度實踐KVM》研讀來着。docker
如今具體談談LXD吧。不得不說,宣傳也是很重要的一項工做,Ubuntu對這玩意的宣傳能夠說竭盡全力,不少地方都能看到LXD的消息。我我的比較喜歡Ubuntu的一些技術,平時也關注一些Ubuntu社區的動向。在我看來,ubuntu的更新節奏較快,老是能儘快的吸納新的技術用於生產,跟着Ubuntu的節奏老是能儘快的接觸到新奇有趣的東西。LXD也是ubuntu的母公司Canonical的開源項目,天然在Ubuntu的相關主頁上是各類強推的(同樣有此待遇的還有snaps安裝包,不過我還沒抽出時間去折騰,由於這玩意目前對個人吸引力還遠沒有達到LXD的地步)。並且又是容器級虛擬化的技術,在2013年末我開始自學Docker的時候就接觸過容器虛擬化技術,對我而言也不算太陌生。因爲docker的好感度,因此我對LXD的技術就比較容易接受,也比較信賴這玩意的性能(docker最先宣傳的就是容器級虛擬化的性能)。因而就有了後來的逐步探索。ubuntu
至於LXD的周邊支持問題,固然如今還無法跟流行已久的KVM,XEN相比,更別提開源新星docker了,因此想大規模用於生產的話還需謹慎考慮。目前只有nova有LXD驅動支持,也就是說能用OpenStack管理,至於其餘流行的管理工具,目前仍是空白(不過看到社區已經有人給kubernetes遞交issue請求支持LXD了)。將來也許會有更多的支持加入。centos
這是LXD官方(Ubuntu)的一篇吹噓文章: https://insights.ubuntu.com/2015/05/18/lxd-crushes-kvm-in-density-and-speed/api
老實說,也正是這些文章比較多(也許是軟文?),讓我下定決心實際應用一下。分佈式
這篇blog我並無打算詳細介紹安裝和使用方法,這些官方文檔都有,也不難,我只說說體會。工具
首先是,簡單,清爽。沒錯,安裝過程確實簡單,幾乎0配置,配置項也很少,相比kvm和xen那些繁雜的配置項來看,的確清爽了許多(原本也就是直接使用了真機的硬件,天然相比全虛擬化和半虛擬化的技術要少了好多關於硬件的參數)。安裝包容量也不大,裝一個lxd
以及lxd-client
軟件包就好了。使用也足夠簡單,命令行的那幾個參數一眼就能看出含義,不用費心的去猜測含義。oop
其次,是管理的方便。直接在命令行下就能夠同時操做本地和遠程倉庫。搭建私有倉庫也極其便利,很是相似於git的那種分佈式操做,子命令remote的使用方式和參數幾乎也跟git remote
一模一樣。在這個節點上的鏡像天生就能直接被其餘節點訪問,同時啓動成容器。
最後,是胖容器自己的一些特色。一樣是容器級虛擬化技術,docker是所謂的瘦容器
,講究一個容器只跑一個進程,這個進程的pid是1
,更像是一種臨時的,無狀態的存在,並不考慮升級和更新,而是整個替換掉。因此docker的鏡像要求通常是儘量的精簡,以減小傳輸的負載。能夠發現docker的鏡像倉庫基本提供的都是服務。而LXD基於LXC這種胖容器技術改良,給你提供的鏡像基本都是操做系統基本的rootfs,是沒有docker的這種限制的,對外的表象更像是一個完整的虛擬機。你能夠像KVM那樣,把全部的依賴以及操做系統打包成一個鏡像運行,某些依賴比較重的程序,沒法用單進程運行,不適合在docker中跑,但在LXD的容器中就沒問題了。
更令我震驚的是,LXD的鏡像不但表現的像虛擬機同樣,甚至還支持建立快照和dump內存這種虛擬機纔有的功能。LXD的快照功能是能夠連內存狀態一併保存下來的,就是那種虛擬機基本都支持的快照恢復功能。同時還支持暫停/恢復容器(pause/start)的功能,簡直虛擬機有的幾個強大的功能這玩意幾乎都有,並且比虛擬機更加輕量。
速度快。這個無需多言,用過docker的人都知道,秒級啓動。
資源在線配置,無需停機重啓。得益於容器虛擬化的輕量設計,徹底能夠在線調配資源不用重啓。我試過對運行中的容器從新分配CPU,內存,甚至調整硬盤空間等,都不用重啓容器,即改即生效。這個特性就已經比虛擬機爽太多了。
這個話題單獨拎出來講,由於這個是我最大的一個感覺。
首先先看看官方對於LXD特性支持的表格,幾乎LXD的主要特性都得ZFS來支持,同時ZFS仍是LXD的推薦存儲引擎。ZFS自己是一個很是先進的文件系統,可是一直沒有穩定到投入生產環境使用,在我印象中彷佛只有Ubuntu 16.04這個Linux髮型版才把ZFS加入了默認支持的文件系統。
要想LXD玩的爽,只能在Ubuntu 16.04以上版本體驗,想在14.04 LTS上運行,得加幾個ppa倉庫了,好比zfs-stable, lxd等等(順帶一提,中科大開源鏡像站提供ppa的反向代理加速)。一些更cool的特性好比LXD容器中運行docker容器,在線遷移容器等,甚至還要Linux內核版本4.4以上(Ubuntu 16.04自帶,Ubuntu 14.04須要安裝linux-generic-lts-xenial),而某些特性即便Ubuntu 14.04 LTS從zfs-stable這個ppa安裝了zfs模塊以後,也沒法使用。不過整體來講,Ubuntu 14.04運行LXD基本仍是夠用的,一些極少會用到的功能和特性並不影響實際體驗。
先要有一個前提認知,這是在容器中操做,資源會受到限制,不是什麼文件都能改,什麼資源都能讀取的,這個和docker是同樣的。有些權限須要開啓security.privileged: "true"
這個參數的。整體並無虛擬機那麼自由,無拘無束。不過對於測試環境只是須要簡單的隔離環境這種需求來講,是足夠用的。
第一是swap的問題。目前的lxd的容器配置參數中並未提供swap容量限制的參數,僅有enable
和disable
,即便disable
,在容器中依舊會看到swap,我諮詢過官方(見此issue),原來只是vm.swapiness=0
而已,並不是卸載掉swap。
其次是有些軟件識別可能會出現問題。好比我用的cloudera manager管理hadoop集羣,會發現容器中的內存顯示的不對,顯示出來的每一個節點都是真機的內存,而不是容器中用free
命令看到的內存,同時,羣集IO也沒法顯示,日誌中會報一些permission denied的錯誤。
最後是目前來看,提供LXD/LXC鏡像的倉庫實在是少。ubuntu天然不用多說,官方直接在ubuntu-clouds倉庫提供官方支持與維護。而其餘操做系統的鏡像基本只能在linuxcontainers.org找到一份託管,大多還不是官方維護。(順帶一提,清華大學tuna鏡像站提供LXD/LXC鏡像倉庫的鏡像加速)
總的來講,LXD仍是給了我太多驚喜,大大超出了個人預期。我已經把我的環境使用的Linux虛擬機(主要是ubuntu和centos)都換成LXD了,啓動速度快,功能一點不比虛擬機差。固然,沒圖形界面,容器中跑圖形界面也沒那麼方便,還得跑個vnc服務。
至於參考資料,仍是官方開發者的那個教學最有參考價值,國內有翻譯版本,不過沒有翻譯完: https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
之後等LXD操做更加便捷的時候也許會寫個blog詳細總結下LXD的一些操做使用。