KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。
KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。
/* 1).KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。 2).是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。 3).它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。 4).KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。 5).KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。 6).在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。 */ 特点1).要求cpu 必须支持虚拟化。
2).性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
3).cpu使用率控制很好。
4).控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很高的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。
KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。
[root@kvm-47 ~]# cat /proc/cpuinfo | egrep 'vmx|svm' |wc -l 4 安装KVM基础环境kvm相关安装包及其作用:
/* qemukvm 主要的KVM程序包 pythonvirtinst 创建虚拟机所需要的命令行工具和程序库 virtmanager GUI虚拟机管理工具 virttop 虚拟机统计命令 virtviewer GUI连接程序,连接到已配置好的虚拟机 libvirt C语言工具包,提供libvirt服务 libvirtclient 为虚拟客户机提供的C语言工具包 virtinstall 基于libvirt服务的虚拟机创建命令 bridgeutils 创建和管理桥接设备的工具 */安装 kvm
yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install # 重启宿主机,以便加载 kvm 模块 reboot # 查看KVM模块是否被正确加载 [root@kvm-47 ~]# lsmod | grep kvm kvm_intel 170181 4 kvm 554609 1 kvm_intel irqbypass 13503 3 kvm 启动kvm服务启动设置其开机自动启动
systemctl start libvirtd && systemctl enable libvirtd查看状态操作结果,如Active: active (running),说明运行情况良好
[root@kvm-47 ~]# systemctl status libvirtd ● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-11-04 10:41:23 CST; 2h 50min ago Docs: man:libvirtd(8) https://libvirt.org Main PID: 947 (libvirtd) Tasks: 20 (limit: 32768) CGroup: /system.slice/libvirtd.service ├─ 947 /usr/sbin/libvirtd ├─1082 /usr/sbin/dnsmasq --conf-file=http://www.likecs.com/var/lib/libv... └─1083 /usr/sbin/dnsmasq --conf-file=http://www.likecs.com/var/lib/libv... Nov 04 12:36:40 kvm-47 libvirtd[947]: 2020-11-04 04:36:40.956... Nov 04 12:40:29 kvm-47 libvirtd[947]: 2020-11-04 04:40:29.654... Nov 04 12:48:44 kvm-47 dnsmasq-dhcp[1082]: DHCPREQUEST(virbr0... Nov 04 12:48:44 kvm-47 dnsmasq-dhcp[1082]: DHCPACK(virbr0) 19... Nov 04 12:52:46 kvm-47 dnsmasq-dhcp[1082]: DHCPREQUEST(virbr0... Nov 04 12:52:46 kvm-47 dnsmasq-dhcp[1082]: DHCPACK(virbr0) 19... Nov 04 12:59:56 kvm-47 dnsmasq-dhcp[1082]: DHCPREQUEST(virbr0... Nov 04 12:59:56 kvm-47 dnsmasq-dhcp[1082]: DHCPACK(virbr0) 19... Nov 04 13:24:39 kvm-47 dnsmasq-dhcp[1082]: DHCPREQUEST(virbr0... Nov 04 13:24:39 kvm-47 dnsmasq-dhcp[1082]: DHCPACK(virbr0) 19... Hint: Some lines were ellipsized, use -l to show in full. [root@kvm-47 ~]# systemctl is-enabled libvirtd enabled 安装虚拟机安装前要设置环境语言为英文LANG="en_US.UTF-8",如果是中文的话某些版本可能会报错。CentOS 7 在这里修改 /etc/locale.conf。