虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同得操作系统,并且应用程序都可以在相互独立得空间内运行而不受影响,从而显著提高计算机得工作效率。
虚拟化使用软件得方法重新定义规划IT资源,可以实现IT资源得动态分配、灵活调度、跨域共享、提高IT资源利用率,使IT资源能够真正成为基础设施,服务于各行各业中灵活多变得应用需求。
1.0虚拟化简史
其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个Hypervisor:
◆它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
◆它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
◆它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
◆它需要支持虚拟化扩展的 CPU
◆他是完全开源的
官网
1.1 kvm架构
KVM 是基于虚拟化扩展
(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。
KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 线程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
Linux 上的用户空间、内核空间和虚机:
◆ Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
◆ KVM:运行在内核空间,提供 CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
◆ QEMU:修改过的被 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。
KVM 是实现拦截虚机的 I/O 请求的原理:
现代 CPU 本身实现了对特殊指令的截获和重定向的硬件支持,甚至新硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化从而提高性能。以X86 平台为例,支持虚拟化技术的 CPU 带有特别优化过的指令集来控制虚拟化过程。通过这些指令集,VMM很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机运行,将控制权交回给 VMM 处理。VMM 还可以利用硬件的虚级化增强机制,将客户机在受限模式下对一些特定资源的访问,完全由硬件重定向到 VMM指定的虚拟资源,整个过程不需要暂停客户机的运行和 VMM的参与。
由于虚拟化硬件提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了VMM的设计,使得VMM性能更加强大。
从2005 年开始,Intel 在其处理器产品线中推广 Intel Virtualization Technology 即 IntelVT技术。
QEMU-KVM:
其实 QEMU 原本不是 KVM 的一部分,它自己就是一个纯软件实现的虚拟化系统,所以其性能低下。但是,QEMU 代码中包含整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及 KVM需要使用到的虚拟设备模拟(网卡、显卡、存储控制器和硬盘等)。 为了简化代码,KVM 在 QEMU 的基础上做了修改。VM 运行期间,QEMU 会通过 KVM 模块提供的系统调用进入内核,由 KVM 负责将虚拟机置于处理的特殊模式运行。当虚机进行 I/O 操作时,KVM 会从上次系统调用出口处返回 QEMU,由 QEMU 来负责解析和模拟这些设备。 从 QEMU 角度看,也可以说是
QEMU 使用了 KVM 模块的虚拟化功能,为自己的虚机提供了硬件虚拟化加速。除此以外,虚机的配置和创建、虚机运行所依赖的虚拟设备、虚机运行时的用户环境和交互,以及一些虚机的特定技术比如动态迁移,都是 QEMU 自己实现的。
KVM:
KVM 内核模块在运行时按需加载进入内核空间运行。
KVM 本身不执行任何设备模拟,需要 QEMU 通过 /dev/kvm 接口设置一个 GUEST OS 的地址空间,向它提供模拟的 I/O 设备,并将它的视频显示映射回宿主机的显示屏。它是KVM 虚机的核心部分,其主要功能是初始化 CPU 硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚机的运行提供一定的支持。
以在 Intel 上运行为例,KVM 模块被加载的时候,
它做的事情如下: :
1.首先初始化内部的数据结构;
2.做好准备后,KVM 模块检测当前的 CPU,然后打开 CPU 控制及存取 CR4 的虚拟化模式开关,并通过执行 VMXON 指令将宿主操作系统置于虚拟化模式的根模式;
3.最后,KVM 模块创建特殊设备文件 /dev/kvm 并等待来自用户空间的指令。
◆ 接下来的虚机的创建和运行将是 QEMU 和 KVM 相互配合的过程。两者的通信接口主要是一系列针对特殊设备文件 /dev/kvm 的 IOCTL 调用。其中最重要的是创建虚机。它可以理解成KVM 为了某个特定的虚机创建对应的内核数据结构,同时,KVM 返回一个文件句柄来代表所创建的虚机。
◆ 针对该句柄的调用可以对虚机做相应地管理,比如创建用户空间虚拟地址和客户机物理地址、真实物理地址之间的映射关系,再比如创建多个 vCPU。KVM 为每一个 vCPU 生成对应的文件句柄,对其相应地 IOCTL 调用,就可以对vCPU进行管理。其中最重要的就是“执行虚拟处理器”。通过它,虚机在 KVM 的支持下,被置于虚拟化模式的非根模式下,开始执行二进制指令。在非根模式下,所有敏感的二进制指令都被CPU捕捉到,CPU 在保存现场之后自动切换到根模式,由 KVM 决定如何处理。
◆ 除了 CPU 的虚拟化,内存虚拟化也由 KVM 实现。实际上,内存虚拟化往往是一个虚机实现中最复杂的部分。CPU 中的内存管理单元 MMU 是通过页表的形式将程序运行的虚拟地址转换成实际物理地址。在虚拟机模式下,MMU 的页表则必须在一次查询的时候完成两次地址转换。因为除了将客户机程序的虚拟地址转换了客户机的物理地址外,还要将客户机物理地址转化成真实物理地址。
1.2 kvm得功能列表
KVM 所支持的功能包括:
◆支持 CPU 和 memory 超分(Overcommit)
◆支持半虚拟化 I/O (virtio)
◆支持热插拔 (cpu,块设备、网络设备等)
◆支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )
◆支持实时迁移(Live Migration)
◆支持 PCI 设备直接分配和 单根 I/O 虚拟化 (SR-IOV) ◆支持内核同页合并 (KSM )
◆支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )
1.3 kvm工具集合
◆ libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP,Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等在内的多种 Hypervisor。
◆ Virsh:基于 libvirt 的 命令行工具 (CLI)
◆ Virt-Manager:基于 libvirt 的 GUI 工具
◆ virt-v2v:虚机格式迁移工具 ◆ virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具),Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等
◆ sVirt:安全工具
1.4 虚拟化分类
(1)完全虚拟化
最流行的虚拟化方法使用名为hypervisor的一种软件,
在虚拟服务器和底层硬件之间建立一个抽象层。VMware和微软的VirtualPC是代表该方法的两个商用产品,而基于核心的虚拟机(KVM)是面向Linux系统的开源产品hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何-款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是,hypervisor给处理器带来开销
(2)准虚拟化
完全虚拟化是处理器密集型技术,因为它要求hyperviso管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户端操作系统,让它以为自己运行在虚拟环境下,能够与hypervisor协同工作。这种方法就叫准虚拟化。
(para-virtualization)Xen是开源准虚拟化技术的一个例子。操作系统作为虚拟服务器在Xen hypervisor.上运行之前,它必须在核心层面进行某些改变。因此,Xen 适用于BSD、Linux 、Solaris及其他开源操作系统,但不适合对像Windows这些专有的操作系统进行虚拟化处理,因为它们无法改动。准虚拟化技术的优点是性能高。经过准虚拟化处理的服务器可与hypervisor协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。
准虚拟化与完全虚拟化相比优点明显,以至于微软和VMware都在开发这项技术,以完善各自的产品。
(3)系统虚拟化
就操作系统层的虚拟化而言,没有独立的hypervisor层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。
一个明显的区别是,如果使用操作系統层虚拟化,所有虚拟服务器必须运行同一操作系统(不过每个实例有各自的应用程序和用户。账户).虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。
此外,由于架构在所有虚拟服务器上使用单一、标准的操作系统,管理起来比异构环境要容易。
(4)桌面虚拟化
服务器虚拟化主要针对服务器而言,而虚拟化最接近用户的还是要算的上桌面虚拟化了,
桌面虚拟化主要功能是将分散的桌面环境集中保存并管理起来,包括桌面环境的集中下发,集中更新,集中管理。
桌面虚拟化使得桌面管理变得简单,不用每台终端单独进行维护,每台终端进行更新。终端数据可以集中存储在中心机房里,安全性相对传统桌面应用要高很多。桌面虚拟化可以使得一个人拥有多个桌面环境,也可以把一个桌面环境供多人使用。
准备环境
VMware Workstation
CentOS-7-x86_64-DVD-1611.iso
首先安装完VMware Workstation,依次点击编辑——虚拟网路编辑器
点击NAT设置,如图
点击DHCP设置,如图
都设置完成后如下图
接下来需要配置一下本地电脑得VMnet8网卡,依次点击网络——属性——更改适配器设置——VMnet8——属性——lnternet协议版本 4 (TCP/IPv4)——配置ip——子网——网关——dns
这里要注意下配置网关时要和你VMware Workstation里配置的网关一样
如下图
安装centos7
1.点击创建新的虚拟机