LXC 自kernel 2.6.27 加入linux 内核,依赖内核的cgroup和namespace功能而实现,非常轻量级,设计用于操作系统内部应用级别的隔离。
与传统的硬件虚拟化技术相比有以下优势:
a、更小的虚拟化开销。Linux内核本身是一个很好的硬件资源调度器,LXC的诸多特性基本由内核提供,而内核实现这些特性只有极少的花费,CPU,内存,硬盘都是直接使用。
b、更快速的部署。建好了模板,分分钟搞定一台虚拟机完全不是梦话。LXC虚拟机本质上只是宿主机上的一个目录,克隆一个LXC虚拟机只需要简单的copy就行,这也为备份提供了极大便利。
LXC 目前已经比较成熟,目前最新版为0.9,官方计划2014年2月推出1.0版本并进行长期维护,希望将LXC投入生产的同学建议观望,CentOS 从6.5 开始支持LXC技术。( LXC 1.0已于2014-02-20 发布)
不同于vmware,kvm等虚拟化技术,它是一种类似chroot的容器技术,非常的轻量级。LXC 还可以轻松解决单机上一个应用多实例的问题。
环境CentOS 6.5 x64
1、安装LXC
yum install libcgroup lxc lxc-templates --enablerepo=epel
/etc/init.d/cgconfig start
2、检查环境
1
lxc-checkconfig
输出如下即是OK
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-2.6.32-431.1.2.0.1.el6.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/ptsinstances: enabled
--- Control groups---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config/usr/bin/lxc-checkconfig
/usr/share/lxc/templates/ 下有好几个模板可供选择,
# ls /usr/share/lxc/templates/
lxc-alpine lxc-busybox lxc-debian lxc-fedora lxc-oracle lxc-sshd lxc-ubuntu
没有CentOS ?github上有一个现成的centos的模板 ,
或者下载本文的附件lxc-centos(需解压),放入/usr/share/lxc/templates/,权限755
3、使用模板安装一个centos 虚拟机
lxc-create -n centos -t centos
安装后,虚拟机默认位于/var/lib/lxc/centos/
4、打开虚拟机并进入开机console,
lxc-start -n centos
在后台运行虚拟机,并通过console连接过去
lxc-start -n centos -d
lxc-console -n centos
5、配置虚拟机网络,
这里偷了个懒,直接利用libvirt创建出的virbr0,也可以自己手动创建桥接。
如果上面新创建的虚拟机启动失败,很可能是网络没有配置好。
编辑文件/var/lib/lxc/centos/config,确保文件包含一下内容
lxc.network.type= veth
lxc.network.link = virbr0
lxc.network.flags = up
lxc.network.name = eth0
lxc.network.ipv4 = 192.168.122.65/24
lxc.network.ipv4.gateway = 192.168.122.1
如果需要第二块网卡,则继续在/var/lib/lxc/centos/config添加一组配置
lxc.network.type = veth
lxc.network.link = virbr1
lxc.network.flags = up
lxc.network.name = eth1
lxc.network.ipv4 = 192.168.100.66/24
虚拟机网络完全由外部控制,编辑虚拟机内部是无效的。
LXC的缺点是隔离不够彻底,安全性不如kvm,vmware,xen等。
veth依赖网卡桥接,且可以与任何机器(宿主机,其他虚拟机,局域网其他机器)通讯。
在网络层,可以采取下面的方式加固安全:
如果要隔绝虚拟机与宿主机的通讯(虚拟机之间可以通信,与局域网其他机器也可以通信),网卡可选择macvlan中的bridge模式
lxc.network.type = macvlan
lxc.network.macvlan.mode = bridge
lxc.network.flags = up
lxc.network.link = eth0
如果要进一步隔离同一宿主机上不同虚拟机之间的通讯(仅可与局域网其他机器通信),网卡还要选择macvlan中的vepa模式
lxc.network.type = macvlan
lxc.network.macvlan.mode = vepa
lxc.network.flags = up
lxc.network.link = eth0
如果要继续隔离,没有网卡可能是一个选择,但似乎违背了互联网精神。
1
lxc.network.type = empty
6、控制虚拟机的资源
虚拟机默认与宿主机共享硬件资源,CPU,内存,IO等,也可以实现资源隔离。
#设置虚拟机只使用0,1两个CPU核心
lxc-cgroup -n centos cpuset.cpus 0,1
#设置虚拟机可用内存为512M
lxc-cgroup -n centos memory.limit_in_bytes 53687091
#设置虚拟机消耗的CPU时间
lxc-cgroup -n centos cpu.shares 256
#设置虚拟机消耗的IO权重
lxc-cgroup -n centos blkio.weight 500
另一种限制资源的方法是将具体的限制写入虚拟机的配置文件
#设置虚拟机只使用0,1两个CPU核心
lxc.cgroup.cpuset.cpus = 0,1
#设置虚拟机消耗的CPU时间
lxc.cgroup.cpu.shares = 256
#设置虚拟机可用内存为512M
lxc.cgroup.memory.limit_in_bytes = 512M
#设置虚拟机可用的swap空间为1G
lxc.cgroup.memory.memsw.limit_in_bytes = 1G
#设置虚拟机可使用的IO权重
lxc.cgroup.blkio.weight=500
7、安装ubuntu 12.04
LXC强大到有点变态,在centos上运行ubuntu?没错,因为内核对于LInux发行版来说是通用的。
1
lxc-create -n ubuntu -t ubuntu -- -r lucid
点到为止,不深入也不推荐这么干。
阅读(3822) | 评论(0) | 转发(0) |