Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79943
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-22 16:06
文章分类
文章存档

2014年(18)

我的朋友

分类: 网络与安全

2014-03-18 13:35:19

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

点到为止,不深入也不推荐这么干。
阅读(3766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~