天天看點

lmctfy:讓我用集裝箱為你的程式打包

這項項目旨在提供一組以使用者的意圖為原點的進階api,來實作對容器概念的抽象化。這些建立的容器自身也通過繼承也可以擁有了自己的容器、也能夠被其他的使用者程式所管理。

lmctfy 内包含一個c++庫和一個cli(指令行界面程式)

<a target="_blank"></a>

編譯本程式需要使用make和g++4.7。 lmcfy使用了c++11,是以需要支援這項功能的編譯器。我們在ubuntu 12.04+ 上測試過編譯。如果有為其他環境的編譯提供支援的更新檔,我們很高興而且希望這越多越好。

lmctfy 依賴下列幾個庫,需要這些庫存在于你的計算機系統裡。

<a href="https://code.google.com/p/protobuf/" target="_blank">protocol buffers</a>

<a href="https://code.google.com/p/gflags/" target="_blank">gflags</a>

<a href="https://code.google.com/p/re2/" target="_blank">re2</a>

編譯lmctfy的cli:

make -j &lt;線程數&gt; lmctfy

cli程式會生成在 bin/lmctfy/cli/lmctfy

編譯lmctfy的庫:

make -j &lt;線程數&gt; liblmctfy.a

庫檔案會生成在 bin/liblmctfy.a.

編譯和運作所有的ui測試:

make -j &lt;線程數&gt; check

為了運作lmctfy,我們必須首先初始化計算機。這隻需要運作一次就可以,而且一般是在計算機第一次啟動時候就完成了。當cgroup的hierarchies已經挂載了,接下來通常一個空的配置會可以讓lmctfy自動監測到目前的挂載。

lmctfy init ""

這樣,機器就可以被lmctfy使用、進行容器的操作。

容器的命名系統簡化了檔案系統的路徑,因為以後隻需要一系列容器的繼承(容器的容器、子容器、子子容器)就可以了───O(≧∇≦)O──── 。

容器名稱允許的字元集:

英文字母+阿拉伯數字 ([a-za-z0-9]+)

下劃線 (_)

橫縣 (-)

英文句号 (.)

絕對路徑是從容器(比如是/sys/subcont)的根目錄(/)開始計算的。容器的名字也可以是相對的(比如subcont)。一般地(除非特殊情況說明),都是沿用一般的檔案路徑方式。

例子

建立一個容器:

lmctfy create &lt;名稱&gt; &lt;參數&gt;

例子 (建立一個記憶體限制在100mb的容器):

lmctfy create memory_only "memory:{limit:100000000}"

銷毀一個容器:

lmctfy destroy&lt;名稱&gt;

從根目錄遞歸顯示目前機器的所有容器:

lmctfy list containers -r /

你也可以隻列出目前的子容器:

lmctfy list containers

在一台容器中運作指令:

lmctfy run &lt;名稱&gt; &lt;指令行&gt;

例子:

lmctfy run test "echo hello world"

lmctfy run /test/sub bash

lmctfy run -n /test "echo hello from a daemon"

鍵入lmctfy help檢視全部的指令和文檔

lmctfy項目通過兩個層(cl1、cl2)來實作一個容器棧。cl1圍繞着驅動程序,并執行cl2制定的容器政策。cl1會為更高層建立和維護容器的抽象。她應當是唯一直接和核心交流以維護容器的層。 cl2發展和設定容器政策,她使用cl1來執行政策和操控容器。比如,cl2(背景程序)實作了一個政策:所有容器的cpu和記憶體使用總和不可以超過現提供的cpu和記憶體資源(以防止對記憶體資源的過度使用)。為了執行這條政策,她(cl2)會使用cl1(library/cli)來建立帶這條記憶體限制規則的容器。另一條對應的政策可能包括了允許過度使用x%的機器資源或者對不同資源的多重層次控制。

lmcfty項目現在提供了cl1元件,cl2還沒有實作。

現在隻提供高性能cpu和記憶體隔離。在我們的路線圖中我們還需要實作以下幾項:

磁盤io隔離: 這部分幾乎完成了,但是我們還缺少控制器和資源處理器。

網絡隔離: 這部分和cgroup實作還在計劃中。

命名空間支援: 給所有命名空間支援并且整合到相關的資源中。

根檔案系統支援: 識别并建立根檔案系統。

磁盤鏡像: 可以導入和導出容器的根檔案系統的鏡像。

支援暫停/繼續: 使用繼承的freezer。

還原點恢複: 可以建立還原點并恢複到不同機器的容器中。

最基礎的cl2 應當有一個容器政策來保證在機器不允許超載運作情況下的資源合理配置設定。我們的目标是cl2最終實作提供不同層次的服務。在這個架構下一些層次可以比其他的獲得更多好的服務。

監控和統計支援。

管理功能和功能檢查。

服務的品質保證和執行。

lmctfy 最初的設計和實作是在一個自定義的核心上(一個原生linux核心外加一些列自選的更新檔)上。由此,一些特性在這些核心更新檔上跑得最理想。但是lmctfy應該在沒有他們得情況下正常運作。她應當監測可用得核心支援并且與之适應。我們已經在原生的 ubuntu 的 3.3 和 3.8 系列核心上測試過。如果你發現在其他版本核心下的問題,請彙報。

一些相關的核心更新檔:

cpu 延時: 這個更新檔為cpu hierarchy增加了cpu.lat的cgroup 檔案。她限制了cgroup能預測的cpu喚醒延時時間。

cpu 柱狀圖統計: 這個更新檔為cpuacct hierarchy增加了cpuacct.histogram cgroup 檔案。她為cpu計劃行為提供了多種柱狀圖方案。

oom 管理: 一系列的更新檔,用于在記憶體用盡的情況下執行優先權。

  原文釋出時間為:2013-10-04

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀