ZFS是下一代的文件系統(tǒng),支持了很多存儲高級特性,如卷管理、快照、和校驗、壓縮和重復刪除技術、拷貝等。
  ZFS由Sun公司創(chuàng)建,現(xiàn)屬于Oracle,ZFS是開源的,并基于CDDL license。因為CDDL和GPL不兼容,ZFS不能加入Linux kernel主線。然而,ZFS On Linux(ZoL)項目提供kernel模塊和用戶空間程序,這些都可以單獨的安裝。
  ZFS on Linux(ZoL)是一項成熟的技術,但是,現(xiàn)在卻不建議在產(chǎn)品中使用zfs存儲驅(qū)動,當然,除非你對ZoL有著豐富的經(jīng)驗。
  注意:在Linux平臺上,有ZFS的FUSE實現(xiàn),它可以和Docker結合起來使用,但是卻不推薦這樣使用。原生的ZFS驅(qū)動(ZoL)被測試得更多,更有效率,也更廣泛地被使用。下面的內(nèi)容也指的是原生的ZFS驅(qū)動。

鏡像分層和共享

  Docker的zfs存儲驅(qū)動使用了ZFS驅(qū)動的三個組件:
   ●文件系統(tǒng)
   ●快照
   ●克隆
  ZFS系統(tǒng)提供超配特性,通過按需分配操作從ZFS池(zpool)分配空間??煺蘸涂寺∈荶FS系統(tǒng)某個時間點的拷貝,較節(jié)省空間。快照是只讀的,而克隆是讀寫的,克隆只能通過快照來創(chuàng)建。下圖顯示了它們之間這種簡單地關系。
  
  圖中的實線顯示了創(chuàng)建了克隆的過程。第一步創(chuàng)建了一個文件系統(tǒng)的快照,第二步通過快照創(chuàng)建了一份克隆。虛線顯示了克隆、文件系統(tǒng)和快照之間的關系。這三個ZFS組件都從同一個下層的zpool申請空間。
  在Docker host上使用zfs存儲驅(qū)動。鏡像的基礎層就是一個ZFS文件系統(tǒng),每個子層都是底層ZFS快照的一個ZFS克隆,容器就是一個ZFS克隆,它基于其鏡像最頂層的ZFS快照。所有的ZFS組件都從同一個zpool分配空間。下圖顯示了一個基于兩層鏡像的容器是如何使用這些ZFS組件的。
  
  結合上圖,下面的過程解釋了鏡像是如何分層的,容器是如何創(chuàng)建的。
   ?在Docker host中,鏡像的基礎層是一個ZFS文件系統(tǒng)。
   文件系統(tǒng)從zpool中消耗空間。
   ?附加的鏡像層是其下層鏡像的克隆。
   圖中,“Layer 1”是通過創(chuàng)建基礎鏡像的ZFS快照,然后再通過快照創(chuàng)建克隆來實現(xiàn)的??寺∈强勺x寫的,并且從zpool按需分配空間;而快照是只讀的。
   ?當容器啟動時,就會在鏡像層上附加一個可讀寫層。
   上圖中,制造了一個鏡像頂層的快照,然后再基于快照創(chuàng)建了一份克隆,而這份克隆就是容器的可讀寫層。
   如果需要改變?nèi)萜?,那么久會從zpool按需分配空間給容器,ZFS默認會分配128K大小的塊。
  這種從只讀快照創(chuàng)建子層和容器的方法,使得鏡像作為不可變對象來維護。

網(wǎng)友評論