一、简介
1、libvirt
libvirt是Linux上的虚拟化库,是长期稳定的C语言API,支持KVM/QEMU、Xen、LXC等主流虚拟化方案。链接:http://libvirt.org/
virsh是libvirt对应的shell命令。
2、lxc
Linux Container容器(简称“lxc”)可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。与KVM、Xen等典型虚拟机相比,lxc的额外资源开销更小。
3、Cgroup
Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:CPU, Memory, IO等)的机制。最初由Google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有Cgroups就没有LXC。
二、环境介绍
OS:Ubuntu 12.04.1 LTS
内核:Linux 3.2.0-33-generic-pae #52-Ubuntu SMP Thu Oct 18 16:39:21 UTC 2012 i686 i686 i386 GNU/Linux
libvirt:0.9.8、1.0.2
lxc:0.7.5
三、准备工作
ubuntu安装,直接apt-get install
1、安装libvirt
sudo apt-get install libvirt-bin libvirt-dev
2、网桥管理工具
sudo apt-get install bridge-utils
3、lxc
sudo apt-get install lxc
该命令将自动安装LXC依赖的其他软件:cgroup-lite, lvm2, and debootstrap
四、libvirt xml配置文件
libvirt(包括virsh)使用xml文件对lxc进行配置,其中包括lxc的名称、分配内存、cpu设置等多种信息。定义、创建lxc等操作都需要xml配置文件的参与,因此这里先介绍xml配置文件。我编辑了一个名为lxc1.xml的xml文件,其中定义了一个名为lxc1的kvm 虚拟机。
<domain type='lxc'> //“虚拟机”类型 <name>lxc1</name> //lxc名称 <memory>190000</memory> //分配内存,单位kb <vcpu>2</vcpu> //vcpu对于lxc没有实际作用,可以不进行设置 <cputune> <shares>1000</shares> //设置cpu共享时间比例 </cputune> <os> <type>exe</type> <init>/bin/sh</init> </os> <devices> <console type='pty'/> <interface type = 'bridge'> //设置挂接网桥 <source bridge = 'br0'/> </interface> </devices> </domain> |
相比于kvm虚拟机,lxc不需要设置cdrom、hd等硬件配置,设置信息较少
五、查看虚拟机列表
libvirt支持多种虚拟机、虚拟环境,每种虚拟机的连接接配置是不同的,如libvirt默认连接是“qemu:///system”,即支持kvm/qemu。平时我们输入virsh list,其实就是virsh -c qemu:///system list。Lxc对应的连击是lxc:///,当使用与本机lxc相关的virsh命令时,应当加上“-c lxc:///”。
查看本机lxc:virsh -c lxc:/// list 。出现如下列信息:
$ virsh -c lxc:/// list Id 名称 状态 ---------------------------------------------------- |
$ virsh -c lxc:/// list Id 名称 状态 ---------------------------------------------------- 4832 lxc1 running |
六、定义、启动、创建虚拟机
这里以上述lxc1.xml配置文件为例
1、定义虚拟机
virsh -c lxc:/// define lxc1.xml
备注:此时lxc只被定义了,并没有真正启动。因此此时执行virsh -c lxc:/// list没有任何虚拟机信息
$ virsh -c lxc:/// list Id 名称 状态 ---------------------------------------------------- |
2、启动虚拟机
virsh -c lxc:/// start lxc1
启动了由lxc1.xml定义的、名为lxc1的虚拟机。此时执行virsh -c lxc:/// list出现如下信息:
$ virsh -c lxc:/// list Id 名称 状态 ---------------------------------------------------- 4832 lxc1 running |
3、创建虚拟机
创建虚拟机的作用相当于定义虚拟机+启动虚拟机
virsh create lxc1.xml
此时执行virsh -c lxc:/// list,结果如下:
$ virsh list Id 名称 状态 ---------------------------------------------------- 4832 lxc1 running |
七、进入lxc内部操作lxc
首先lxc不支持vnc查看,但可以virsh console命令进入操作
1、进入lxc1
virsh -c lxc:/// console lxc1 连接到域 lxc1 Escape character is ^] # |
进入之后就可以像在物理机上使用shell命令一样操作lxc
2、退出lxc1
合理退出应该输入“Ctrl+]”,这样退出后可以再次进入。不要使用其他命令退出,如使用“Ctrl+d”,将导致lxc被停止、销毁等。
八、取消定义、销毁lxc
1、取消定义虚拟机
virsh -c lxc:/// undefine lxc1
libvirt取消lxc1的定义,系统无法在辨识lxc1。此步骤与virsh -c lxc:/// define lxc1.xml对应。
2、销毁虚拟机
virsh -c lxc:/// destroy lxc1
libvirt直接销毁lxc1,取消lxc1的定义。
使用libvirt API管理lxc,与使用libvirt API管理kvm类似,可参见使用libvirt管理kvm(API篇)http://speakingbaicai.blog.51cto.com/5667326/1162005。主要不同点在于建立连接不同,即将virConnectPtr conn1 = virConnectOpen("qemu:///system"); 改为virConnectPtr conn = virConnectOpen("lxc:///"); 。
参考:
lxc 常用命令:http://www.cnblogs.com/lisperl/archive/2012/04/13/2446179.html
libvirt_lxc : http://libvirt.org/drvlxc.html
分步骤更为详细 :https://www.berrange.com/posts/2011/09/27/getting-started-with-lxc-using-libvirt/
本文出自 “说话的白菜” 博客,谢绝转载!