一、简介

1libvirt

libvirtLinux上的虚拟化库,是长期稳定的C语言API,支持KVM/QEMUXenLXC等主流虚拟化方案。链接:http://libvirt.org/

virshlibvirt对应的shell命令。

2lxc

Linux Container容器(简称“lxc”)可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。与KVMXen等典型虚拟机相比,lxc的额外资源开销更小。

3Cgroup

Cgroupscontrol groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:CPU, Memory, IO等)的机制。最初由Google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有Cgroups就没有LXC

二、环境介绍

OSUbuntu 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

libvirt0.9.81.0.2

lxc0.7.5

三、准备工作

ubuntu安装,直接apt-get install

1、安装libvirt

sudo apt-get install libvirt-bin libvirt-dev

2、网桥管理工具

sudo apt-get install bridge-utils

3lxc

sudo apt-get install lxc

该命令将自动安装LXC依赖的其他软件:cgroup-lite, lvm2, and debootstrap

四、libvirt xml配置文件

libvirt(包括virsh)使用xml文件对lxc进行配置,其中包括lxc的名称、分配内存、cpu设置等多种信息。定义、创建lxc等操作都需要xml配置文件的参与,因此这里先介绍xml配置文件。我编辑了一个名为lxc1.xmlxml文件,其中定义了一个名为lxc1kvm 虚拟机。

                            //“虚拟机”类型

    lxc1                 //lxc名称

     190000 //分配内存,单位kb

    2        //vcpu对于lxc没有实际作用,可以不进行设置

    

         1000         //设置cpu共享时间比例

    

    

      exe

       /bin/sh

    

    

                

             //设置挂接网桥

            

        

    

相比于kvm虚拟机,lxc不需要设置cdromhd等硬件配置,设置信息较少

五、查看虚拟机列表

libvirt支持多种虚拟机、虚拟环境,每种虚拟机的连接接配置是不同的,如libvirt默认连接是“qemu:///system”,即支持kvm/qemu。平时我们输入virsh list,其实就是virsh -c qemu:///system listLxc对应的连击是lxc:///,当使用与本机lxc相关的virsh命令时,应当加上“-c lxc:///”

查看本机lxcvirsh -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管理kvmAPI篇)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/