带你走进KVM虚拟化

简介

KVM(Kernel-based Vritual Machine)--基于内核的虚拟机
KVM 是基于虚拟化扩展的X86硬件的开源Linux原生的全虚拟化方案(要求cpu支持Intel-VT-x或AMD-V)
KVM内嵌于内核模块中,模拟处理器和内存以支持虚拟机运行
虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;
虚拟机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能
但KVM本身不执行任何模拟。需要客户空间程序(虚拟机)通过/dev/kvm(此虚拟设备需要开起硬件辅助虚拟化才能看到)接口设置一个客户机虚拟服务器的地址空间,
并且由Qemu模拟I/O(ioctl)进行调度资源和维护管理
Libvirt:KVM的管理工具,除了可以管理KVM这类VMM,还可以管理Xen,VirtualBox,甚至OpenStack底层
Libvirt包含3个组件:后台daemon程序libvirtd、API库、命令行工具virsh

虚拟化:通过模拟计算机的硬件,来实现在同一台就算计上同时运行多个不同的操作系统的技术,通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而且互不影响,从而提高计算机的工作效率。

一、为什么要用虚拟化

  1. 节省硬件资源(机房、服务器、冷却系统等),提高资源利用率:12306网站的负载存在明显的峰值和低谷(节日前夕较大,春运最为明显,而在平时则比较低),若完全用实体服务器去抗峰值流量,在平时则会出现巨大浪费。通过服务虚拟化(Server Virtualization/Machine Virtualization)技术构建的云计算平台(Cloud Computer Platform)则可以有效解决这一难题,峰值时增加算力去满足购票需求,低谷时则将算力售卖出去以提高资源的利用率。腾讯云可以按照CPU、内存、存储(比如1C/1G/50GB)等方式对外提供服务,普通用户不用为购买服务器、搭建机房、规划网络访问、数据容灾而烦劳,就像购买水、电、煤气等基本市政服务一样。
  2. 逻辑资源整合:通过虚拟机(Virtual Machine,简称VM)技术,多个不同的Guest操作系统(及运行在其上的各种应用程序)可以运行在一台物理服务器上面,例如,邮件服务器、数据库服务器、Web服务器等应用可以部署在一起,同时可以做到有效的隔离(资源和访问)。
  3. 服务器可移植性:Virtual Machine Monitor/Hypervisor屏蔽底层差异,同一Guest操作系统可以在硬件架构完全不同的服务器上运行(Mac,X86等),没有硬件依赖,它可以从一种硬件服务器迁移到另外一台完全不同的硬件服务器,不需要做改变和适配,用户无感知。
  4. 应用程序可靠性:虚拟机(VM)所在的硬件服务器损坏后,可以快速迁移到另外一台硬件服务器(都部署有Virtual Machine Monitor/Hypervisor),极大提高了其中运行的应用程序的可靠性。容器(Container)所在的Linux服务器无法访问后,容器管理者(比如,K8s)可以在另外一台Linux服务器创建一个新容器,业务不会受到影响。(借助虚拟机技术,容器也可以在非Linux服务器上运行,Guest操作系统为Linux即可。)
  5. 网络和存储也在采用虚拟化技术:从使用独立磁盘冗余阵列(RAID)开始,存储虚拟化已经出现了很多年,RAID提供了一种对物理磁盘进行逻辑分组并将这些分组作为一个或多个虚拟磁盘呈现给操作系统的方法。华为的OceanStor系列存储阵列属于存储区域网络(SAN),通过DevLun(设备逻辑单元号)来呈现给上层主机访问,内部封装了各种算法(SmartVirtualiztion,SmartQoS,SmartPartition等)保障主机的I/O访问质量。网络虚拟化是另一种已经存在了几十年的虚拟化形式,例如,虚拟局域网(VLAN)长期以来提供了一种对物理网络交换机进行逻辑细分的方法。因此,主机对其本地交换机的视图并不局限于它所连接的交换机的物理组成,而是由VLAN本身的逻辑表示来确定。

虚拟化提高资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖。

二、虚拟化技术的分类

1、全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用;

使用方法:使用hypervisor (VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向linux系统的开源产品hypervisor(VMM)可以捕捉CPU 的指令,为指令访问硬件控制器和外设充当中介。

2、半虚拟化:需要修改操作系统

3、直通:直接使用物理硬件资源 (需要硬件的支持,目前还不完善)

三、虚拟化的优缺点

优点

1、集中化管理 

2、节省硬件资源(机房、服务器、冷却系统等),提高资源利用率 (物理资源利用率低-例如峰值,虚拟化解决了“空闲”容量)

3、服务器可移植性,动态调整机器、资源配置 (虚拟化吧系统的应用程序和服务硬件分离、提高了灵活性)

4、高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)

 

缺点

1、前期部署的费用巨大(前期硬件支持耗资巨大)

2、降低硬件的利用率( 某些极度消耗资源的应用不一定适合虚拟化)

3、更大的错误影响面 ( 如本地物理机down机,会导致所有虚拟机全部不可用,同时可能虚拟机中 的文件全部损坏,无法使用)

4、实施配置、管理相对复杂 (管理人员进行管理和排障相对比较困难)

5、一定的限制性 ( 虚拟化技术设计各种限制,必须与支持、兼容虚拟化的服务器,应用程序及供应商结合使用)

6、安全性 ( 虚拟化技术自身会有一定的安全隐患)

四、KVM虚拟化的应用场景

1、VMwareWorkstation:使用软件达到虚拟多操作系统

2、VirtualBox:使用软件虚拟出多物理设备功能

以VMwareWorkstation为例 

workstation支持Intel公司和AMD公司的虚拟化技术

硬件辅助虚拟化技术Intel-VT-x 和AMD-V

Intel VT-x技术主要包含CPU、内存和I/O三方面的虚拟化技术,同时提供优化处理(早期为弥补X86架构虚拟化的缺陷)
AMD-V 是对x86处理器系统架构的一组硬件扩展和硬件辅助虚拟化技术,可以简化纯软件的虚拟化解决方案,
改进VMM(虚拟机监视器)的设计,更充分地利用硬件资源,提高服务器和数据中心的虚拟化效率
VMM(虚拟机监视器/管理程序)
VMM是一个系统软件,可以维护多个高效、隔离的程序环境(虚拟机),同时可以管理计算机系统的真实资源、为虚拟机提供接口

五、KVM架构及原理

带你走进KVM虚拟化

 

 KVM 虚拟机架构的三种模式

1、客户模式(guestOS):VM中的OS为GuestOS

客户机在操作系统中运行的模式,客户机分为内核模式和用户模式,作用如下:

2、用户模式:为用户提供虚拟机管理的用户空间以及代表用户执行I/O,Qemu工作在此模式下 (Qemu的主要功能)

3、linux内核模式:模拟cpu、内存、实现客户模式切换,处理从客户模式的推出,kvm即运行在此模式下

KVM原理

1、Guest:客户机系统、包括CPU (vCPU)、内存、驱动 (Console、网卡、I/O 设备驱动等),被KVM 置于一种受限制CPU  模式下运行

2、KVM 内核模块模拟处理器和内存以支持虚拟机运行

3、Qemu 主要处理I/O 已经客户提供一个用户空间/dev/kvm 工具libvirt 来进行虚拟机管理

ioctl (定义)专用于设备输入输出操作的系统调用

libvirt:KVM管理工具
以上构成一个完整的虚拟化平台

KVM工作流程
用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。 KVM驱动为虚拟机创建虚拟 CPU 和虚拟内存,
然后执行 VMLAU·NCH 指令进入客户模式,装载 Guest OS 并运行。Guest OS 运行过程中如果发生异常,则暂停Guest OS
的运行并保存当前状态同时退出到内核模式来处理这些异常。
内核模式处理这些异常时如果不需要 I/O则处理完成后重新进入客户模式。如果需要 I/O 则进入到用户模式,
则由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式。

 

上一篇:检测虚拟机核心架构的方法


下一篇:KVM简介加部署