KVM的软件很好安装,只是想顺利正常的使用估计要费一点事,我在创建虚拟机的时候,出现这样那样的错误,开始是创建虚拟机一直不成功,看了网上的别人的资料,好像网上的资料都一样似得,大同小异。最后还是自己琢磨着解决了问题,后来就是创建成功了安装虚拟机出错,反正是费了一点事,最后问题都解决了,安装的虚拟机配上IP地址也测试成功了。至于遇到的问题,要亲自操作一下,分析下报出的错,对今后工作中就会有很大的帮助,对了查看日志也会对排除错误有很大的帮助。
准备工作:
1、关闭防火墙或者开启防火墙
2、关闭selinux
3、开启CPU虚拟化
主机网卡设置:
1、eth0桥接br0,ip地址为10.11.22.189,用于连接外网
2、eth1桥接br1,ip地址为192.168.100.100,用于连接内网,NAT的方式在组后有说明。
准备工作做好后就可以操作安装:
[[email protected] ~]# grep "flags" /proc/cpuinfo |uniq
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
#如果显示信息出现vmx字样就说明CPU支持虚拟化。
[[email protected] ~]# yum -y install kvm virt-* libvirts bridge-utils qemu-img avahi
kvm 软件包。kvm 软件包中含有 KVM 内核模块,它可在默认 Linux 内核中提供 KVM 管理程序。
libvirts 安装虚拟机管理工具,使用virsh 等命令来管理和控制虚拟机
bridge-utils 安装网络支持,设置桥接
virt-* 创建、克隆虚拟机等命令,以及图形化管理工具virt-manager
qemu-img 安装qemu 组件,使用qemu 命令来创建磁盘等
[[email protected] ~]# modprobe kvm-intel #加载KVM内核
[[email protected] ~]# lsmod |grep kvm #查看模块是否加载成功
kvm_intel 54285 0
kvm 333172 1 kvm_intel
[[email protected] ~]# reboot
[[email protected] ~]# lsmod |grep kvm #重启后再次查看是否加载成功
kvm_intel 54285 0
kvm 333172 1 kvm_intel
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #配置网卡为bridge桥接模式
HWADDR=00:0C:29:FA:EE:2C
TYPE=Ethernet
UUID=5a5e60a7-eb49-47e3-9e29-8251635005be
ONBOOT=yes
NM_CONTROLLED=yes
BRIDGE=br0 #这里一定要改
BOOTPROTO=static
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 #创建bridge网卡
DEVICE=br0 #设备名字要改成br0
TYPE=Bridge #设备类型改成Bridge
UUID=5a5e60a7-eb49-47e3-9e29-8251635005be
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=10.11.22.189
GATEWAY=10.11.22.1
DNS1=202.96.128.86
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 #修改方法同上
DEVICE=eth1
HWADDR=00:0C:29:FA:EE:36
TYPE=Ethernet
UUID=6003fe22-4d48-4a80-ba1f-b0464a5fe479
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
BRIDGE=br1
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-br1
DEVICE=br1
HWADDR=00:0C:29:FA:EE:36
TYPE=Bridge
UUID=6003fe22-4d48-4a80-ba1f-b0464a5fe479
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.100.100
NETMASK=255.255.255.0
[[email protected] ~]# service network restart #重启网络服务
正在关闭接口 br0: [确定]
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
弹出界面 eth1: [确定]
弹出界面 br0: Determining if ip address 10.11.22.189 is already in use for device br0...
[确定]
弹出界面 br1: Determining if ip address 192.168.100.100 is already in use for device br1...
[确定]
[[email protected] ~]# ifconfig #查看网卡信息
br0 Link encap:Ethernet HWaddr 00:0C:29:FA:EE:2C
inet addr:10.11.22.189 Bcast:10.11.22.255 Mask:255.255.255.0
inet6 addr: fd2f:ce52:41eb:0:20c:29ff:fefa:ee2c/64 Scope:Global
inet6 addr: fe80::20c:29ff:fefa:ee2c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:30912 errors:0 dropped:0 overruns:0 frame:0
TX packets:5499 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1923920 (1.8 MiB) TX bytes:4992638 (4.7 MiB)
br1 Link encap:Ethernet HWaddr 00:0C:29:FA:EE:36
inet addr:192.168.100.100 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fd2f:ce52:41eb:0:20c:29ff:fefa:ee36/64 Scope:Global
inet6 addr: fe80::20c:29ff:fefa:ee36/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25296 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1625868 (1.5 MiB) TX bytes:4631 (4.5 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:FA:EE:2C
inet6 addr: fe80::20c:29ff:fefa:ee2c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61129 errors:0 dropped:0 overruns:0 frame:0
TX packets:8082 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13445644 (12.8 MiB) TX bytes:5133092 (4.8 MiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:FA:EE:36
inet6 addr: fe80::20c:29ff:fefa:ee36/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:69010 errors:0 dropped:0 overruns:0 frame:0
TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:18577753 (17.7 MiB) TX bytes:4989 (4.8 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
virbr0 Link encap:Ethernet HWaddr 52:54:00:01:81:A8
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:2474 (2.4 KiB)
vnet0 Link encap:Ethernet HWaddr FE:54:00:20:AD:8E
inet6 addr: fe80::fc54:ff:fe20:ad8e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:1 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
vnet1 Link encap:Ethernet HWaddr FE:54:00:46:97:BA
inet6 addr: fe80::fc54:ff:fe46:97ba/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:1 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[[email protected] ~]# brctl show #查看桥接得到信息
bridge name bridge id STP enabled interfaces
br0 8000.000c29faee2c no eth0
br1 8000.000c29faee36 no eth1
virbr0 8000.5254000181a8 yes virbr0-nic
[[email protected] ~]# cp /etc/libvirt/qemu.conf /etc/libvirt/qemu.conf.panglu-$(date +%F)
[[email protected] ~]# vi /etc/libvirt/qemu.conf #配置文件
# Master configuration file for the QEMU driver.
# All settings described here are optional - if omitted, sensible
# defaults are used.
# VNC is configured to listen on 127.0.0.1 by default.
# To make it listen on all public interfaces, uncomment
# this next option.
#
# NB, strong recommendation to enable TLS + x509 certificate
# verification when allowing public access
#
vnc_listen = "0.0.0.0 #只修改这一行,将前面的#号去掉即可,开起VNC功能
[[email protected] ~]# service messagebus start #启动服务
启动系统消息总线: [确定]
[[email protected] ~]# service avahi-daemon start
启动 Avahi 守护进程... [确定]
[[email protected] ~]# service libvirtd start
启动 libvirtd 守护进程: [确定]
[[email protected] ~]# chkconfig messagebus on
[[email protected] ~]# chkconfig avahi-daemon on
[[email protected] ~]# chkconfig libvirtd on
[[email protected] ~]# chkconfig --list|egrep ‘messagebus|avahi-daemon|libvirtd‘
avahi-daemon 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
libvirtd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
messagebus 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[[email protected] ~]# mkdir -p /data/vmdisk #创建存放磁盘文件目录
[[email protected] ~]# mkdir /iso #创建光盘镜像存放目录
[[email protected] ~]# dd if=/dev/cdrom of=/iso/centos6.5_64.iso #我是直接拷贝光驱中光盘的镜像
[[email protected] ~]# qemu-img create -f qcow2 -o preallocation=metadata /data/vmdisk/leamon.qcow2 10G
#创建一个名字为leamon1.qcow2大小为10G的磁盘,qcow2是模式
Formatting ‘/data/vmdisk/leamon.qcow2‘, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 preallocation=‘metadata‘
[[email protected] ~]# virt-install --name leamon1 --ram 512 --vcpus 1 --os-type linux --os-variant rhel6 --disk path=/data/vmdisk/leamon.qcow2 --network bridge:br0,model=virtio --network bridge:br1,model=virtio --cdrom /iso/centos6.5_64.iso --accelerate -v --vnc -- vncport=5990
#命令参数解析
--name 给虚拟机起个名字
--ram 分配给虚拟机的内存,单位MB
--vcpus 分配给虚拟机的cpu 个数
--disk 指定虚拟机安装文件路径,如果虚拟机使用lvm分区,这里就指向到lvm的分区就行
--network bridge 指定桥接网卡
--os-type=linux 要安装的操作系统类型,例如:‘linux‘、‘unix‘、‘windows‘
--os-variant=rhel6 操作系统版本
--accelerate 表示使用内核加速功能
--cdrom 指定磁盘镜像文件的全路径
--vnc 表示可以用vnc 进行连接配置
--vncport 表示vnc 的端口,-1 表示随机生成端口
-d 打印调试信息到终端(安装过程)
开始安装......
创建域...... | 0 B 00:01
无法打开显示:
运行 ‘virt-viewer --help‘ 来查看可用命令行选项的完整列表
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
注意:#出现以上信息就可以用VNC连接安装操作系统了。
[[email protected] ~]# virsh list --all #查看虚拟机的运行状态
Id 名称 状态
----------------------------------------------------
- leamon1 关闭
[[email protected] ~]# virsh start leamon1 #启动虚拟机
域 leamon2 已开始
[[email protected] ~]# virsh destroy leamon1 #删除虚拟机
域 leamon1 被删除
[[email protected] qemu]# vim /etc/libvirt/qemu/leamon1.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 leamon1
or other application using the libvirt API.
-->
<domain type=‘kvm‘>
<name>leamon1</name> #此处为虚拟机名字
<uuid>8ceea873-21ae-2a03-a7c7-647e762f864f</uuid> #uuid标示
<memory unit=‘KiB‘>1024000</memory> #此处为内存
<currentMemory unit=‘KiB‘>1024000</currentMemory>
<vcpu placement=‘static‘>1</vcpu> #此处为cpu核数
<os>
<type arch=‘x86_64‘ machine=‘rhel6.6.0‘>hvm</type>
<boot dev=‘hd‘/> #此处为启动项目,若想从光盘启动可设置为<boot dev=‘cdrom‘/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset=‘utc‘/>
<on_poweroff>destroy</on_poweroff> #此处为关机命令,使用 virsh destroy leamon1 关闭虚拟机
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type=‘file‘ device=‘disk‘> #此处为硬盘信息
<driver name=‘qemu‘ type=‘raw‘ cache=‘none‘/>
<source file=‘/data/vmdisk/leamon.qcow3‘/>
<target dev=‘vda‘ bus=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/>
</disk>
<disk type=‘block‘ device=‘cdrom‘> #此处为cdrom信息,可修改为iso的路径
<driver name=‘qemu‘ type=‘raw‘/>
<target dev=‘hdc‘ bus=‘ide‘/>
<readonly/>
<address type=‘drive‘ controller=‘0‘ bus=‘1‘ target=‘0‘ unit=‘0‘/>
</disk>
<controller type=‘usb‘ index=‘0‘ model=‘ich9-ehci1‘> #此处为usb接口信息
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x7‘/>
</controller>
<controller type=‘usb‘ index=‘0‘ model=‘ich9-uhci1‘>
<master startport=‘0‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘ multifunction=‘on‘/>
</controller>
<controller type=‘usb‘ index=‘0‘ model=‘ich9-uhci2‘>
<master startport=‘2‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x1‘/>
</controller>
<controller type=‘usb‘ index=‘0‘ model=‘ich9-uhci3‘>
<master startport=‘4‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x2‘/>
</controller>
<controller type=‘ide‘ index=‘0‘>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x01‘ function=‘0x1‘/>
</controller>
<interface type=‘bridge‘> #此处为网卡1信息,使用bridge桥接模式连接virbr0联网
<mac address=‘52:54:00:20:ad:8e‘/>
<source bridge=‘br0‘/>
<model type=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
</interface>
<interface type=‘bridge‘> #此处为网卡2信息,使用bridge桥接方式到br1连接内网
<mac address=‘52:54:00:46:97:ba‘/>
<source bridge=‘br1‘/>
<model type=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x04‘ function=‘0x0‘/>
</interface>
#若要添加网卡可新加配置,注意修改mac地址
<serial type=‘pty‘>
<target port=‘0‘/>
</serial>
<console type=‘pty‘>
<target type=‘serial‘ port=‘0‘/>
</console>
<input type=‘tablet‘ bus=‘usb‘/>
<input type=‘mouse‘ bus=‘ps2‘/>
<graphics type=‘vnc‘ port=‘5988‘ autoport=‘no‘/> #此处为VNC连接端口,我的是5988,克隆的主机要改此端口
<video>
<model type=‘cirrus‘ vram=‘9216‘ heads=‘1‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x02‘ function=‘0x0‘/>
</video>
<memballoon model=‘virtio‘>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x07‘ function=‘0x0‘/>
</memballoon>
</devices>
</domain>
说明:修改配置的时候需要关闭KVM virsh destroy leamon1,使用virsh define leamon1.xml使配置生效,使用virsh start leamon1启动虚拟机,如果使用NAT的方式一定要确认开启转发功能,
[[email protected] qemu]# more /proc/sys/net/ipv4/ip_forward
1
克隆虚拟机的话要关闭模板机后克隆,然后手动更改xml配置文件的vnc端口,重启libvirtd服务使更改的端口生效,最简单的就是直接复制模板机的文件进行克隆,
[[email protected] ~]#cp /data/vmdisk/leamon.qcow2 /date/vmdisk/leamon-3.qcow2
[[email protected] ~]#cp /etc/libvirt/qemu/leamon1.xml /etc/libvirt/qemu/leamon-3.xml
#复制完了虚拟机的文件后要修改相应的参数,要不然会报错,UUID可以任意修改,保证唯一;MAC地址可以随意修改,也要保证唯一;修改VNC端口,别冲突就行;还有虚拟磁盘信息及主机名字。
[[email protected] ~]# virsh define leamon-3.xml #创建虚拟机
[[email protected] ~]# virsh start leamon-3 #启动虚拟机
[[email protected] ~]#virsh autostart leamon1 #设置虚拟机自启动