计算虚拟化
目录
云计算简介:
云计算五种基本特质:
1.按需自助服务(按需选购所需要的内容和服务)
2.随时随地的网络接入
3.资源池化(CPU池选购,内存池,存储)
4.快速弹性伸缩(可以及时应对突发事件的流量)
5.按量计费
云计算的四种部署模式:
1.公有云:出租给公众的基础设施云
2.私有云:企业或个人利用自有或租用的基础设施资源自建的云。
3.行业云:为特定社区或行业所构建的共享基础设施的云
4.混合云:两种以上的云:企业不重要的放公有云,重要资源放在私有云
Q&A:客户来说为何采用云计算,为何不自己部署服务器?
云服务商可以提供客户想要的任何资源,客户不用花时间去向物理硬件厂商购买服务器/交换机/路由器。客户可以让业务快速上线,缩短上线周期。方便管理。
云计算三种服务模式:
IAAS:基础设施即服务。(提供硬件设备)
PaaS: 平台即服务(提供硬件设备+操作系统)
SaaS: 软件即服务(提供硬件设备+操作系统+软件)
云计算的发展历程:
虚拟化技术
参考:华为云计算入门-计算虚拟化
刘超的通俗云计算 https://blog.csdn.net/popsuper1982/article/details/79463248
JmilkFan_范桂飓:https://blog.csdn.net/Jmilk/article/details/51031118
虚拟化技术的由来
服务器具有极高的CPU内存资源,但是多数业务用不上这么多资源,如果让多种业务运行在同一个操作系统下会有安全隐患。如果让多种业务独立运行在不同的虚拟机上,会造成资源浪费。于是便出现了虚拟化,让不同业务工作在同一个服务器的不同操作系统上。
虚拟化的特点:
分区:同一台物理机上可以运行多个虚拟机
隔离:虚拟机之间相互隔离,保证业务的安全和可靠性
独立:虚拟机相对于硬件独立,可以运行在多种硬件设备上。
封装:虚拟机封装成文件,可以迁移。
虚拟机的特点
1.由VMM提供百分之八十以上高效独立的OS。
2.拥有自己的虚拟硬件(CPU/内存memory/网络/IO/存储)
3.对于virtual os 的上层硬件来说,虚拟机就是真实机器
4.Virtual machine monitor(VMM虚拟化监视机)
虚拟化的基本概念:
四种虚拟化架构:
裸金属虚拟化:(1型虚拟化)
裸金属虚拟化:物理硬件(服务器)上直接部署Hypervisor,然后部署虚拟机,每个虚拟机上跑操作系统Linux或者win.比如fusionsphare(华为),VMware EsxServer
优点:虚拟机不依赖于操作系统,支持多种操作系统,多种应用。
缺点:虚拟内层内核开发难度大。
宿主虚拟化:(2型虚拟化)
宿主虚拟化:物理硬件上部署宿主操作系统,再部署hypervisor,再部署虚拟机跑系统。比如windows上的虚拟化软件就有VMware workstation(VMware公司),hyper-v(微软公司),MacBook上虚拟化软件:VMware fusion
优点:简单,易于实现。
缺点:安装和运行程序主要依赖于主机操作系统对设备的支持,管理开销大,性能损耗大。
混合虚拟化:
混合虚拟化:物理硬件上部署操作系统,有虚拟硬件管理模块在操作系统里,虚拟机跑操作系统上。
操作系统虚拟化:
操作系统虚拟化:物理硬件上部署一个操作系统,操作系统上Hypervisor和虚拟机操作系统,代替的是容器,容器专门针对用户程序。
优点:简单易于实现,管理开销非常低
缺点:隔离性差,多容器共享同一操作系统。
(Hypervisor:虚拟化层,也叫虚拟化监视器VMM(Virtual Machine Monitor))
总结:
x86 CPU架构:
为了保证CPU运行的稳定和有序性,CPU会划分为用户态和内核态 。
内核态:CPU可以访问内存的所有数据,包括外围设备,如硬盘、网卡
用户态:只能受限的访问内存,且不允许访问外围设备。失去占用CPU的能力,CPU资源可以被其他程序获取。
为了更好地区分内核态和用户态,X86架构划分了Ring0~3四个等级,内核态工作在Ring0,用户态工作在Ring3。
虚拟机的工作原理:
GuestOS和VMM都属于运行在Ring3上的用户态应用程序,GuestOS操作硬件设备时并执行操作指令时,VMM会将该操作指令监控、捕获、检测后将指令传递给HostOS,HostOS会将GuestOS发出的运行于用户态的操作指令模拟为核心态指令。
在虚拟机中,GuestOS是工作在Ring3上的(也就是用户态),没有权限直接调动物理机的硬件IO以及其他核心指令,但是GuestOS作为一个操作系统本应该工作在Ring0(内核态)上。于是便出现了虚拟化技术。
CPU虚拟化:
CPU虚拟化:总资源=服务器CPU个数 * 单个CPU x 核数kernel * 线程(超线程为2,单线程为1)
例如:某服务器两个主频为2.6GHZ的CPU,每个CPU四核,超线程。因此每个CPU拥有4kernel2=8个线程,一个服务器两个CPU,则服务器总共有VCPU=24*2=16个。总资源为16 *2.6GHZ=41.6GHZ。
虚拟机VCPU数量不能超过单台CNA主机可用VCPU数量。多个虚拟机之间可以复用一个物理CPU,因此单台CNA主机节点上虚拟机使用的VCPU数量可以大于实际CNA主机可用VCPU数量。复用比华为里为1:3
CPUQoS:份额,预留,限额。
CPU资源限额:控制虚拟机占用物理资源使用的上限。
CPU资源份额:定义了虚拟机在竞争物理CPU资源时按比例分配计算资源。
CPU预留资源:定义了虚拟机在竞争物理CPU时最低分配的计算资源。
QoS:Quality of Service服务质量
全虚拟化:
软件完全模拟包括CPU、磁盘、内存网卡在内等真实的硬件资源,GuestOS并不知道自己是一台虚拟机。
典型的全虚拟化软件有 —— VMWare、Hyper-V、KVM-x86(复杂指令集)。
全虚拟化虚拟化软件VMM开发难度大。好处是易部署,不用修改虚拟机系统;对于客户方便。
半虚拟化:
需要GuestOS协助虚拟化。处理敏感指令(如reboot)和核心态指令相对简单
优点:与全虚拟化相比,架构更精简,整体速度会有一定优势。
缺点:需要对Guest OS修改,所以用户体验比较麻烦
典型的半虚拟化软件有——Xen、KVM-PowerPC(简易指令集)。
硬件辅助虚拟化:
硬件辅助全虚拟化主要使用了支持虚拟化功能的CPU进行支撑,CPU可以明确的分辨出来自GuestOS的特权指令,并针对GuestOS进行特权操作,而不会影响到HostOS。
Intel/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派。(VMware Workstation,VirtualBox,KVM,VMware ESX和Xen)优点:通过引入硬件技术,使虚拟技术更接近物理机速度。
内存虚拟化
假设物理机内存比较小,内存编号是从0~9。在物理机上运行四台虚拟机,它们的内存编号都是从0~9。这样就会产生冲突。
内存虚拟化就是进行地址转换,将虚拟机册内存转化为物理机侧内存的不同部分。
I/O虚拟化
- 完全虚拟化:完全通过软件来模拟真实的硬件,例如键盘鼠标
- 半虚拟化:对硬件驱动由签端直接转到后端调用,适用于硬盘和网卡,性能高
- IO-through:IO透传,直接分配给虚拟机物理设备。例如:直接分配一个硬盘或网卡给虚拟机。需要硬件具备IO透传技术。在Xen下由Dom0分配,但是访问时直接访问,不经过Dom0。
虚拟化技术:
1.KVM
KVM是集成到linux内核的系统虚拟化模块,使用linux自身调度器进行管理,工作在X86架构且需支持硬件辅助虚拟化技术(Intel VT和AMD-V)。使用全虚拟化技术,采用混合虚拟化架构。
2.Xen :
支持全虚拟化和半虚拟化,属于裸金属架构。Xen支持hypervisor和虚拟机互相通讯。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行,能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。
3.VMWare ESX或vSphere
vSphere是完全虚拟化,属于裸金属架构。不依存于宿主操作系统之上。vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了IT操作。用户现有的应用程序可以看到专有资源,而服务器则可以作为资源池进行管理。因此,用户的业务将在简化但恢复能力极强的IT环境中运行。
主流的Hypervisor架构:
Hypervisor的作用:
- 虚拟资源:利用底层硬件资源构建一个保护虚拟CPU、内存、外设的虚拟环境
- 虚拟环境调度
- 虚拟化环境的接口:提供一组完备的管理接口,支持虚拟环境的创建、删除、暂停、迁移等功能
KVM架构&Xen架构:
KVM架构更加侧重性能:VM之间以及Host Kernel之间对共享区域的访问和映射无需Hypervisor进行授权,古整个访问路径较短,使用Linux baremetal内核,无pvops性能损耗
Xen架构更加安全:为保证安全性,各Domain之间对共享区域的访问和映射必须通过Hypervisor授权
KVM
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交互。
XEN
Xen Hypervisor:直接运行于硬件之上,是Xen客户操作系统与硬件资源之间的访问接口。通过将客户操作系统与硬件进行分类,Xen管理系统可以允许客户操作系统安全,独立的允许在相同的硬件环境上。
Domain0:运行在Xen管理程序之上, 具有直接访问硬件和管理其他客户操作系统的特权的客户操作系统。
DomainU:运行在Xen管理程序之上的,普通客户操作系统或业务操作系统,不能直接访问硬件资源(如:内存,硬盘 等),但可以独立并行的存在多个。
容器(Container)简介:
容器是一种轻量级、可移植、并将应用程序进行打包的技术,使应用程序几乎可以在任何地方以相同的方式运行。
- 容器是操作系统内核自带能力
- 容器具备一定的生命周期。
- 容器是轻量级的。
- 容器可以运行多个相互隔离的应用
- Docker 并没有发明容器,更像是容器 的前端和外围工具。
- Docker 核心在于实现应用与运行环境 整体打包以及打包格式统—。 Docker 并不是容器技术的唯—选择
cgroups: 主要做资源控制 namespaces: 主要做访问隔离
LXC (Linux Containers) tools:Linux Container容器是—种内核虚拟化技术, 可以提供轻量级的虚拟化,以便隔离进程和 资源。
已有的容器技术:Docker,Rocket
Docker
Host OS:所有的主流Linux版本都支持容器
Docker守护进程:运行在操作系统之上,负责管理Docker容器
各种依赖:对于Docker,所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。
应用:应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。
Docker VS Container
传统Container:
- 缺少自动化、使用复杂。
- 用法与平台耦合性高、应用范围窄、 用户限制大。
- 只解决了Run,没有解决Build和Ship。
- 各个容器的实现方式千差万别,缺省 统—的标准。
Docker:
- 提供了Portable的标准并且提供了实现。
- 基于该标准的容器Build和Ship机制。
Docker引擎
Docker 是—个开源的应用容 器引擎,让开发者可以打包 应用以及依赖包到—个可移 植的容器中,然后发布到任 何流行的 Linux 机器上。
基于Go语言开发,遵从Apache2.0协议开源。
Docker特点
快:运行时的性能可以获取极大提升;
灵活:将应用和系统”容器化”,不添加额外的操作
系统,支持跨OS部署;
轻便:你会拥有足够的”操作系统”,仅需添加或减
小镜像即可,每台服务器可部署100~1000个实例;
廉价:版本开源的,免费的,低成本的;
生态:业界(微软、亚马逊、IBM、Cisco)主流IT厂 商逐步使用Docker容器技术、开源社区活跃度非常 高,逐步成为未来软件发展趋势;
容器技术架构:
Docker三组件
Docker Client:用户界面,支持用户与Docker Daemon之间通信。
Docker Daemon:运行于主机上,处理服务请求。
Docker Registry:支持拥有公有与私有访问权限的Docker容器镜 像仓库。
Docker三要素
Docker Containers:负责应用程序的运行,包括操作系统、用户 添加的文件以及元数据。
Docker Images:构建容器的只读模板,用来运行Docker容器。
DockerFile:文件指令集,用来说明如何自动创建Docker镜像。
Docker总体架构
Docker daemon(后台守护进程)
docker client(发起请求)
Docker registry(镜像注册中心)
Libcontainer(函数库)
Docker container(服务交付的最终形式)
Graph driver(Docker内部函数库)
docker server(调度分发请求)
engine(docker运行引擎)
job(引擎内部最基本的工作执行单元)
docker container(服务交付的最终形式)
具体见:https://www.jianshu.com/p/6f4533ca7b34