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

LXC是Linux containers的簡稱,操做系統級別的虛擬化技術。它能夠在操做系統層次上爲進程提供的虛擬的執行環境。一個虛擬的執行環境被稱爲一個容器(container)。能夠爲容器綁定特定的cpu和memory節點,分配特定比例的cpu時間、IO時間,限制可使用的內存大小(包括內存和是swap空間),提供device訪問控制,提供獨立的namespace(網絡、pid、ipc、mnt、uts)。linux

lxc

基本安裝

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

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

注意修改/bin/sh,連接到/bin/bash。lxc在某些版本上有一個bug,聲明爲/bin/sh卻使用bash語法,致使不如此連接會出現錯誤。bootstrap

鏡像和設定

使用lxc-create -n name -t template生成鏡像。ubuntu

在/usr/share/lxc/templates能夠看到可用的模板。segmentfault

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

生成的鏡像須要在鏡像內安裝lxc,不然沒法使用lxc-execute。bash

資源限制

在config文件內,寫入cgroup限定規則。注意,使用內存限定的話,須要在內核參數中加入cgroup_enable=memory網絡

在debian/ubuntu下,能夠修改/etc/default/grub文件,使用update-grub從新生成規則。網站

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory quiet"

在config文件中能夠以下限定:ui

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堆外網的訪問。詳細配置請參考此處。

項目主頁

LXC官方網站


做者 shell909090
編輯 SegmentFault 許可 CC-BY-SA 3.0

相關文章
相關標籤/搜索