1.KVM及Libvirt简介KVM(Kernel-basedVirtualMachine),是一个开源的系统虚拟化平台,是针对包含虚拟化扩展(IntelVT或AMD-V)的x86硬件(目前大部分主流的Intel或AMD处理器都支持虚拟化扩展)基于Linux系统提供虚拟化解决方案。KVM是基于Linux内核的,使用Li
1. KVM及Libvirt简介
KVM(Kernel-basedVirtual Machine),是一个开源的系统虚拟化平台,是针对包含虚拟化扩展(Intel
VT或AMD-V)的x86硬件
(目前大部分主流的Intel或AMD处理器都支持虚拟化扩展)基于Linux系统提供虚拟化解决方案。KVM是基于Linux内核的,使用Linux自身的调度器进行管理,相对于Xen,其核心源码要少很多。目前是基于Linux的虚拟化技术中最流行的平台,它也是RedHat公司私有云产品的虚拟化平台,在工业界也有很广泛的应用。
Libvirt是Linux上的一个虚拟化平台的管理库,支持对KVM,Xen,LXC等虚拟化软件的管理,为各种虚拟化平台提供统一的编程接口。当前流行的基于Libvirt库的虚拟化平台的管理软件非常的丰富多样,在后面的介绍中主要用到三种:
Virsh:全面的基于命令行的虚拟化平台的管理工具。
Virt-install: 进行虚拟机安装的基于命令行的工具。
Virt-clone:进行虚拟机快速克隆的基于命令行的工具。
2. 安装相关组件
2.1 准备工作
2.1.1 确定处理器是否支持虚拟化扩展
运行命令:
egrep'(vmx|svm)' /proc/cpuinfo
如果有对应的输出,则说明处理器有虚拟化扩展的支持,Intel处理器如果有虚拟化扩展的支持flags中会有vmx字段,AMD处理器则对应的有svm字段。
2.1.2 升级到支持KVM的Linux系统
支持KVM的Linux内核的最低版本是2.6.20,目前公司默认使用的rhel4版本的系统不支持KVM,安装之前最好先更换成rhel
6或者CentOS 6以后的版本。
2.2 安装KVM
1. 安装KVM及相应组件
运行命令:
yum install kvmlibvirt python-virtinst qemu-kvm virt-viewer
2.启动libvirt服务
运行命令:
/etc/init.d/libvirtdstart
3. 查看KVM服务是否正常安装
运行命令:
ls -l /dev/kvm
virsh -c qemu:///system list
如果有对应的/dev/kvm字符设备文件则说明KVM正常安装,如果virsh命令正常运行并且有对应的如下输出则表明libvirt相关组件服务正常。
Id
Name
State
--------------------------------------------------------
2.3 安装配置VNC
虚拟机一般通过ssh等远程登录软件进行使用和管理,但是在虚拟机网络还没有配置或者网络出现故障的时候就只能通过虚拟化软件KVM对虚拟机进行访问和管理了。KVM支持两种原生的(不需要通过虚拟机网络)对虚拟机的访问方式,VNC和console。由于console的支持需要对虚拟机的镜像做一些改动,配置较复杂,并且不提供图形界面的传输。因此,一般都会选择配置KVM的VNC支持来进行虚拟机的管理。
VNC(VirtualNetwork
Computing)是一款开源的非常优秀的远程控制工具软件。KVM中有内置的VNC的支持,使KVM的用户非常方便的管理KVM中虚拟机。
1. 安装配置VNC
运行命令:
yum install tigervnc-server
2. 编辑/etc/sysconfig/vncservers,增加一行:
VNCSERVERS="1:root"
设置VNC的password,运行命令:
3. vncpasswd
按照提示进行密码设置。
3. 虚拟机安装
KVM虚拟机的数据都是存放在虚拟磁盘中的,虚拟机的运行,实际上是将虚拟磁盘加载到KVM中进行运行。对应的虚拟机的安装有两种方式:
1. 如果没有虚拟磁盘,那么需要先创建虚拟磁盘,然后使用iso镜像文件或相应的安装源在虚拟磁盘上进行相应的系统的安装。
2. 如果有了虚拟磁盘,并且之前在虚拟磁盘上安装有相应的系统,那么直接加载到KVM中进行运行即可。(虚拟机迁移以及快速加载使用这种方式)。
这里主要介绍方式1,利用virt-install工具进行虚拟机的安装。(方式2与方式1的步骤相同,只是相应的virt-install命令中的一些参数不同)
具体步骤如下:
1. 准备好系统镜像iso文件
/home/kvm/isoimages/rhel-server-6.1-x86_64-dvd.iso
2. 创建空的虚拟磁盘
KVM支持的虚拟磁盘主要有两种格式raw和qcow2。raw格式的磁盘比较耗费宿主机的磁盘空间,即创建多大的虚拟磁盘,就占用了多大的实际物理磁盘空间。qcow2格式是一种按需写入的虚拟磁盘格式,即虚拟机的镜像实际使用了多少磁盘空间,物理磁盘就分配多大的磁盘空间,直到达到最大的创建时指定的磁盘大小。raw格式读写速度比较快,qcow2读写速度相对要慢一些。qcow2是由qcow格式升级而来,在读写速度上已经有非常大的提升,与raw格式相差已经不大。如果不是对读写性能有非常苛刻的要求,一般都使用qcow2格式的虚拟磁盘,不仅节省物理磁盘空间,而且便于迁移。创建过程如下:
运行命令:
qemu-img create-f qcow2 /home/kvm/base.qcow2 20G
3. 安装虚拟机,运行如下命令:
virt-install \
--connectqemu:///system \
--virt-type kvm\
--name rhel_base\
--ram 2048 \
--vcpus=2 \
--diskpath=/home/kvm/base.qcow2,format=qcow2 \
--graphics vnc,listen=0.0.0.0,port=8025\
--cdrom/home/kvm/isoimages/rhel-server-6.1-x86_64-dvd.iso \
--networknetwork=default \
--os-type linux\
--os-variantrhel6
注意几点:
(1) --disk-path路径与之前创建的虚拟磁盘路径对应,
format选qcow2。
(2) --cdrom 路径与之前准备的iso镜像路径相同。
(3) --network使用network=default,KVM虚拟机最主要使用bridge和nat两种网络模式,由于公司内部对平行的10段平行网络地址有严格的限制,因此我们使用nat网络模式。
(4) --graphic中vnc的配置,最好使用8000-9000之间的端口,这样我们就可以从自己的办公电脑登录到虚拟机了。后面会从8025端口进行连接。
4. VNC客户端登陆,完成系统的安装及配置
运行完上面的virt-install命令后,界面上又什么都没有了,这是因为我们使用的是没有图形界面的Linux系统,不支持多窗口的显示。我们需要使用VNC客户端进行连接,然后完成安装过程。
在自己的办公电脑上安装VNC客户端,VNC的服务器和客户端都有多种,根据我之前安装的tiger-vncserver,使用TightVNC客户端能正常使用。其下载地址如下:
http://www.tightvnc.com/download.php
安装好客户端以后,打开客户端,在远程机器地址栏输入:宿主机器名:8025,就可以登录到虚拟机,然后我们就能在客户端中看到未完成的安装过程,按照系统的安装步骤,完成安装即可。
5. 安装完虚拟机后进行网络配置
将网络配置成DHCP模式,在我安装的rhel6版本的系统中,网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0如下:
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="52:54:00:3A:59:36"
NM_COnTROLLED="yes"
OnBOOT="yes"
6. 重启虚拟机网络,运行命令:
service network restart
这样,整个虚拟机的安装就告一段落了,此时虚拟机与宿主机之间能够自由通信,虚拟机也能正常访问宿主机所能访问到的网络,但是宿主机以外的外部访问不能进入虚拟机。
4. 完成端口映射配置
由于我们使用的是NAT网络模式,要想宿主机以外的机器能顺利访问虚拟机,就只能通过端口映射的方式进行了。端口映射的大体过程如下:
要完成以上的映射过程,就需要我们基于Linuxiptables建立相应的转发映射规则,将任意的发往宿主机的8322端口的流量都转发给虚拟机的80端口。我们需要在宿主机中运行以下两条命令:
iptables -t nat-A PREROUTING -p tcp --dport 8322 -j DNAT --to
192.168.122.219:22
iptables -AFORWARD -d 192.168.122.219/32 -p tcp -m state --state
NEW -m tcp --dport 22 -jACCEPT
以上命令中,虚拟机的IP为192.168.122.219。两条iptables规则的意思大致如下:
1. 发往宿主机的8322端口的流量,全部向虚拟机192.168.122.219的22端口转发。
2. 允许转发给虚拟机192.168.122.219的22端口的流量通过宿主机转发出去。
完成上面的步骤以后,我们就可以在自己的办公电脑上通过ssh客户端软件登录到虚拟机了。例如,使用putty进行登录。
如果我们要在虚拟机上部署其他的网络服务,只需要对相应的端口进行映射,就可以正常的使用虚拟机中的服务。
5. 虚拟机的管理 5.1 Virsh
在没有图形界面的宿主机中,对KVM虚拟化平台进行管理最好的方式就是virsh工具。在安装完KVM的宿主机上运行命令:
virsh
便可登录到virsh管理界面中,virsh是基于libvirt的虚拟机管理工具,其中中提供各种各样的管理虚拟化平台的命令,功能非常强大。而libvirt管理的虚拟机主要是通过相应的XML文件进行描述的,要改变对应虚拟机的配置只需要修改其对应的配置文件即可。例如在我的试验的宿主机中:
在宿主机上,目前运行着3个虚拟机。
对应的三个虚拟机,我们的系统中有对应的三个xml配置文件,配置着虚拟机的各种属性。
5.2 virt-clone简介
在日常的运维或者开发过程中,配置程序运行的环境,往往是非常繁琐的一个过程。我们如果用虚拟机进行相应服务的搭建,那么我们可以通过虚拟机的克隆,能快速创建一完全一样的,拥有相同运行环境的虚拟机。virt-clone为KVM中运行的虚拟机提供了快速克隆的机制。和virsh,virt-install一样,它也是一个命令行的工具,使用起来比较简单。具体的使用方法可以问问man,运行命令:
man virt-clone