一、虚拟化
1.什么是虚拟化
一种计算机资源管理技术,将各种IT资源抽象、转换成平一种形式的技术都是虚拟化技术。
2.作用
通过该技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
3.云计算与虚拟化的关系
从行业数据相互关联的角度看,云计算是非常依赖虚拟化的。但云计算并非虚拟化,虚拟化也并非云计算。虚拟化只是云计算的核心技术,但并非云计算的核心关注点。云计算可以说是一种服务,虚拟化则是一种技术基础。一个服务有了技术支持才能进行服务。
4.虚拟化中的几个概念
(1)Guest OS:运行在虚拟机上的操作系统。
(2)Guest Machine:虚拟出来的虚拟机。
(3)VMM:虚拟监视器,即虚拟化层。
(4)Host OS:运行在物理机上的操作系统。
(5)Host Machine:物理机。
5.虚拟化特点
(1)分区:分区可以在一台服务器上运行多台虚拟机,使一台服务器运行多个应用程序。
(2)隔离:隔离指的是将分区完成后的所有虚拟机之间相互隔离,每个虚拟机像单独的物理主机。
(3)封装:整个虚拟机运行条件封装在独立文件夹中,以文件形式进行虚拟机的封装,可以通过移动文件的方式来迁移虚拟机。
(4)软硬件解耦:即相对于硬件硬件独立,虚拟机运行在虚拟化层之上,不必考虑物理服务器即可在任何服务器上运行。
二、虚拟化类型
1.寄居虚拟化
(1)什么是寄居虚拟化:在主机(宿主)操作系统上安装和运行虚拟化程序。
(2)特点
①操作简单、易于实现。
②安装和运行应用程序依赖于主机操作系统对设备的支持。
③有两层操作系统,管理开销较大,性能损耗大。
④虚拟机对各种物理设备(CPU、内存、硬盘等)的调用,都是通过虚拟化层和宿主机的操作系统一起协调才能完成的。
(3)VMware Workstation和VirtualBox都是基于这种方式实现的。
2.裸金属虚拟化
(1)什么是裸金属虚拟化:直接将虚拟化层VMM直接安装在硬件设备上,虚拟化层VMM在这种模式下又叫做Hypervisor,虚拟机有指令要执行时,Hypervisor会接管该指令,模拟相应的操作。
(2)特点
①不依赖于操作系统。
②支持多种操作系统,多重应用。
③依赖虚拟层内核和服务器控制台进行管理。
④需要对虚拟层的内核进行开发。
(3)应用:VMware EXS、Xen、华为FusionSphere。
3.混合虚拟化
(1)什么是混合虚拟化:在一个现有的正常操作系统下安装一个内核模块,内核拥有虚拟化能力。(相当于寄居虚拟化与裸金属虚拟化的混合)
(2)特点
①相对于寄居虚拟化架构,性能高。
②相对于裸金属虚拟化架构,不需要开发内核。
③可支持多种操作系统。
④需要底层硬件支持虚拟化扩展功能。
(3)应用:Redhat KVM
三、虚拟化层架构
全虚拟化(如KVM)、半虚拟化(如Xen)、硬件辅助虚拟化(如Intel-VTX)。
(1)全虚拟化
即所抽象的VM具有完全的物理特性,虚拟化层负责捕获CPU指令,为指令访问硬件充当媒介。如,VMware、Virtualbox、Virtualbox、Virtual PC、KVM-x86等。其特点是:Guest OS(操作系统内核)无需修改;速度和功能都非常不错;使用简单;移植性好;效率不高。KVM是一个基于Linux内核的虚拟化技术,可以直接将Linux内核转换成Hypervisor。从而使得Linux内核能够直接管理虚拟机,直接调用Linux内核中的内存管理、进程管理子系统来管理虚拟机。KVM由处于内核态的KVM和用户态的QEMU两部分组成。虚拟机中的进程只是进程中的一个线程。KVM访问路径短,无性能损耗。
(2)半虚拟化
起初是为了解决全虚拟化效率不高的困难,它需要修改操作系统OS,工作系统相对于全虚拟化要高很多。Hypervisor直接安装在物理机上,多个虚拟机在Hypervisor上运行。Hypervisor实现方式一般是一个特殊定制的Linux 系统。典型的有:Xen、VMWare ESXi、微软Hyper-V。其特点是:架构更精简;在整体速度上具有一定优势;需要对OS进行修改,在用户体验方面比较麻烦。Xen直接把操作系统内核改了,把操作系统改成了一个轻量级Hpervisor在里面运行了一个管理所有资源作资源调度的Domain0。Xen由Xen Hypervisor(虚拟化层)、Domin0(管理主机)、Domin U(用户虚拟机)组成,支持全虚拟化和半虚拟化,安全性高。
(3)硬件辅助虚拟化
随着虚拟化技术的应用越来越广泛,Intel、AMD等硬件厂商通过对硬件的改造来支持虚拟化技术,这就是硬件辅助虚拟化。常用于优化全虚拟化和半虚拟化产品,像VMware Workstation,它虽然属于全虚拟化,但在6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化。
四、容器
1.什么是容器
包装或者装载物品的贮存器,利用一个开源的应用容器引擎,让开发者可以将他们的应用以及依赖包打包到一个可移植的景象中,然后发布到任何一个Linux或Windows机器上,也可以实现虚拟化。实现APP和操作系统的解耦。
2.什么是镜像
镜像是可执行的独立软件包,包含软件运行的内容(代码、运行时的环境、系统工具、系统库和设置)。容器就是将操作系统上层的应用进行了隔离。
3.主流容器技术——Docker
(1)定义
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口,它是目前最流行的Linux容器解决方案。
(2)作用
将应用程序与该程序的依赖,打包在一个文件里。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题了。
(3)核心
实现应用与运行环境整体打包以及打包格式统一。
4.容器的组成(以Docker为例)
(1)客户端:使用容器的用户用来进行交流管理的图形化界面。
(2)守护进程:用来接收客户端的消息,Docker的客户端给用户提供一些可执行的命令,这些命令通过守护进程进行交互实现。
(3)镜像:用来创建Docker的容器,一个镜像可以创建多个容器,开发者可以将这些应用程序和配置的依赖包打包进行交互,进行运行,这些运行环境打包的文件就是一个镜像。
(4)容器:容器是镜像运行的实例,也就是说镜像在外的体现就是容器。
(5)仓库:用来存放镜像文件。
5.容器的特点
(1)用户需要高效运行环境,而非整个机器。
(2)一次构建、到处运行。
(3)部署方便(创建的速度快)。
(4)隔离性好。
(5)成本低。
容器本质上是一款轻量级虚拟化技术。
6.容器和虚拟化的区别
虚拟化 | 容器 |
---|---|
隔离性强,有独立的客户操作系统 (Guest OS) | 共享内核和操作系统,隔离性弱 |
虚拟化性能差(>15%) | 计算/存储无损耗,无客户操作系统内存开销(~200M) |
虚拟机镜像庞大(十几G~几十G),且实例化时不能共享 | Docker容器镜像200M~300M,且公共基础镜像实例化时可以共享 |
虚拟机镜像缺乏统一标准 | Docker提供了容器应用镜像的事实标准,OCI推动进一步标准化 |
虚拟机创建慢(>2min) | 秒级创建(<10s)相当于建立索引 |
虚拟机启动慢(>30s)读文件逐个加载 | 秒级(<1s,不含应用本身启动) |
资源虚拟化粒度低,单机10~100虚拟机 | 单机支持1000+容器,密度很高,适合大规模的部署 |
7.Docker容器的主要用途
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为Docker容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。