首页 > 代码库 > linux服务之kvm

linux服务之kvm

安装软件

[root@kvm ~]# yum grouplist

Virtualization
Virtualization Client
Virtualization Platform
Virtualization Tools

centos6.4-minimal-64bit 默认是200个包
[root@kvm ~]# yum install libvirt python-virtinst qemu-kvm
Transaction Summary
=====================================================================================================================================================
Install 87 Package(s)
Upgrade 4 Package(s)

Total download size: 36 M
Is this ok [y/N]: y

[root@kvm ~]# yum install tigervnc-server
Transaction Summary
=====================================================================================================================================================
Install 22 Package(s)

Total download size: 24 M
Installed size: 70 M
Is this ok [y/N]: y


[root@kvm kvm]# yum install virt-viewer
Transaction Summary
=====================================================================================================================================================
Install 24 Package(s)
Upgrade 2 Package(s)

Total download size: 8.2 M
Is this ok [y/N]:

[root@kvm ~]# lsmod |grep kvm
kvm_intel 53484 0
kvm 316506 1 kvm_intel
[root@kvm ~]# vi /etc/selinux/config
改为SELINUX=disabled
[root@kvm ~]# reboot
[root@kvm ~]# getenforce
Disabled
[root@kvm ~]# service iptables stop
[root@kvm ~]# service libvirtd start
Starting libvirtd daemon:
[root@kvm ~]# rpm -ql libvirt
[root@kvm ~]# rpm -ql python-virtinst
virt-install - provision(准备,预备) new virtual machines

[root@kvm networks]# cat /etc/libvirt/qemu/networks/default.xml

[root@kvm ~]# vi /etc/libvirt/qemu.conf

QEMU和KVM的关系

现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术。KVM也同hyper-V、Xen一样依赖此项技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。
准确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去做事情:
还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。
比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。
所以你会看到,官方提供的KVM下载有两大部分三个文件,分别是KVM模块、QEMU工具以及二者的合集。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU的关系。

网卡桥接

其实KVM的安装和使用都很方便简单的,大家要理解KVM各个参数的含义。最关键的就是KVM的网络桥接的设置,在这里大家要多看软件自身的文档,会有很大的帮助。
要注意,系统重启后要重新加载kvm内核模块:当然,你也可以修改系统相关设置在启动时自动加载该模块。kvm是不是比VB和VM要爽得多呢?
KVM的默认网络模式为NAT,就是说借助宿主机模式上网,现在我们想改成桥接模式,这样外界就可以直接和宿主机里的虚拟机通讯了。

[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BRIDGE=br0
IPADDR=192.168.1.187
NETMASK=255.255.255.0

在我们安装完成的时候,是没有关于br0网卡的配置文件的,拷贝一下eth0并重命名为br0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0 br0以下四项
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
TYPE=Bridge

保存网卡配置重启网卡
[root@localhost ~]#service network restart
检查br0是否成功
[root@localhost ~]#ifconfig

其实我们在虚拟机搭建的时候,我们最终关心的网卡是: eth0, br0, vnet0,vnet1… 其中,我们的eth0是原来的物理网卡,br0是我们虚拟出来的桥设备,而vnetXXX就是桥接映射到虚拟机里面用到的网
卡。当配置完了之后,我们使用ifconfig,查看起来的话,eth0是没有ip地址的,而br0仿佛是虚拟出来的一个原来eth0的访问接口,它具有ip地址,可以代替原来的eth0被访问,而vnetXX的地址可以在
建立虚拟机之后在虚拟机里面配置,桥接后可以被外部访问。

[root@kvm ~]# brctl ?
[root@kvm ~]# brctl showmacs br0
[root@kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.4487fc5bf0b0 no eth0
virbr0 8000.525400a64f66 yes virbr0-nic
系统默认生成接口主要用于NAT,如果要删除可以先ifconfig virbr0 down接口,然后利用brctl delbr virbr0删除掉

当然,有的时候我们在虚拟机里可能不仅仅使用一块网卡,但是在新增网卡的时候会有无法识别的情况,我们如何应对呢,下面记录一种方法,也许可以帮助我们解决问题哦。
[root@localhost ~]#vi /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x10ec:0x8168 (r8169) 这个是新增网卡
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c8:61:00:4F:CD:76", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x10ec:0x8169 (r8169) 这个是旧的网卡
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:23:56:9A:E8:5C", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

将旧的eth0的配置信息删掉,然后将新增的eth1改成eth0,然后进入/etc/sysconfig/network-script/ 修改ifcfg-eth0的配置文件,更改mac地址(改成新增网卡的),然后重启网络或者重启系统配置既可以生效。

虚拟机连接与查看  不知道虚拟机安装时如何去连接,win7安装vnc客户端去连接host创建的guest,但却一闪而过,是不是host上一定要装桌面环境才能去连接查看

 

连接kvm虚拟机的几种方法,以下是guest系统已安装好,然后连接的方法
我现在知道的有3中方法:
1,ssh:如果虚拟机网络没有配置好就只能用下面两种方法。
2,vnc:可以使用virt-viewer,或者vncviewer命令,但是virt-viewer我遇到了报错,最终没有解决。
Unable to connect to the graphic server localhost:5900
3,通过serial console连接。以下是在guest里所做的
http://nixcraft.com/kernel-based-virtual-machine/15075-kvm-virsh-redirect-centos-redhat-console-serial-port.html
1)echo “ttyS0″ >> /etc/securetty
2)编辑/boot/grub/grub.conf文件在kernel的末尾添加如下:
console=ttyS0
3)编辑 /etc/inittab文件在末尾添加:
S0:12345:respawn:/sbin/agetty ttyS0 115200
4)重启kvm虚拟机,然后在host主机上面依次执行下面命令:
desktop # virsh --connect qemu:///system
virsh # console centos
5)回车输入用户名密码登陆即可。

 

默认情况下,QEMU会启动一个VNC server端口(如上面的::1:5900),可以用vncviwer工具来连接到QEMU的VNC端口查看客户机。
这里可以使用“vncviewer :5900”命令连接到QEMU启动的窗口

步骤

kvm支持的镜像很多,常用的是原始镜像(*.img),还有支持动态大小扩张的qocw2格式(首选)。
更优的选择是系统盘如C盘用img格式,数据盘用qcow2格式以减少服务器磁盘闲置空间。
qemu-img create -f raw test.img 10G
创建qcow2镜像,但是其实际占有磁盘大小仅为193K左右,而虚拟机内部显示磁盘大小为10G,也就是磁盘空间使用时才分配,即所谓动态扩张。
qemu-img create -f qcow2 ubuntu.qcow2 10G

要在一台host上跑起一个虚拟机一般需要三个步骤:
第一步:创建虚拟机镜像
qemu-img create -f raw /images/vm1.raw 8G
qmeu-img创建的镜像是一个稀疏文件,也就是说刚创建出来的文件并没有8G,它会随着数据的增多慢慢增加,直到8G
第二步:创建guest系统(以下三种方式)
第三步:管理guest系统(启动,关闭等操作)

虚拟机创建

http://www.open-open.com/lib/view/open1346511443506.html 讲的比较详细
对于用户或者管理员来说,虚拟机的创建有着很多的方法,例如:kvm自带命令行工具、使用virsh命令来创建、使用具有图形界面的virt-manager等等。
但是它们底层实现的原理都是一样的,而且它们基本上都是通过开源的虚拟化库Libvirt来开发的。下面就讲一讲三种用户可以创建虚拟机的方式。

宿主机叫host,虚拟机叫guest

1.1 利用kvm自带命令行工具进行创建
dd if=/dev/zero of=rhel6u3.img bs=1M\ count=8192 也可以用此命令创建一个硬盘文件与qemu-img create命令效果一样
[root@kvm ~]# /usr/libexec/qemu-kvm --help
[root@kvm ~]# qemu-img --help
[root@kvm ~]# qemu-img create -f raw test.img 10G
[root@kvm ~]# qemu-img create -f qcow2 centos65-64.qcow2 10G
[root@kvm ~]# /usr/libexec/qemu-kvm -boot order=dc -hda centos65-64.qcow2 -cdrom CentOS-6.5-x86_64-minimal.iso -m 512 -smp 2 -vnc :0 安装系统
[root@kvm ~]# /usr/libexec/qemu-kvm -boot c -hda test.img -m 512  启动系统

1.2 利用virsh命令行工具进行创建
virt-install是一个使用“libvirt” hypervisor 管理库构建新虚拟机的命令行工具,此工具使用串行控制台,SDL(Simple DirectMedia Layer)图形或者VNC客户端/服务器,
支持基于命令行和图形安装。
编写xml配置文件,下面介绍
virsh create test.xml
利用virsh工具创建虚拟机必须编写xml配置文件,该文件指定虚拟机的各项参数,比如虚拟机名称、磁盘镜像的位置、内存大小、显示配置等等。下面给出一个简单的配置文件的例子。
#test.xml
<domain type=‘qemu‘>
<name>windowsXP</name>
<uuid></uuid>
<memory>500000</memory>
<currentMemory>500000</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch=‘i686‘machine=‘pc‘>hvm</type>
<boot dev=‘hd‘/>
<boot dev=‘cdrom‘/>
</os>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type=‘file‘ device=‘cdrom‘>
<sourcefile=‘/home/turnupthesun/kvm/windowsXP.iso‘/>
<target dev=‘hdc‘/>
<readonly/>
</disk>
<disk type=‘file‘ device=‘disk‘>
<sourcefile=‘/home/turnupthesun/kvm/windowsXP.img‘/>
<target dev=‘hda‘/>
</disk>
<graphicstype=‘vnc‘ port=‘14‘ listen=‘127.0.0.1‘/>
</devices>
</domain>
下面介绍其中几个比较重要的元素及属性。
(1)<domain>元素的type属性指定运行域的虚拟机管理器,针对kvm应当选择“qemu”。
(2)<name>元素的内容指定域的名字。
(3)<memory>元素和<currentMemory>元素的内容非别指定启动时为域分配的最大内存和实际分配的内存。
(4)<os></os>元素之间的内容用来指定操作系统启动的一些信息。其中重复的<boot>元素形成了一个启动顺序表,比如例子中先从磁盘启动,磁盘无法启动再从光盘启动。
(5)<disk>元素的device属性指明不同的设备,<source>标签的file属性指明这些设备的位置。

[root@kvm ~]# virsh
Welcome to virsh, the virtualization interactive terminal.

Type: ‘help‘ for help with commands
‘quit‘ to quit

virsh #
[root@kvm ~]# virsh -c qemu:///system list

virt-install -n centos.... 安装虚拟机
virt-viewer -c qemu:///system centos vnc远程到虚拟机安装系统
如果这里报错无法连接虚拟机,则安装vncviewer
vncviewer 192.168.2.8
yum -y install dacpid 安装完虚拟机系统则安装acpid,不然无法通过virsh安装关闭虚拟机

virsh -c qemu:///system
virsh # list --all
virsh # start centos
virsh # shutdown centos 正常关闭虚拟机命令(如果虚拟机没有安装dacpi命令则不能用shutdown关闭虚拟机)
virsh # destroy centos 强制关闭
# virt-clone --connect=qemu:///system -o centos -n kvm1 -f centos1.qcow2 virt-clone命令克隆虚拟机

1,通过virsh交互无法shutdown关闭kvm虚拟机,原因是kvm虚拟机没有安装acpid。
2,vnc问题,virt-viewer报错,只能使用vncviewer 127.0.0.1来连接虚拟机。

virsh list //查看虚拟机信息
virsh destroy kvmtest1 //virsh destroy ID/NAME删除虚拟机
virsh start kvmtest1 //virsh start NAME启动虚拟机
virsh console kvmtest1 //virsh console ID/NAME控制台连接虚拟机
//利用ctrl+]切换到host主机,host主机利用virsh console ID/NAME切换到guest系统。
虚拟机的配置文件保存在/etc/libvert/qemu目录下,扩展名是xml,这文件只能用virsh edit来编辑用vi无效,修改相应的文件即可重新配置虚拟机。

[root@kvm kvm]# virt-install -n centos65 -r 512 --disk path=/root/kvm/centos65-64.img -c CentOS-6.5-x86_64-minimal.iso --network bridge=br0 --graphics vnc,password=123456,port=5910
virt-install -v -n kvmtest1 -r 512 –vcpus=1 -l http://mirrors.163.com/centos/6.3/os/x86_64/ -nographics -virt-type=kvm -f /home/vmimages/kvmtest1.img -s 10 -w bridge:br0 -w bridge:br1 -extra-args=‘console=tty0 console=ttyS0,115200,n,8 ks=http://192.168.xx.xx/test1.cfg‘ -connect qemu:///system
-w 联网方式(birdge bridge:br0/nat bridge:virbr0)
-os-type=‘windows‘ -os-variant=win2k3 安装windows最好加上这个否则会报错,大家注意一个问题,如果你虚拟的是WIN2003,那么切勿在-net参数中使用model=e1000,否则HOST和GUEST之间不能PING通
virt-install工具安装虚拟机后,在目录/etc/libvirt/qemu/下生成xml配置文件

1.3 如何通过图形化界面virt-manager来创建虚拟机
virt-manager是RedHat共享的一个开源虚拟化管理软件,它是用Python编写的GUI程序,底层使用了Libvirt对各类Hypervisor进行管理。
Virt-manger既虚拟机管理器,是创建和管理虚拟客户端的图形工具。具体的操作步骤为:
a.从控制台窗口启动这个工具,从root身份输入virt-manager命令,点击file菜单的”新建”选项。
b.virt-manager显示两种虚拟化方法:Qemu/KVM或者Xen,这里选择Qemu/KVM作为hypervisor。
c.选择虚拟机名称和指定一种安装方法,通过网络安装服务器或者本地CD/DVD驱动包括本地ISO文件,在此我用本地ISO的安装方法。
d.输入本地ISO文件路径和文件名(假设本地ISO的路径就在根目录下,名称为Mini-BT3.6.1.iso)
e.设置虚拟机使用的内存容量和处理器数量。
f.配置虚拟机的存储方法。对于存储后端有两种选择:物理存储设备或者使用之前建立的磁盘文件。如果处于简单测试,创建文件作为存储后端。当创建虚拟磁盘时,默认为10GB。
g.网络配置,在这里选择NAT方式。
这样一个虚拟机就开始启动起来了,将会出现启动界面,最后出现虚拟机中操作系统的界面。

虚拟机备份及恢复
备份:拷贝/etc/libvirt/qemu目录下的xml配置文件,以及xml中设置的img文件。
恢复:进入virsh,执行define