天天看點

LXC 虛拟化技術

Linux Container

是一個作業系統層的輕量級虛拟化技術,百度、騰訊等網際網路公司的PaaS平台大多都采用了這項新技術。和XEN,VMware和KVM等硬體抽象層的虛拟化技術相比,LXC更像是加強版的chroot。因為Linux Containers不但沒有對硬體裝置進行仿真(指令集模拟),還可以使用主機的目錄和檔案等資源。容器可以在核心 CPU 本地運作指令,而不需要任何專門的解釋機制。是以,與傳統的HAL(硬體抽象層)層次的虛拟化技術相比有以下優勢:

a). 更小的虛拟化開銷。LXC的諸多特性基本由核心特供,相當于一個加強版的chroot,開銷相比HAL的虛拟化小了很多。

b). 快速部署。利用LXC來隔離特定應用,隻需要安裝LXC,即可使用LXC相關指令來建立并啟動容器來為應用提供虛拟執行環境。傳統的虛拟化技術則需要先建立虛拟機,然後安裝系統,再部署應用。

LXC項目本身隻是一個使用者空間的工具集(Userspace tools for the Linux Kernel containers),用來使用和管理LXC容器。LXC在資源管理方面依賴與Linux核心的cgroups子系統,cgroups子系統是Linux核心提供的一個基于程序組的資源管理的架構(參見我之前的一篇文章之前的cgroup簡介),可以為特定的程序組限定可以使用的資源。LXC在隔離控制方面依賴于Linux核心的namespace特性,具體而言就是在clone時加入相應的flag(NEWNS NEWPID等等)。

LXC與Docker關系:http://www.tiejiang.org/4883.html

CentOS 6 安裝使用 LXC

http://windchasereric.blog.51cto.com/5419433/1759052

環境:CentOS 6.5 x64

##安裝rpel

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

##安裝LXC

yum install libcgroup lxc lxc-libs lxc-templates bridge-utils --enablerepo=epel

##配置LXC橋接方式

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

vim /etc/sysconfig/network-scripts/ifcfg-br0 

[root@localhost network-scripts]# cat ifcfg-br0 

DEVICE=eth0

HWADDR=00:0C:29:F5:79:81

TYPE=Ethernet

UUID=edcf6721-480c-4433-af68-e20d783aea1c

ONBOOT=yes

NM_CONTROLLED=no

BRIDGE=br0

BOOTPROTO=static

USERCTL=no

[root@localhost network-scripts]# cat ifcfg-eth0 

##修改LXC網絡預設配置資訊

[root@localhost templates]# cat /etc/lxc/default.conf

lxc.network.type = veth

lxc.network.link = br0  #這個要和先前建立的網橋的名稱對應

lxc.network.flags = up

##啟動LXC

/etc/init.d/cgconfig start

/etc/init.d/lxc start

##檢查環境

lxc-checkconfig

##使用模闆安裝一個centos 6 虛拟機

##/usr/share/lxc/templates/ 自帶了常用的模闆可供選擇,debian/ubuntu,centos/redhat 都有。

XXXXXX 錯誤:lxc-create -n vm01 -t centos XXXXXX

lxc-create -n centos6 -t /usr/share/lxc/templates/lxc-centos

##-n:指定虛拟機的名稱

## -t:指定建立虛拟機使用的子產品,LXC其他目标如下

[root@localhost templates]# ll /usr/share/lxc/templates

total 328

-rwxr-xr-x 1 root root 10789 Aug 30  2014 lxc-alpine

-rwxr-xr-x 1 root root 13366 Aug 30  2014 lxc-altlinux

-rwxr-xr-x 1 root root 10251 Aug 30  2014 lxc-archlinux

-rwxr-xr-x 1 root root  9446 Aug 30  2014 lxc-busybox

-rwxr-xr-x 1 root root 28387 Jun 23 18:06 lxc-centos

-rwxr-xr-x 1 root root 10177 Aug 30  2014 lxc-cirros

-rwxr-xr-x 1 root root 12158 Aug 30  2014 lxc-debian

-rwxr-xr-x 1 root root 17213 Aug 30  2014 lxc-download

-rwxr-xr-x 1 root root 47196 Aug 30  2014 lxc-fedora

-rwxr-xr-x 1 root root 27422 Aug 30  2014 lxc-gentoo

-rwxr-xr-x 1 root root 13961 Aug 30  2014 lxc-openmandriva

-rwxr-xr-x 1 root root 13705 Aug 30  2014 lxc-opensuse

-rwxr-xr-x 1 root root 35445 Aug 30  2014 lxc-oracle

-rwxr-xr-x 1 root root 11749 Aug 30  2014 lxc-plamo

-rwxr-xr-x 1 root root  6848 Aug 30  2014 lxc-sshd

-rwxr-xr-x 1 root root 24183 Aug 30  2014 lxc-ubuntu

-rwxr-xr-x 1 root root 12427 Aug 30  2014 lxc-ubuntu-cloud

##臨時密碼在

/var/lib/lxc/vm01/tmp_root_pass

##修改密碼執行以下指令

chroot /var/lib/lxc/vm01/rootfs passwd

###安裝後,虛拟機預設位于/var/lib/lxc/vm01/rootfs,

###配置檔案為/var/lib/lxc/vm01/config

##在CentOS中,LXC的幾個預設的路徑如下:

##lxc預設配置檔案:/etc/lxc/default.conf 

##模版腳本所在目錄:/usr/share/lxc/templates 

##容器執行個體目錄:/var/lib/lxc/ 

##啟動打開lxc容器并進入開機console,

lxc-start -n vm01

###遇到問題:failed to attach 'vethMA5FN1' to the bridge 'virbr0' : No such device,必須yum安裝bridge-utils

###打開上面網址配置虛拟機網絡類型解決

lxc.network.type = macvlan

lxc.network.macvlan.mode = bridge

lxc.network.link = eth0

##在背景運作虛拟機,并通過console連接配接過去 (使用ctrl+a+q退出console)

lxc-start -n vm01 -d

lxc-console -n vm01

##檢視lxc容器相關資訊(名稱、是否在運作、PID,CPU使用、IO使用、記憶體使用、IP位址、網絡吞吐量)

lxc-info -n vm01

##監視lxc容器的資源使用

lxc-top

##容器克隆

lxc-clone vm01 webserver01 -B lvm

##如果你想節約空間,克隆時帶上 -s (--snapshot) 參數,可以建立一個源容器的可讀寫快照

lxc-clone vm01 webserver01 -s -B lvm

##修改虛拟機的root密碼:

http://www.178linux.com/5351

[root@localhost ~]# chroot /var/lib/lxc/vm01/rootfs passwd

##關閉或删除容器

lxc-stop -n vm01

lxc-destroy -n vm01

##配置容器的cgroup

##設定容器隻使用0,1兩個CPU核心

lxc-cgroup -n centos cpuset.cpus 0-1 

##設定容器使用的CPU時間

##設定虛拟機可用記憶體為512M

lxc-cgroup -n centos memory.limit_in_bytes 53687091 

##設定虛拟機消耗的IO權重

lxc-cgroup -n centos blkio.weight 500 

##或者直接寫入容器的配置檔案config中

繼續閱讀