虛擬化的種類很多 Full Virtualization (Paravirtualization , Hardware-assisted virtualization) , OS-Level Virtualization ,那 LXC 算是哪種虛擬化?
LXC 提供類似於作業系統層級的虛擬化 OS-Level Virtualization ,先來看看之前所謂的 作業系統層級的虛擬化 .
作業系統層級的虛擬化是透過 VMM (Virtual Machine Monitor,也可以稱作 Hybervisor) 建立一個虛擬化的環境給虛擬機的作業系統來使用,幾乎所有的作業系統我們都可以透過這樣的方式模擬出來,但相對的是效能差以及消耗過多的系統資源.
所以 LXC 採用與 KVM 一樣的做法 (Linux 核心加入 KVM 再讓這 Linux 核心當作 VMM ,在 KVM 下的 Guest OS 對於 Linux 核心而言都只是一個 Process 行程). LXC 採用類似的方式在原作業系統中透過資源共享的方式,建立出一個獨立空間 (虛擬環境,有自己的 file system, process 與 block I/O ,network 空間) 給另外一個作業系統來使用,這邊不再稱它為虛擬機器 Virtual Machine 而是叫做 Container.
從 Linux 核心 2.6.24 之後的版本內建了 Control Group 和 Namespaces 機制,這些機制讓 LXC 可以分配 Host OS 的資源給 Containers.這種做法跟 chroot 類似.但 LXC 多了 IP address, a separate process domain, user ids 以及 dedicated access to the host’s physical resources (i.e. memory, CPU) .
那什麼是 Control Group 和 Namespaces ? TBD
The Linux kernel provides the cgroups functionality that allows limitation and prioritization of resources (CPU, memory, block I/O, network, etc.) without the need for starting any virtual machines, and also namespace isolation functionality that allows complete isolation of an applications’ view of the operating environment, including process trees, networking, user IDs and mounted file systems.
KVM 與 LXC 的差別!
主要的差別是 KVM 的虛擬機器還需要安裝作業系統之後才能執行應用程式,而 Container 與 Linux Kernel 共享核心,只需要相關程式碼 (Binaries),函式庫 (libraries),以及 根目錄架構 所建立出來的獨立環境,就可以開始執行應用程式.
在第一次新增 Ubuntu container 就會自行透過網路下載所需的 程式碼 (Binaries),函式庫 (libraries),以及 根目錄架構 環境,因為都已經打包好下載之後就可以接執行 Container,不需要額外的安裝作業系統等工作.
root@ubuntu:~# lxc-create -n ubuntu-1 -t ubuntu Checking cache download in /var/cache/lxc/trusty/rootfs-i386 ... Installing packages in template: ssh,vim,language-pack-en Downloading ubuntu trusty minimal ...
關於 LXC 的使用請參考 http://benjr.tw/93708