一、虚拟化:Virtualization
虚拟化技术类型:
主机虚拟化:xen, kvm, virtualbox, …
(缺陷就是总是有一层内核的管理)
容器(用户空间隔离): lxc(LinuX Container), openvz, …
用户空间就是根文件系统,静态的就是文件系统树,动态的就是进程树
需要内核级的支持,就是内核与容器之间的管理层。
系统库虚拟化:wine, …
可以夸平台跑应用程序的软件
应用程序级虚拟化:jvm, pvm,...
虚拟化技术的分类:
(1) 模拟:Emulation(虚拟机的arch与物理平台的arch可以不相同)
Qemu, PearPC, Bochs, ...
(2) 完全虚拟化 Full Virtualization,Native Virtualization
BT/HVM
VMWare Workstation,
VirtualBox,
VMWare Server
Parallels Desktop,
KVM(hvm)
XEN(hvm)
(3) 半虚拟化(准虚拟化)
Para-Virutalization
特点:GuestOS明确知道自己运行虚拟机之上;
修改虚拟机中的内核,让虚拟机中的内核明确知道不能直接调物理机CPU的环0,
而是调用虚拟机平台管控器的指令,开发是针对于虚拟机平台的开发
xen, UML(user-mode linux)
(4) 容器级虚拟化
LXC,
OpenVZ,
libcontainer
runC, rkt
Linux V Servers
Virtuozzo, ...
(5) 系统库级别虚拟化
wine
(6) 应用程序级虚拟化
jvm, pvm, …
各种虚拟化的性能对比:
通过对比,进行推荐使用的模式
CPU、MMU 建议硬件支持的虚拟化
Network 建议半虚拟化
DiskIO 建议半虚拟化
Time 建议半虚拟化,必须使用NTP服务
主机虚拟化:
CPU:
模拟:emulation, 虚拟机的arch与物理平台的arch可以不相同;qemu;
虚拟:virtualization
完全虚拟化(full-virt)
BT: 二进制转换 (软件)
BT技术:二进制转换,能够快速调用,提升虚拟机的性能,完全虚拟化
HVM:硬件辅助的虚拟化(硬件)
HVM:硬件辅助的虚拟化,物理机CPU的环-1上,虚拟机CPU跑在环0上
半(准)虚拟化 (para-virt)
GuestOS得明确知道自己运行于虚拟化技术
内存:
MMU virtualization:
Intel: EPT, Extended Page Table(扩展的页表,直接从虚拟机的线性地址直接到物理机的物理地址)
AMD: NPT, Nested Page Table(嵌套的页表)
MMU硬件:内存管理单元,加速内核分配对线性地址和物理地址的对应记录,每次要加载页表
shadowMMU:影子内存管理单元,虚拟的内存管理单元
TLB virtualization:
tagged TLB(标签的TLB,不用跨虚拟机的切换在清TLB表了,需要硬件级的支持)
TLB:转换的后援缓冲器,CPU当中的一段硬件缓存空间
Page table:页表是要靠MMU帮助快速完成对应路由分级转换,这样才能快速查找
IO:
Emulation(模拟的硬盘)
Para-virtualization(半虚拟化,明确告诉虚拟机使用的是虚拟磁盘)
IO-through:IO透传(直接给虚拟机加物理硬盘)
主机虚拟化的类型:
TYPE-I:
于硬件级别直接运行hypervisor;
xen, vmware ESX/ESXI
TYPE-II:
于硬件级别运行一个OS(Host OS),而此OS上运行一个VMM;
vmware workstation, virtualbox, kvm
Linux目前流行的开源虚拟化技术解决方案:
主机虚拟化:xen, kvm, virtualbox
容器级:lxc, libcontainer, runC, openvz
模拟器:qemu
计算机的组成:CPU(运算器、控制器)、主存(RAM)、IO(磁盘、网络)
主板:MainBoard(提供各种总线以及各种扩展接口)
什么是虚拟机?
我们把一组提供了计算机底层基础结构实体的资源划分出多个彼此间相互隔离的虚拟的资源逻辑组合。
每一个彼此之间相互隔离的逻辑组合就是一个虚拟机。
每一个虚拟机就是一个进程,拿到的内存地址就是线性地址,虚拟机上的运行的程序,认为拿到的内存就是在线性地址上的线性地址。
计算机的多任务模式,其实就是虚拟化,CPU通过把时间片分发给各应用使用。
程序就是指令加数据组成的,指令后面给的就是内存的地址
冯氏计算机体系明确说明了存储程序体系,程序和指令是一块都放在硬盘上或内存中的。
CPU有四类指令
环0、1、2、3(核心程度依次向外)
内核模式:运行在环0上,程序调用的特权指令(集),只能通过内核调用CPU
用户模式:运行在环3上,程序调用的非特权指令,可以直接调用CPU
分级管理系统:快速实现查找某一文件的路由
task struct:内核级的链表结构,追踪当前主机的所有进程,
Thin provision:硬盘虚拟化,超配使用,文件模拟的方式供应假硬盘的使用
网卡虚拟化:
网卡队列,有多个虚拟机的时候,通讯的时候需要给每一个虚拟机虚拟一个网卡(拥有虚拟的mac地址),物理网卡需要设置为混杂模式,物理网卡相当于交换机(桥接模式)。
如果虚拟机不需要与外网通讯,就是仅主机模式(only host),就是用软件实现一个交换机,虚拟主机的虚拟网卡直接连到虚拟的交换机上,物理网卡也虚拟一个虚拟的网卡,连接到虚拟的交换机上。
Nat模式,宿主机上打开核心转发,并且做地址转换,而且所有的虚拟机的网关指向物理机虚拟出的虚拟网卡的仅主机地址,宿主机就把转给自己的虚拟机的请求,通过物理网卡转出去,就是一个Nat转发网络。
隔离网络模型:只能在虚拟机之间的通讯
仅主机模型:只能虚拟机之间及宿主机之前的通讯
路由模型:可以与外网通讯,但是不一定能转发回来,但是如果打开转发功能,就是Nat模型
跨物理机之间的虚拟机通讯使用隧道通讯,
GRE:通用路由封装技术,把二层报文借助一个隧道转发到另外一台物理机上。
VLAN技术:虚拟局域网,大家在同一二层网络,但是可以在三层隔离分开,只能支持到4093个用户。
VxLAN技术:扩展的虚拟局域网技术,自身就带有路由封装的功能。
SDN技术:Software Driven Network 软件驱动网络,把三个平面切割分开,把其中的一个平面拿出来统一找一个中心控制。
网络有控制平面、数据平面、传输平面,每一个网络是自制系统,它自我能学习能转发,三个平面是在同一个硬件内部封装的。
NFV技术:网络虚拟化技术
网络层级:
- 我们需要虚拟个设备
- 我们要确保网络资源可以复用的
- 要构建一个本机局部的虚拟网络,仅虚拟机之间通讯,虚拟机与物理机通讯,虚拟机与外网通讯
网络通讯,之间发送信息的就是电压信号,高低电频,1000M 1b/s bit (125MB/s)
云原生应用:针对云平台开发
系统分为基础架构层、数据支撑、应用层、业务层。
二、VMM-Virtual Machine Monitor
VMM(Virtual Machine Monitor,虚拟机监控器)它包括规划、部署、管理和优化虚拟基础结构等端到端功能。
按照VMM的实现架构分类,可以分为Hypervisor模型、宿主模型和混合模型。
1.Hypervisor模型(TYPE-I)
在这种架构里面,VMM可以视为一个具有虚拟化功能的操作系统,即管理物理资源和虚拟环境的创建、管理。
优点: 效率高; 缺点:只支持部分型号设备,需要重写驱动或者协议。
典型产品:VMware ESX server3, Kvm
2.宿主模型(TYPE-II)
宿主机OS管理物理资源,VMM作为宿主机OS的一个独立的内核模块来提供虚拟化功能。
VMM通过调用宿主OS的相关服务来获取资源,创建出来的虚拟机也作为宿主OS的一个进程来参与调度。
优点:个人理解就是充分利用现有的OS的device driver,无需重写;物理资源的管理直接利用宿主OS来完成。
缺点: 效率不够高,安全性一般、依赖于VMM和宿主OS的安全性。
典型产品: VMware server , VMware workstation,virtual PC, virtual server,
3.混合模型
顾名思义,混合模型就是上述两种模型的混合体。
VMM处在最底层,拥有全部物理资源,但是与Hypervisor模型不同的是,大部分I/O设备是由一个运行在特权虚拟机中的特权OS来管理的。
CPU和Memory的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权OS来共同完成。
混合模型集合了上述两种模型的优点,但是缺点就是经常需要在VMM与特权OS之间进行上下文切换,开销较大。
典型产品: window server 2008之hyper-v, Xen,
三、XEN、KVM介绍
XEN是英国剑桥大学实验室研发的虚拟机技术,那个时代没有硬件支持的,直接奔着半虚拟化技术。安装后需要重启系统,重启后,xen变成了Hypervisor,原来系统的内核变成了第一个虚拟机的内核。后续系统每次启动都是启动xen,而且xen没有管理接口,直接把第一个虚拟机当做管理接口,而且还当做IO虚拟化的接口,xen只虚拟CPU和内存。
在这之上每个虚拟机叫一个域,第一个虚拟机编号Dom0,全称叫做privileged domain,其他虚拟机统称叫做DomU。
其他的虚拟机都需要通过Dom0来创建,DomU关于CPU及内存的调用都是通过xen来完成的,但是需要IO设备的时候,需要通过Dom0来完成。
Dom0需要通过qemu来实现IO模拟,qemu还是个虚拟器,IO模拟完整,内存模拟完整。
Xen需要在网上的源中 virt中加载,红帽不支持,只能使用centos高版本的内核才能使用。
KVM是以色列的一家公司研发的,全称叫做 kernel-based vm 基于内核的虚拟机。
kvm是个内核模块,模块装载后就变成了kvm的hypervisor,用户空间直接创建虚拟机即可,虚拟机的CPU和内存是由kvm来实现,IO还是由用户空间的qemu来实现。
云栈的类别:
IaaS-Infrastructure AS a Service 基础架构级服务,代表软件有OpenStack
PaaS-platform AS a Service 平台级服务,可以直接跑软件
SaaS-Service AS a Service 服务级服务
FWaaS
DBaaS 数据库级服务
LBaaS 负载均衡级服务
...
原文地址:http://blog.51cto.com/exia00linux/2109143