环境:
系统版本:CentOS 6.5 x86_64
内存:8G
CPU:Intel i5-4430
IP:192.168.1.100
一、KVM简介
KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),是一个开源的系统虚拟化模块,基于硬件的完全虚拟化,不过需要硬件支持(如Intel VT技术或者AMD V技术)。自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
二、KVM安装配置
1、准备工作
1.1 关闭iptables防火墙
[root@localhost ~]# service iptables stop //停止iptables
1.2 CPU开通支持虚拟化
需要在BIOS中开启虚拟化,一般是默认开启的
2、安装kvm虚拟机
2.1 查看CPU是否支持kvm完全虚拟机
[root@localhost ~]# cat /proc/cpuinfo | grep 'vmx' //Intel CPU判断方法
[root@localhost ~]# cat /proc/cpuinfo | grep 'svm' //AMD CPU判断方法
根据对应的CPU型号进行选择判断方法,如果能出现信息 ,就说明CPU支持KVM完全虚拟机
2.2 安装kvm和其它虚拟化所需管理软件包
[root@localhost ~]# yum install -y kvm virt-* libvirts bridge-utils qemu-img
软件包名称介绍:
kvm:软件包中含有KVM内核模块,它在默认linux内核中提供kvm管理程序
libvirts:安装虚拟机管理工具,使用virsh等命令来管理和控制虚拟机
bridge-utils:设置网络网卡桥接
virt-*:创建、克隆虚拟机命令,使用qemu命令来创建磁盘等。
qemu-img:安装qemu组件,使用qemu命令来创建磁盘等。
2.3 加载kvm模块,查看kvm模块是否被加载
[root@localhost ~]# modprobe kvm-intel //加载kvm模块
[root@localhost ~]# lsmod | grep kvm //查看kvm模块是否被加载
2.4 重启确认kvm是否被加载
[root@localhost ~]# reboot //重启
[root@localhost ~]# lsmod | grep kvm //查看kvm模块是否被加载
2.5 查看已打开虚拟机列表
[root@localhost ~]# virsh list //查看虚拟机列表,如果有的话,就会显示出来
2.6 配置eth0、br0网卡
[eth0网卡]
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=74:D4:35:87:71:02
TYPE=Ethernet
UUID=723095b7-27d1-4f88-aa5f-5aa6b0472fbc
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
BRIDGE=br0
[br0网卡]
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
大家可以看着我的配置来进行修改,
2.7 查看目前所有的网桥接口
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.74d435877102 no eth0
virbr0 8000.5254005ce327 yes virbr0-nic
2.8 修改VNC服务器的配置文件
[root@localhost ~]# vim /etc/libvirt/qemu.conf
将 vnc_listen = "0.0.0.0" 前面的#号注释去掉 //在文件的第12行
2.9 重启libvirtd和messagebus服务
[root@localhost ~]# /etc/init.d/libvirtd restart //重启libvirtd服务
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]
[root@localhost ~]# /etc/init.d/messagebus restart //重启messagebus服务
Stopping system message bus: [ OK ]
Starting system message bus: [ OK ]
3、在宿主主机上创建、安装kvm虚拟机
3.1 创建镜像文件目录和虚拟磁盘存放目录
[root@localhost ~]# mkdir /iso
[root@localhost ~]# mkdir -p /data/kvmdisk/
3.2 把Centos6.5和windows2003系统文件拷贝到iso目录下
这个可以通过ftp或者通过挂载,下载都行
3.3 创建虚拟机
[root@localhost ~]# virt-install -n win03 -r 512 -vcpus=1 -s 50 -c /iso/win2003.iso --hvm --os-type=windows -f /data/kvmdisk/win2003.img --graphics vnc,listen=0.0.0.0,port=7789 --force --autostart
//命令解释:
创建一个名叫win03的虚拟机,内存大小为512内存,1个cpu,50G的硬盘,安装镜像是/iso/win2003.iso 指定为全虚拟化,系统类型为windows 指定虚拟机硬盘为/data/kvmdisk/win2003.img,同时配置vnc的端口为7789 自动开始安装
virt-install参数说明:
-n --name= 虚拟机名称
-r --ram= 虚拟机分配的内存
-u --uuid= 虚拟机的uuid
--vcpus=2 指定2个vcpu个数
-v --hvm 全虚拟他
-p --paravirt 半虚拟化
-l --location=localdir 安装源
--vnc 使用vnc
//可以用"--graphics vnc,listen=LISTEN,..."
--vncport 指定vnc监控端口,默认端口为5900,端口不能重复使用
--vnclisten 指定vnc绑定ip
-c --cdrom=光驱或者安装途径
-s --file-size= 使用磁盘映像的大小,单位为GB
-f --file= 作为磁盘映像使用的文件
--disk= 使用不同选项作为磁盘使用安装介质
--force 防止交互式提示
--os-variant 指定操作系统类型
--accelerate 加速
--network 网络类型,此处用的是默认,一般用的是应该是bridge桥接
3.4 创建kvm虚拟机的磁盘文件
[root@localhost ~]# qemu-img create -f qcow2 -o preallocation=metadata kvm_test.img 10G
//命令解释:
创建一个qcow2虚拟化镜像格式,大小为10G,文件名为kvm_test.img
4、vnc客户端连接KVM虚拟机
4.1 使用vnc连接
使用vnc连接刚刚创建的kvm虚拟机,比如刚刚创建的就可以使用192.168.1.100:7789
4.2 操作kvm虚拟机
查看所有的kvm虚拟机
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
1 kvm_mode_5566 running
5 win03_2 running
7 win03_3 running
- win03_1 shut off
查看在线的虚拟机
[root@localhost ~]# virsh list
Id Name State
----------------------------------------------------
1 kvm_mode_5566 running
5 win03_2 running
7 win03_3 running
停止kvm虚拟机
[root@localhost ~]# virsh shutdown win03_2
Domain win03_2 is being shutdown
[root@localhost ~]#
更多操作命令如下,virsh命令行管理工具
命令行:
virsh list #显示本地活动虚拟机
virsh list –all #显示本地所有的虚拟机(活动的+不活动的)
virsh define ubuntu.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
virsh start ubuntu #启动名字为ubuntu的非活动虚拟机
virsh create ubuntu.xml #创建虚拟机(创建后,虚拟机立即执行,成为活动主机)
virsh suspend ubuntu #暂停虚拟机
virsh resume ubuntu #启动暂停的虚拟机
virsh shutdown ubuntu #正常关闭虚拟机
virsh destroy ubuntu #强制关闭虚拟机
virsh undefine ubuntu #移除ubuntu虚拟机
virsh dumpxml ubuntu #显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等)
virsh setmem ubuntu 512000 #给不活动虚拟机设置内存大小
virsh setvcpus ubuntu 4 # 给不活动虚拟机设置cpu个数
针对虚拟机操作
virsh domid win03_3 #查看虚拟机的标识符
virsh domname win03_2 #查看虚拟机的名称
virsh domuuid win03_2 #查看虚拟机的 UUID
virsh domstate win03_2 #查看虚拟机目前的状态
virsh dominfo win03_2 #查看虚拟机的信息
提示:win03_2为虚拟机名称 操作需要接虚拟名称的
4.3 配置kvm虚拟机
通过vnc连接上虚拟机后,安装好系统,配置好IP,就可以正常使用了,一个完整的虚拟机就这样创建好了!
三、常见问题
1、问题一:
创建虚拟机时,提示如下:
Starting install...
ERROR internal error Process exited while reading console log output: char
device redirected to /dev/pts/1
qemu-kvm: -drive file=/etc/libvirt/kvm_mode.img,if=none,id=drive-ide0-0-
0,format=raw,cache=none: could not open disk image /etc/libvirt/kvm_mode.img:
Permission denied
解决方法:
文件夹赋予全部权限
[root@localhost ~]# chmod -R 777 /etc/libvirt/
原因:
暂时没有找到
2、问题二:
开启宿主主机时,没有自动启动小机,手动执行,开启小机,结果提示如下错误:
[root@localhost ~]# virsh start win03_2
error: Failed to start domain win03_2
error: unsupported configuration: Unable to find security driver for label selinux
解决方法:
不要禁用selinux,开启selinux
[root@localhost ~]# sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
[root@localhost ~]# reboot //重启生效
原因:
可能是宿主主机禁用了selinux,kvm无法加载安全模块了
附:虚拟机配置文件详解,以win03_1.xml为例
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh edit win03_1
or other application using the libvirt API.
-->
<domain type='kvm'> //域类型
<name>win03_1</name> //虚拟机名称
<uuid>dd61db7a-3b7c-1c14-a169-3fbd6d710c57</uuid> //虚拟机uuid
<memory unit='KiB'>524288</memory> //虚拟机最大内存
<currentMemory unit='KiB'>524288</currentMemory> //虚拟机当前内存
<vcpu placement='static'>1</vcpu> //vcpu个数
<os>
<type arch='x86_64' machine='rhel6.5.0'>hvm</type> //全虚拟化
<boot dev='hd'/> //从硬盘启动
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'> //disk是用来描述磁盘的主要容器
<driver name='qemu' type='raw' cache='none'/> //缓存大小
<source file='/data/kvmdisk/win2003.img'/> //指定磁盘文件的绝对路径
<target dev='hda' bus='ide'/> //ide接口
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<disk type='file' device='cdrom'> //cdrom信息
<driver name='qemu' type='raw'/>
<source file='/iso/win2003.iso'/> //cdrom镜像位置
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'> //桥接设置
<mac address='52:54:00:7f:c7:a6'/> //mac地址
<source bridge='br0'/> //桥接网卡
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<graphics type='vnc' port='7789' autoport='no' listen='0.0.0.0'> //vnc端口
<listen type='address' address='0.0.0.0'/> //监听的IP
</graphics>
<input type='tablet' bus='usb'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</memballoon>
</devices>
</domain>