您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
kvm虚拟化技术实现原理
 
作者:任总
   次浏览      
 2019-10-15 
 
编辑推荐:
文章主要介绍了虚拟化技术基础,主机虚拟化,容器级级虚拟化,KVM虚拟技术,安装KVM示例相关内容。
本文来自于简书,由火龙果软件依然编辑,推荐。

一、 虚拟化技术

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)

1、虚拟化技术的分类:

(1) 模拟:Emulation

Qemu, PearPC, Bochs, ...

(2) 完全虚拟化:Full Virtualization,Native Virtualization

完全虚拟化提供底层物理系统的全部抽象化,且创建一个新的虚拟系统,客户机操作系统可以在里面运行。不需要对客户机操作系统或者应用程序进行修改(客户机操作系统或者应用程序像往常一样运行,意识不到虚拟环境的存在)。

VMware是一款完全虚拟化软件。完全虚拟的弱点是效率不如半虚拟化的高

半虚拟化系统性能可以接近在裸机上的性能。

VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)

(3) 半虚拟化:Para-Virutalization

半虚拟化需要对运行在虚拟机上的客户机操作系统

进行修改(这些客户机操作系统会意识到它们运行在虚拟环境里)并提供相近的性能,但半虚拟化的性能要比完全虚拟化更优越。

特点:GuestOS明确知道自己运行虚拟机之上;

xen, UML(user-mode linux)

(4) 容器级虚拟化:

LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, ...

(5) 库级别虚拟化:

wine

(6) 程序级虚拟化

jvm, pvm, ...

2、主机虚拟化:Emulation, Full Virtualization, Para-Virutalization

Type-I:Hypervisor直接运行于硬件;

Type-II:Hypervisor运行主机OS之上;

3、云栈的类别:

IaaS(Infrastructure-as-a-Service)基础设施服务

PaaS(Platform-as-a-Service)系统平台服务

SaaS(Software-as-a-Service)软件服务

FWaaS(FireWall as a Service)防火墙服务

DBaaS(DataBase-as-a-Service)数据库服务

LBaas (load-balancer-as-a-service)负载均衡服务

二、主机虚拟化:

1、cpu的虚拟化:

模拟类型:emulation,虚拟机的arch与物理平台的arch可以不同;qemu

虚拟类型:virtualization

完全虚拟化(full-virt)

* BT:通过软件二进制转换

* HVM:硬件辅助的虚拟化

半虚拟化: (pare-virt)

* GuestOS明确知道自己运行于虚拟技术中

硬件级物理cup虚拟化技术

英特尔硬件虚拟化技术interl-VT

AMD硬件虚拟化技术AMD-V

2、内存虚拟化管理

早期,虚拟机中的内存到物理内存地址机制,用软件实现, shadowmmu很低效

硬件内存中添加了,标识虚拟机标签机制tagged TLB。

MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。

硬件级内存虚拟化:

硬件级物理内存映射到虚拟机

英特尔硬件虚拟化技术EPT,Extended Page Table

AMD硬件虚拟化技术NTP,Nested Page Table

3、硬盘的虚拟化:

虚拟机如何使用硬盘的空间:虚拟机在物理硬盘上划分一个文件来使用,此文件也是靠宿主机通过文件系统将磁盘分区后,并创建文件系统后,分给虚拟机一个文件的大小的空间。在宿主机上表现的就是一个文件,而在虚拟机上表现的就是一块硬盘。所以还需要用软件的方式模拟一个适配器,将此文件,模拟成硬盘。

4、网络虚拟化

用软件的方式给每个虚拟机虚拟一块网卡和MAC地址,当通信时使用同一块物理网卡,网卡通讯有排队方式,在同一台物理网卡上,排队执行任务。(将物理网卡设为混杂模式;无论是不是发向本机物理网卡的内容都给与接收);此时将物理网卡也虚拟化一个MAC地址,把物理网卡当作交换机来使用。

5、IO虚拟化

I/O全虚拟化技术

通过VMM模拟I/O设备(磁盘和网卡等)实现虚拟化。

Guest OS所能看到就是一组统一的I/O设备。VMM截获Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对Guest而言非常透明,无需考虑底层硬件的情况。

I/O半虚拟化技术

通过前端(Front-End)/后端(Back-End)模拟实现虚拟化。

Guest OS中的驱动程序为前端,VMM提供的与Guest通信的驱动程序为后端。前端驱动将Guest OS的请求通过与VMM间的特殊通信机制发送给VMM的后端驱动,后端驱动在处理完请求后再发送给物理驱动。

I/O透传技术

设备透传就是向一个特定客户操作系统提供一种设备隔离,对于性能而言,使用设备透传可以获得近乎本机的性能。对于某些网络应用程序(或那些拥有高磁盘 I/O 的应用程序)来说,这种技术简直是完美的。这些网络应用程序没有采用虚拟化,原因是穿过管理程序(达到管理程序中的驱动程序或从管理程序到用户空间模拟)会导致竞争和性能降低。但是,当这些设备不能被共享时,也可以将它们分配到特定的客户机中。例如,如果一个系统包含多个视频适配器,则那些适配器可以被传递到特定的客户域中。

6、一型虚拟化type-1

特点:于硬件级别直接运行hypervisor虚拟机管理控制

xen,vmware ESX/ESXI

xen虚拟过程

7、二型虚拟化type-2

特点:host主机上建立guest虚拟系统,有宿主机

在硬件级别运行一个os(host os),而此上运行一个vmm监视器,用于管理guest虚拟系统

vmwarworkstations, kvm,virtualbox

三、容器级级虚拟化

缺点:相较于主机级虚拟化隔离的不彻底

方案:lxc, libcontainer, runC, openvz

Linux内核运行在物理设备上;在内核上运行多个操作系统如:centos,wubantu;susan;等,因为他们都是基于linux内核来开发的不同界面的操作系统而已,底层运行的内核是相同的。在每个操作系统上在运行每个应用。在内核上运行一个软件来创建和管理容器,是一个很小的软件,基本不消耗性能。

由于多个操作系统使用的是同一个内核,当在操作系统上执行关机命令,就会将内核关闭,所以需要将每个操作系统隔离开来,关掉的只是自身容器 本身而已。各个操作系统之间的操作互补干扰。(共享内核)

四、KVM虚拟技术

1、KVM概述

以色列qumranet公司研发,后被RedHad公司收购

(1)kvm只支持x86平台

(2)依赖于 HVM,inter VT AMD-v

KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

工作原理

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。

但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

virtio虚拟方案

2、KVM的核心组件:

(1)、 kvm.ko内核模块

(kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能;

(2)、 qemu-kvm:用户空间的工具程序

qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例;

(3)libvirt:工具箱用于与主流操作系统虚拟化进行交互工具

libvirt是cs架构应用:

客户端:libvirt-client

virt-manager

daemon:图像化工具

libvirt-deaemon

3、KVM运行模式

KVM模块load进内存之后,系统的运行模式:

内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式;

用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;

来宾模式:GuestOS的用户模式;所有的非IO类请求;

4、KSM机制

扫描物理内存,发现多个虚拟机实例有相同的内存空间,合并成为一个共享内存空间,节省内存。

5、kvm工具集:

image.png

qemu工具

qemu-kvm:用户空间的工具程序,创建管理虚拟机

qemu-img:是 QEMU 的磁盘管理工具

libvirt工具

GUI:virt-manager, virt-viewer:图形化管理

CLI: virsh, virt-install:创建管理虚拟机

集群工具:

libvirtd:管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。Libvirt是一个C工具包的虚拟化功能与最新版本的Linux(以及其他操作系统)。主包包含libvirtd服务器虚拟化支持出口。

6、KVM快速安装

(1)判断CPU是否支持硬件虚拟化:

grep -i -E '(vmx|svm|lm)' /proc/cpuinfo

vmx:Intel VT-x

svm:AMD AMD-v

运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;

(2)、装载内核模块

kvm:核心模块

kvm-intel|kvm-amd

(3)、使用virt-manager管理KVM

# yum install qemu-kvm libvirt-daemon-kvm virt-manager
# modprobe kvm

# systemctl start libvirtd.service

# virt-manager &

 

(4)、网络虚拟化:

CentOS 7创建物理桥,使用内核自带的桥接模块实现:

桥接口配置文件保留地址信息;

TYPE=Bridge
Device=BRIDGE_NAME

物理网卡配置文件:

删除地址、掩码和网关等相关的配置,添加

BRIDGE=BRIDGE_NAME

重启网络服务即可:

五、安装KVM示例

安装前首先开启虚拟机Inter VT

实验前开启

#检查主机cpu是否支持虚拟化
[root@node-64 ~]# grep -E -i "svm|vmx" /proc/cpuinfo
..........vmx ......... #出现这个字段即可支持虚拟化

#安装kvm模块
[root@node-64 ~]# modprobe kvm
[root@node-64 ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
[root@node-64 ~]# ls /dev/kvm
/dev/kvm

[root@node-64 ~]# yum install libvirt libvirt-daemon virt-manager -y
[root@node-64 ~]# systemctl start libvirtd.service
[root@node-64 ~]# systemctl enable libvirtd.service

#安装物理桥
[root@node-64 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.64 netmask 255.255.255.0 broadcast 192.168.1.255
#创建网桥
[root@node-64 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33

 

此时会断网,到虚拟机重启一下,发现已生成网桥,但还要配置网桥的dns,否则无法上网。

[root@node-64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.1.64"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
DNS1=202.106.46.151 #添加
DNS2=8.8.8.8 #添加

#重启网络
[root@node-64 ~]#systemctl restart network.service

[root@node-64 ~]# ifconfig
br0: #生成虚拟网桥,并获得物理网卡的地址
flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.64 netmask 255.255.255.0 broadcast 192.168.1.255

ens33: #原物理网卡变成虚拟交换机
flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:79:2e:94 txqueuelen 1000 (Ethernet)

 

其他终端图形登录[root@node-60 ~]# ssh -X root@192.168.1.64

ssh -X root@192.168.1.64
[root@node-64 ~]# virt-manager

 

   
次浏览       
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证