作者:说话的白菜
博客:http://speakingbaicai.blog.51cto.com/#
一、简介
1、libvirt
libvirt是Linux上的虚拟化库,是长期稳定的C语言API,支持KVM/QEMU、Xen、LXC等主流虚拟化方案。链接:http:///
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:///drvlxc.html
分步骤更为详细 :https://www./posts/2011/09/27/getting-started-with-lxc-using-libvirt/
|