最初的 LXC 技術是由 IBM 研發的,目前已經進入 Linux 內核主線,這意味著 LXC 技術將是目前最有競爭力的羽量級虛擬容器技術,本文將HTTP://www.aliyun.com/zixun/aggregation/ 32779.html">循序漸進地介紹在 Linux 容器的建立和管理方法。 本文使用的 Linux 發行版本本是 Ubuntu 12.04 。
LXC 專案由一個 Linux 內核補丁和一些使用者空間(userspace) 工具組成。 這些工具使用由補丁增加的內核新特性,提供一套簡化的工具來維護容器。 2.6.29 版本後的 Linux 內核版本已經包含該補丁提供的大部分功能。 所以強烈建議使用最新的內核原始程式碼。 LXC 在資源管理方面依賴 Linux 內核的 cgroups (Control Groups) 系統,cgroups 系統是 Linux 內核提供的一個基於進程組的資源管理的框架,可以為特定的進程組限定可以使用的資源。 它最初由 Google 的工程師提出,後來被整合進 Linux 內核。 cgroups 也是 LXC 為實現虛擬化所使用的資源管理手段,可以說沒有 cgroups 就沒有 LXC。 cgroups 檔案系統結構見圖 1 。
圖 1.cgroups 檔案系統結構
相關名詞解釋
控制族群(control group):控制族群就是一組按照某種標準劃分的進程。 cgroups 中的資源控制都是以控制族群為單位實現。 一個進程可以加入到一個控制族群,也可以遷移到另一個控制族群。
層級(hierarchy)。 控制族群可以組織成 hierarchical 的形式,既一顆控制族群樹。 控制族群樹上的子節點控制族群是父節點控制族群的孩子,繼承父控制族群的特定的屬性。
子系統(subsytem)。 一個子系統就是一個資源控制器,比如中央處理器子系統就是控制中央處理器時間分配的一個控制器。 子系統必須附加(attach)到一個層級上才能起作用,一個子系統附加到某個層級以後,這個層級上的所有控制族群都受到這個子系統的控制。 主要包括如下 9 個子系統:
blkio : 這個子系統為塊設備設定輸入/輸出限制,比如物理設備(磁片,固態硬碟,USB 等)。 cpu : 這個子系統使用調度程式提供對 中央處理器的 cgroup 任務訪問。 cpuacct : 這個子系統自動生成 cgroup 中任務所使用的中央處理器報告。 cpuset : 這個子系統為 cgroup 中的任務分配獨立中央處理器(在多核系統)和記憶體節點。 devices : 這個子系統可允許或者拒絕 cgroup 中的任務訪問設備。 freezer : 這個子系統掛起或者恢復 cgroup 中的任務。 memory : 這個子系統設定 cgroup 中任務使用的記憶體限制,並自動生成由那些任務使用的記憶體資源報告。 net_cls : 這個子系統使用等級識別符(classid)標記網路資料包,可允許 Linux 流量控制程式(tc)識別從具體 cgroup 中生成的資料包。 ns :ns 子系統提供了一個將進程分組到不同名稱空間的方法。 在具體名稱空間中,進程可彼此互動,但會與在其它名稱空間中運行的進程隔絕。 這些分開的名稱空間在用於作業系統級別的虛擬化時,有時也稱之為容器。
搭建第一個 LXC 虛擬電腦
本文使用的 Linux 發行版本是 Ubuntu 12.10 ,首先安裝套裝軟體:
#apt-get install lxc
安裝套裝軟體後要檢查 Linux 發行版本的內核對 LXC 的支援情況,可以使用下面命令 lxc-checkconfig 查看,見圖 2 。
圖 2.lxc-checkconfig 命令
lxc-checkconfig 命令檢查之後如果所有專案顯示「enabled」表示可以直接使用 LXC。