天天看點

LXC (Linux 虛拟環境)簡單介紹

LXC是Linux containers的簡稱,作業系統級别的虛拟化技術。它可以在作業系統層次上為程序提供的虛拟的執行環境。一個虛拟的執行環境被稱為一個容器(container)。可以為容器綁定特定的cpu和memory節點,配置設定特定比例的cpu時間、IO時間,限制可以使用的記憶體大小(包括記憶體和是swap空間),提供device通路控制,提供獨立的namespace(網絡、pid、ipc、mnt、uts)。

LXC (Linux 虛拟環境)簡單介紹

基本安裝

Debian/Ubuntu系統下,使用apt安裝:

sudo apt-get install lxc bridge-utils libvirt-bin debootstrap

注意修改/bin/sh,連結到/bin/bash。lxc在某些版本上有一個bug,聲明為/bin/sh卻使用bash文法,導緻不如此連結會出現錯誤。

鏡像和設定

使用

lxc-create -n name -t template

生成鏡像。

在/usr/share/lxc/templates可以看到可用的模闆。

在/var/cache/lxc/debian會緩存生成過程的臨時檔案。

生成的鏡像需要在鏡像内安裝lxc,否則無法使用lxc-execute。

資源限制

在config檔案内,寫入cgroup限定規則。注意,使用記憶體限定的話,需要在核心參數中加入

cgroup_enable=memory

在debian/ubuntu下,可以修改/etc/default/grub檔案,使用update-grub重新生成規則。

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory quiet"

在config檔案中可以如下限定:

lxc.cgroup.memory.limit_in_bytes = 512M # 限定記憶體

lxc.cgroup.cpuset.cpus = 0 # 限定可以使用的核

lxc.cgroup.blkio.throttle.read_bps_device = 8:0 100 # 讀取速率限定

lxc.cgroup.blkio.throttle.write_bps_device = 8:0 100 # 寫入速率限定

lxc.cgroup.blkio.throttle.read_iops_device = 8:0 100 # 讀取頻率限定

lxc.cgroup.blkio.throttle.write_iops_device = 8:0 100 # 寫入頻率限定

執行

lxc-start -n name /bin/echo hello

還可以用以下指令,在已經啟動的container裡執行程序。

lxc-attach -n name /bin/echo hello

以下指令是用來在未啟動的container裡執行程序的。

lxc-execute -n name /bin/echo hello

** 注意,雖然系統初始化了所有資源,但是由于sysv-init沒有執行,是以系統内初始化并沒完成。這導緻系統不完整,例如網絡部分不可用。 **

網絡隔離

自行設定的網絡

lxc采用veth技術,每次虛拟機建立時,都會産生一對veth。虛拟機内的一般叫做eth0,虛拟機外的叫做vethXXX。這張網卡可以以任何linux許可的方式進行配置。

dnsmasq所産生的dhcp封包無法被debian guest的dhcp client承認,是以無法使用dnsmasq自動部署網絡。

使用iptables配置通路

在開啟br-nf後,所有bridge的包都會經過iptables的過濾。因而可以用iptables的FORWARD規則限制guest堆外網的通路。

詳細配置請參考此處。

繼續閱讀