虚拟化技术概述

我的梦境 提交于 2020-08-15 03:24:44

1.概述

在准备研究docker及kubenetes技术时基础到很多虚拟化技术,他们之间的关系及异同不慎了解,因此首先对这些虚拟化技术做一下总结。主要是docker、Vagrant、virtualbox、kvm等

2.虚拟化技术

从虚拟机角度看,虚拟化大致从层次上分主要有:硬件层、操作系统层、函数库层、应用程序层。其中最主要的是硬件层与操作系统层。现有的大部分虚拟化技术都是硬件层的,操作系统层以docker为代表,应用层如JVM等。

硬件抽象层上的虚拟化是指通过虚拟硬件抽象层来实现虚拟机,为客户机操作系统呈现和物理硬件相同或相近的硬件抽象层,又称为指令集级虚拟化,实现在此层的虚拟化粒度是最小的。

操作系统层上的虚拟化是指操作系统的内核可以提供多个互相隔离的用户态实例。这些用户态实例(经常被称为容器)对于它的用户来说就像是一台真实的计算机,有自己独立的文件系统、网络、系统设置和库函数等。

2.1硬件层虚拟化

硬件层虚拟化即硬件抽象层上的虚拟化、指令集级虚拟化。注意,这里说的硬件层虚拟化是从虚拟机角度看的,即通过虚拟化层也称虚拟机监控器(Virtual Machine Monitor,VMM)的模拟,提供给虚拟机一个与物理机硬件相同或相似的资源环境,这样每台虚拟机中都有属于它的虚拟硬件,虚拟机中的操作系统认为自己仍然是独占一个系统在运行。(并不是说宿主物理机硬件直接虚拟化,不需要操作系统。这里是从虚拟出的虚拟机角度看的)

对于硬件层虚拟化技术进一步可以从按照实现方法分类与按照实现结构分类两个不同角度进行分类,

2.1.1按照实现方法分类

(1) 全虚拟化

在客户操作系统看来,完全虚拟化的虚拟平台和现实平台是一样的,客户机操作系统察觉不到是运行在一个虚拟平台上,这样的虚拟平台可以运行现有的操作系统,无须对操作系统进行任何修改,因此这种方式被称为完全虚拟化。

虚拟机执行的任何命令,最终都要通过虚拟机操作系统运行指令集完成,而这些指令集的运行需要VMM正确处理,即调度宿主机硬件资源运行。对于X86的系统经过了软件完全虚拟化以及硬件支持的完全虚拟化

软件完全虚拟化:在x86虚拟化技术的早期,没有在硬件层次上对虚拟化提供支持,因此完全虚拟化只能通过软件实现。一个典型的做法是二进制代码翻译(Binary Translation)。二进制代码翻译的思想是,VMM通过扫描并修改客户机的二进制代码,将难以虚拟化的指令转化为支持虚拟化的指令。

硬件支持完全虚拟化:硬件本身加入足够的虚拟化功能,可以截获操作系统对敏感指令的执行或者对敏感资源的访问,因而内存和外设的访问本身也是由指令来承载,对处理器指令级别的截获就意味着VMM可以模拟一个与真实主机完全一样的环境。Intel的VT-x和AMD的AMD-V是这一方向的代表。

在当前的系统级虚拟化解决方案中,全虚拟化应用得非常普遍,典型的有知名的产品有VirtualBox、KVM、VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)、Xen(也支持全虚拟化)。

(2)半虚拟化

这样的虚拟平台需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境,因此客户机操作系统知道其运行在虚拟平台上,并且会去主动适应。

通过在源代码级别修改指令以回避虚拟化漏洞的方式来使VMM 能够对物理资源实现虚拟化。上面谈到x86 存在一些难以虚拟化的指令,完全虚拟化通过Binary Translation在二进制代码级别上来避免虚拟化漏洞。类虚拟化采取的是另一种思路,即修改操作系统内核的代码,使得操作系统内核完全避免这些难以虚拟化的指令。

这种虚拟技术以Xen为代表,微软的Hyper-V所采用技术和Xen类似,也可以把Hyper-V归属于半虚拟化。

2.1.2按照实现结构分类

从宿主机中VMM是实现虚拟化的最关键技术,从VMM所处宿主机中的实现结构可以将虚拟化技术分为如下三类

(1)Hypervisor模式

Hypervisor模式也称裸机虚拟化指的是,直接将VMM安装在硬件设备与物理硬件之间。从架构上来看,所有的物理资源如处理器、内存和I/O设备等都归VMM所有,VMM可以被看做是一个完备的操作系统,虚拟机有指令要执行时,Hypervisor会接管该指令,模拟相应的操作。

这种模式下因为直接操作硬件,所以效率高,安全性也高,缺点是VMM需要进行物理资源的管理,包括设备的驱动。

采用这种模型的典型是面向企业级应用,比如VMware vSphere。

(2)宿主模型

这种模型中物理资源由宿主机操作系统管理,比如window、linux等,VMM通常是宿主机操作系统独立的内核模块。VMM通过调用宿主机操作系统的服务来获得资源, 实现处理器、内存和I/O设备的虚拟化。

这种模式下可以充分利用现有操作系统的设备驱动程序,但是VMM虚拟化的效率和功能会受到一定影响,安全性也较低

采用这种模型的典型是KVM、VirtualBox和VMware Workstation。

(3)混合模型

混合模型是上述两种模式的汇合体。VMM依然位于最低层,拥有所有的物理资源。单VMM 会主动让出大部分I/O设备的控制权,交由特权操作系统控制。这钟状况下处理器和内存的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权操作系统共同合作来完成。

采用这种模型的典型是Xen。

2.2操作系统级虚拟化

在操作系统虚拟化技术中,每个节点上只有唯一的系统内核,不虚拟任何硬件设备。通过使用操作系统提供的功能,多个虚拟环境之间可以相互隔离。通常所说的容器(Container)技术,如目前为止最流行的容器系统Docker,即属于操作系统级虚拟化。

常见的虚拟化产品,比如VMware、kvm、Xen等都是硬件虚拟化技术。这些虚拟机之间资源独立,即使都处于同一个宿主机器中也无法互操作,只能通过网络进行访问。而容器技术基于同一个宿主操作系统,可以实现资源共享。

同时容器技术相比传统的虚拟化技术可以更高效的利用资源。

3.常见的虚拟化实现

3.1硬件虚拟化产品

3.1.1 VMware vSphere(完全虚拟化,Hypervisor模式)

VMware vSphere 源名称为VMware ESX Server,是VMware的旗舰产品。

vSphere基于Hypervisor模型,支持完全虚拟化,可以运行Windows 、Linux、Solaris等系统。VMware vSphere也支持类虚拟化,可以运行Linux 2. 6. 21 以上的客户机操作系统。

vSphere的早期版本采用软件虚拟化的方式,基于Binary Translation技术。自vSphere 3开始采用硬件虚拟化的技术,支持Intel VT技术和AMD-V技术。

3.1.2 VMware Server(完全虚拟化,宿主模型)

VMware Server之前叫VMware GSX Server,是VMware面向服务器端的入门级产品。VMware Server采用了宿主模型,宿主机操作系统可以是Windows或者Linux。VMware Server功能与VMware vSphere由于采用了宿主模型,因此VMware Server支持的硬件种类要比Server功能与VMware vSphere多。

3.1.3 VMware Workstation(完全虚拟化,宿主模型)

VMware Workstation是VMware面向桌面的主打产品,也是基于宿主机的。

VMware Workstation也支持完全虚拟化,可以运行Windows、Linux、Solaris

3.1.4 Microsoft Virtual PC(完全虚拟化,宿主模型)

微软收购的产品,Virtual PC是基于宿主模型的虚拟机产品,宿主机操作系统是Windows。早期版本也采用软件虚拟化方式,基于Binary Translation技术。之后版本已经支持硬件虚拟化技术。

3.1.5 Microsoft Hyper-V(半虚拟化,混合模型)

Hyper-V技术时2008年岁window server 2008以起发布的,其虚拟化架构采用的是混合模型,Hyper-V可以看做是Hypervisor直接驱动硬件,window server 2008看做是特权操作系统。之后window 8之后的系统也加入了这一技术。 Hyper-V 半虚拟化技术

3.1.6 Xen(完全或半虚拟化,混合模型)

开源软件,Xen基于混合模型,特权操作系统( 在Xen中称作Domain 0)可以是Linux、Solaris以及NetBSD,理论上,其他操作系统也可以移植作为Xen的特权操作系统。 Xen最初的虚拟化思路是半虚拟化,之后也支持了完全虚拟化和硬件虚拟化技术。

3.1.7 KVM(完全虚拟化,宿主模型)

开源软件,007年被集成到了Linux 2.6.20内核中,成为内核的一部分。

3.1.8 VirtualBox(完全虚拟化,宿主模型)

VirtualBox是一款开源虚拟机软件,用户可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、BSD等系统作为客户端操作系统

3.2操作系统级虚拟化产品

3.2.1LXC

LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。,LXC在资源管理方面依赖于Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源

LXC 存在于 liblxc 库中,提供了各种编程语言的 API 实现,包括 Python3、Python2、Lua、Go、Ruby 和 Haskell 等。与其它容器技术不同的是, LXC 可以工作在普通的 Linux 内核上,而不需要增加补丁。

3.2.2 Linux VServer

Linux-VServer 也是一个操作系统级虚拟化解决方案。Linux-VServer 对 Linux 内核进行虚拟化,2.4 和 2.6 版本的 Linux 内核支持 Linux-VServer,它可以运行于很多平台之上。

4容器技术

4.1docker

Docker 是到现在为止最流行和使用广泛的容器管理系统。docker开始时虚拟化技术采用LXC,之后自己开发的 libcontainer 。docker除虚拟化技术外还有仓库,镜像等,是一个应用系统了,有点虚拟机运行管理工具的意思了

4.2 rtk

rtk的功能与docker相似,都是一种容器技术。rkt是一款由CoreOS打造的容器引擎。

5.其他

5.1 Vagrant

Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以轻松实现对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境各类软件、打包和分发虚拟机运行环境等,提供了一套基于配置文件和命令行的管理工具。

vagrant可以支持多种虚拟环境,例如 VirtualBox, VMware, AWS, OpenStack等等。无论你使用何种虚拟环境,vagrant都可以顺利执行起来

Vagrant与docker都是管理工具,不同的是Vagrant 适合用来管理虚拟机,而docker适合用来管理应用环境。Vagrant管理虚拟机的创建、删除、配置等。docker管理容器的创建、删除、配置等。Vagrant依赖于硬件层虚拟化技术,创建出虚拟机后可以安装linux、window等系统,而docker依赖于操作系统层虚拟化技术,如LXC等。

5.2 docker toolbox

docker toolbox是一个工具集,它主要包含以下一些内容:

Docker CLI 客户端,用来运行docker引擎创建镜像和容器
Docker Machine. 可以让你在windows的命令行中运行docker引擎命令
Docker Compose. 用来运行docker-compose命令
Kitematic. 这是Docker的GUI版本
Docker QuickStart shell. 这是一个已经配置好Docker的命令行环境
Oracle VM Virtualbox. 虚拟机

由于Docker引擎的守护进程使用的是Linux的内核,所以我们不能够直接在windows中运行docker引擎。而是需要运行Docker Machine命令 docker-machine, 在你的机器上创建和获得一个Linux虚拟机,用这个虚拟机才可以在你的windows系统上运行Docker引擎。

使用docker toolbox安装使用的虚拟机是Virtualbox,对于window10与mac现在推荐安装docker for window与docker for mac 来代替toolbox,对于docker for window工具,工具会使用系统自带了Hyper-V虚拟机,必须确保window的Hyper-V功能开启(docker for window )。

5.3 docker-machine

Docker Machine 是 Docker 官方提供的一个工具,Docker Machine是一个工具,可让您在虚拟主机上安装Docker Engine,并使用docker-machine命令管理主机。您可以使用Machine在本地Mac或Windows机器上,公司网络上,数据中心或Azure,AWS或Digital Ocean等云提供商上创建Docker主机。使用docker-machine命令,您可以启动,检查,停止和重新启动托管主机,升级Docker客户端和守护程序,并配置Docker客户端以与主机通信。

Docker Machine可以完成如下工作:在Mac或Windows上安装并运行Docker、配置和管理多个远程Docker主机、提供Swarm集群

docker toolbox中含有docker-machine,创建虚拟机也是通过Docker Machine工具创建的。

5.4 minikube

minikube是一个安装本地kubenetes的工具,minikube会下载kubeadm及kubelet。默认会启动虚拟机然后在虚拟机中安装docker并下载镜像运行等工作。也可以使用虚拟机而在本地系统安装,这时会使用本地的docker进行管理。

5.5 kubeadm

6 参考文档

https://blog.csdn.net/mumuriyue/article/details/85714900 https://blog.csdn.net/gui951753/article/details/81045508

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!