KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux 2.6.20 内核第一次包含了 KVM 。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。
KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)。
一个典型的 KVM 安装包括以下部件:
KVM 需要有 CPU 的支持 (Intel VT 或 AMD SVM),在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持
Intel
处理器的系统,运行grep vmx /proc/cpuinfo
查找 CPU flags 是否包括vmx
关键词AMD
处理器的系统,运行grep svm /proc/cpuinfo
查找 CPU flags 是否包括svm
关键词VT
选项注:
egrep "(vmx|svm)" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
安装 KVM 模块、管理工具和 libvirt (一个创建虚拟机的工具)
yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
/etc/init.d/libvirtd start
chkconfig libvirtd on
lsmod | grep kvm
kvm_intel 54285 0
kvm 333172 1 kvm_intel
virsh -c qemu:///system list
Id Name State
----------------------------------------------------
如果这里是错误信息,说明安装出现问题
kvm 上网有两种配置,一种是 default,它支持主机和虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机,另外一种是 bridge 方式,可以使虚拟机成为网络中具有独立 IP 的主机。
默认的网络连接是 virbr0,它的配置文件在 /var/lib/libvirt/network 目录下,默认配置为
cat /var/lib/libvirt/network/default.xml
default
77094b31-b7eb-46ca-930e-e0be9715a5ce
配置桥接网卡,配置如下
more /etc/sysconfig/network-scripts/ifcfg-\*
:::::::::::::: 新建文件
/etc/sysconfig/network-scripts/ifcfg-br0
::::::::::::::
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.39.20
NETMASK=255.255.255.0
GATEWAY=192.168.39.1
DNS1=8.8.8.8
:::::::::::::: 物理网卡
/etc/sysconfig/network-scripts/ifcfg-em1
::::::::::::::
DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
BRIDGE=br0
::::::::::::::
NATM模式下不用配置为网卡
(1) 修改 VNC 服务端的配置文件
[root@LINUX ~]# vim /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0" 第十二行,把 vnc_listen 前面的#号去掉。
(2) 重启 libvirtd 和 messagebus 服务
[root@LINUX ~]# /etc/init.d/libvirtd restart
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: libvirtd: initialization failed [FAILED]
解决办法:
[root@LINUX ~]# echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
[root@LINUX ~]# source /etc/profile
[root@LINUX ~]# /etc/init.d/libvirtd restart
[root@LINUX ~]# /etc/init.d/messagebus restart
virt-manager 是基于 libvirt 的图像化虚拟机管理软件,操作类似 vmware,不做详细介绍。
[root@LINUX ~]# mkdir -p /home/iso
[root@LINUX ~]# mkdir -p /home/kvm
将 iso 拷贝到 /home/iso 目录
本例创建的磁盘文件为 10G,实际使用中应注意下 /home 的空间,可以设置为 100G
[root@LINUX ~]# cd /home/kvm/
[root@LINUX ~]# qemu-img create -f qcow2 -o preallocation=metadata kvm_mode.img 10G
virt-install命令有许多选项,这些选项大体可分为下面几大类,同时对每类中的常用选项也做出简单说明。
一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等;
安装方法:指定安装方法、GuestOS类型等;
存储配置:指定存储类型、位置及属性等;
网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;
设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;
有独立 IP 时使用这种方式
[root@LINUX ~]# chmod -R 777 /etc/libvirt
[root@LINUX ~]# chmod -R 777 /home/kvm
[root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
-f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
--graphics vnc,listen=0.0.0.0,port=7788, --network bridge=br0 \
--force --autostart
没有独立 IP 时使用这种方式
[root@LINUX ~]# chmod -R 777 /etc/libvirt
[root@LINUX ~]# chmod -R 777 /home/kvm
[root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
-f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
--graphics vnc,listen=0.0.0.0,port=7788 \
--force --autostart
点击 continue 是如果出现闪退的情况,请修改 Option->Expert->ColorLevel 的值为 full