----本文修改整理自网络,非本人原创。
虚拟化介绍
虚拟化(Virtualization)是一种资源管理技术,将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来。打破实体结构间的不可切割的障碍,使的用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
虚拟化技术中大多数人接触的最早且最多的应该就是虚拟机(Virtual Machine),它是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。所谓完整的计算机系统简单点解释就是一台含有CPU、内存、硬盘、显卡、网卡、光驱等设备的电脑,只是对于虚拟机来说这些设备都是通过软件模拟出来的。
虚拟化分类
全虚拟化(Full Virtualization)模拟出来的虚拟机中的操作系统是跟底层的硬件完全隔离的,虚拟机中的所有的硬件资源都是通过虚拟化软件基于硬件来模拟的,代表产品有VMware ESXI和KVM。
这样的好处就是每台虚拟机有一个完全独立和安全的运行环境,虚拟机中的操作系统也不需要做任何修改,并且易于迁移。在操作全虚拟化的虚拟机的时候,使用者并不知道这是一台虚拟机。缺点就是由于虚拟机的资源全部都需要通过虚拟化软件来模拟,会损失一部分的性能。 半虚拟化(Para Virtualization)架构跟全虚拟化基本一样,但是为了提高性能和效率,需要修改虚拟机中的操作系统来集成一些虚拟化方面的代码,通过这种方法来减小虚拟化软件的负载。代表作有Microsoft的Hyper-V和XEN。这样的好处就是虚拟化整体的性能会更好,因为修改后的虚拟机操作系统承载了部分虚拟化软件的工作,缺点就是由于要修改虚拟机的操作系统,用户知道使用的环境是虚拟化环境,而且兼容性比较差,用户体验也比较麻烦(得去找集成过虚拟化代码的操作系统)。Hypervisor介绍
Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
Hypervisor分类
通常来讲Hypervisor分为两类:原生型和宿主型
原生型(Native or Bare-metal)又称裸机型,Hypervisor作为一个很薄的操作系统(操作系统也是软件,只不过它是一个比较特殊的软件)直接运行在硬件之上来控制硬件资源并管理虚拟机。比较熟知的有VMware的ESXi和Microsoft的Hyper-V等。
宿主型(Hosted)又称托管型,Hypervisor运行在传统的操作系统上,同样可模拟出一整套虚拟硬件平台。比较熟知的为VMware的Workstation和Oracle的Virtual Box等。
从性能角度来看,不论原生型还是宿主型都会有性能损耗,但宿主型比原生型的损耗更大,所以企业生产环境中基本都使用的是原生型Hypervisor,宿主型的Hypervisor一般都用到实验或测试环境中。
KVM介绍
KVM(Kernel-based Virtual Machine)是一种基于Linux x86硬件平台的开源全虚拟化解决方案。KVM需要CPU的虚拟化指令集支持,如Intel的Intel VT(vmx指令集)或AMD的AMD-V(svm指令集)。
KVM作为Hypervisor,主要涵盖有两个重要组成部分,一个是Linux内核的KVM模块,另外一个是提供硬件仿真的QEMU(Quick Emulator)。 另外为了KVM整个虚拟化环境能够易于管理,还需要Libvirtd服务和基于Libvirt开发出来的管理工具。
KVM虚拟化体系结构
KVM基本知识介绍
KVM模块
严格意义上讲,KVM仅仅只是一个Linux模块,他的主要功能在提供物理CPU到虚拟CPU的一个映射,提供虚拟机的硬件加速来提升虚拟机的性能。
KVM模块本身没办法作为一个Hypervisor模拟出一个完整的虚拟机,并且我们也没办法直接对Linux内核进行操作,所以需要借助其他的软件来进行,QEMU就扮演着一个这样的角色。
QEMU
QEMU本身就是一个宿主型的Hypervisor,就算是没有KVM他一样也可以通过模拟来创建和管理虚拟机。但是上面也提到过宿主型的Hypervisor在性能上损耗很大,所以QEMU又借助了KVM的模块来提升虚拟化的整体性能。
Libvirt
Libvirt是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。Libvirt也支持多种虚拟化平台如KVM, Xen, ESX和QEMU等。
Libvirtd
Libvirtd是运行的在KVM主机上的一个服务端守护进程,为KVM以及它的虚拟机提供本地和远程的管理功能,基于Libvirt开发出来的管理工具可通过Libvirtd服务来管理整个KVM环境。Libvirt就是一堆标准的库文件,给多种虚拟化平台提供一个统一的编程接口,相当于管理工具需要基于Libvirt的标准接口来进行开发,在开发完成后的工具可支持多种虚拟化平台。而Libvirtd是一个在Host主机上运行着的守护进程,在管理工具和KVM之间起到一个桥梁的作用,管理工具可通过Libvirtd服务来管理整个虚拟化环境。
Virsh
virsh就是基于Libvirt开发的一个命令行的KVM管理工具,可以使用直接模式(Direct Mode)或交互模式(Interactive Mode)来实现虚拟机的管理,如创建、删除、启动、关闭等。
Virsh-Manager
Virt-Manager同样也是一个KVM管理工具,不过它是基于图形界面的。