LXC容器虚拟化
经过一些折腾,初步在自己的工作笔记本上部署了LXC虚拟。这是一个非常轻量级的虚拟解决方案,特别适合硬件有限的测试环境,也是我们系统管理员技术锻练的良好环境。
安装
以下安装实践是在Gentoo x86_64平台上实现的,如果采用Red Hat系统或Debian,应该只是在软件安装上有区别,但使用配置方法应该相同。
安装lxc用户工具
同步portage树
1 emerge --sync
由于当前LXC 软件包被masked (尚不成熟),所以需要手工去除屏蔽。
1
2 echo app-emulation/lxc >> /etc/portage/package.unmask
echo app-emulation/lxc >> /etc/portage/package.keywords
安装
1 emerge -av lxc
当编译安装完成时,可能会看到列出的内核参数有哪些没有被激活。
完整的内核要求如下
# namespaces
CONFIG_NAMESPACES / "Namespaces"
CONFIG_UTS_NS / "Utsname namespace"
CONFIG_IPC_NS / "Ipc namespace"
CONFIG_PID_NS / "Pid namespace"
CONFIG_USER_NS / "User namespace"
CONFIG_NET_NS / "Network namespace"
DEVPTS_MULTIPLE_INSTANCES / "Multiple /dev/pts instances"
# control groups
CONFIG_CGROUPS / "Cgroup"
CONFIG_CGROUP_NS / "Cgroup namespace"
CONFIG_CGROUP_DEVICE / "Cgroup device"
CONFIG_CGROUP_SCHED / "Cgroup sched"
CONFIG_CGROUP_CPUACCT / "Cgroup cpu account"
CONFIG_CGROUP_MEM_RES_CTLR / "Cgroup memory controller"
CONFIG_CPUSETS / "Cgroup cpuset"
# misc
CONFIG_VETH / "Veth pair device"
CONFIG_MACVLAN / "Macvlan"
CONFIG_VLAN_8021Q / "Vlan"将以上配置添加到内核编译配置文件中重新编译内核。Red Hat 和 Debian尚没有实践,不过发行版本通常会通过模块方式或预编译支持这些参数,可能不需要调整。
安装Guest操作系统
在网络配置上,是将虚拟机的虚拟交换机br0 和虚拟网卡dummy0 绑定,这样可以不占用公司网络资源作为虚拟内网运行。如果要将虚拟机对外提供服务,则绑定实际物理网卡如eth0 。
设置网络
配置 /etc/conf.d/net
bridge_br0="dummy0"
config_dummy0="null"
config_br0="10.1.11.1/32 brd 10.1.11.255"
routes_br0="10.1.11.0/24 via 10.1.11.1"
然后设置软连接
cd /etc/init.d
ln -s net.lo net.br0
启动
1 /etc/init.d/net.br0 start
要允许容器中主机访问外部
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
1
2 mkdir -p /cgroup
mount none -t cgroup /cgroup
为每次启动系统时自动挂载,在/etc/fstab 中添加
1 none /cgroup cgroup defaults 0 0
案例安装
https://www.granite-mtn.net/xwiki/bin/view/Howto/Linux+Containers 提供了各种guest安装的案例,比较简单易用。
https://www.ibm.com/developerworks/linux/library/l-lxc-containers/ 是IBM发起的LXC项目,详细介绍了如何build一个debian系统
安装debian虚拟机
安装debootstrap 工具
1 emerge dev-util/debootstrap
创建一个debian容器
sid 是debian的unstable版本代号,不过debian的unstable相比较很多其他发行版本,已经是很稳定的版本了。只不过debian质量 控制要求很高,stable版本往往选择“久经考验”的软件版本所以不能尝试最新的开源技术,采用debian的unstable版本可以使用最前沿的开 源技术,对于我们日常应用已经足够稳定。对于服务器部署,可以采用stable版本。
1 mkdir -p /lxc/debian
如果要创建大量的container,则可以生成一个tar包以便今后安装
1 debootstrap --make-tarball=sid.packages.tgz sid
配置文件/etc/lxc/lxc-debian.conf
# Container with network virtualized using a pre-configured bridge named br0 and
# veth pair virtual network devices
lxc.utsname = debian
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.hwaddr = 4a:49:43:49:79:bf
lxc.network.ipv4 = 10.1.11.2/24
lxc.network.name = eth0
lxc.mount = /lxc/debian/fstab
lxc.rootfs = /lxc/debian