kvm里主要去介绍它的虚拟化技术,包括云计算的组成和云计算的背景。
kvm的运行原理,虚拟机的创建,虚拟机的生命周期管理。
云计算的定义
它不是一种技术,它是一种收费模式,就是通过互联网把一些主机的硬件(cpu、内存、磁盘、网络)这些硬件把它们都统一的组合在一起,通过编码进行组合,组合到一起之后去售卖给用户,用户如果有需要用到cpu、内存、磁盘、网络这些需求的时候,直接去我们的云平台上面进行购买,让其他任务在上面运行,随用随销,用完了之后就直接可以抛弃掉这部分资源,让云平台回收回去,只需要在计算的一个时间段的那些资源进行付费就可以了,这种方式我们称为云计算,它可以极大的提高物理硬件的利用率,同样也能方便用户对它们的计算任务,去进行集中性的计算,而且资源不会得到浪费。
云计算的服务类型
云服务是指由第三方提供商托管的基础架构、平台或软件,可通过互联网提供给用户。"即服务型"解决方案主要有 3 种类型:IaaS、PaaS 和 SaaS。每种解决方案都能促进用户数据从前端客户端通过互联网流向云服务提供商的系统,或是反向流动,但具体情况会因服务内容而异。
虚拟化技术定义
通过操作系统里面内置好一个功能或者软件,将我们的物理资源逻辑上进行划分,划分成不同的来自相同源地址的物理硬件,划分成不同的逻辑单元,它们里面的cpu、内存、磁盘、网络、鼠标、键盘都有,把这些资源给它进行逻辑上的划分,功能上的划分,划分之后再提供给另外一个客户机的操作系统,就相当于在自己的操作系统上构建出了一个虚拟机。
在这些性能过剩的软件之上我们去安装一个软件,叫虚拟化操作槽,称之为VMN,将底下的硬件逻辑上划分为虚拟硬件,在提供给客户机操作系统,客户机操作系统之上再去运行我们想运行的app。也就是说应用业务,软件,服务都可以运行。节约系统性能,合理的去利用物理机上性能过剩的硬件。
虚拟化是建立在操作系统之上的,也就是说物理硬件所安装的操作系统之上我们还要安装一个VMM层,虚拟化软件层,利用软件的形式去支持虚拟化,提供给上方的进程虚拟机,进行资源的合理利用。
虚拟化的两种方式
最理想的虚拟化两个目标如下:
- 客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。
- 完全不需要VMM介入客户机的运行过程。
半虚拟化:
通过软件的方式在操作系统之上控制我们的虚拟机的运行
全虚拟化:
采用硬件(intel VT-x、VT-d)在硬件上编码支持虚拟化,它能达到的性能比软件层达的高,不需要操作系统进行相应的介入,只需要去安装一个工具,在操作系统之上能将底层的一些cpu、内存、磁盘进行合理的逻辑上的划分就可以了,完全实现一个虚拟化。
支持虚拟化的硬件进行沟通,这时候理论上所能达到的虚拟化效率是98%的,几乎只有2%的损耗,所以全虚拟化是重中之重的。
计算任务主要是透过kvm,去管理一些虚拟的cpu、磁盘,还是通过全虚拟化去进行的。
kvm是一种虚拟化技术,配合QEMU这个工具可以配合我们在一个宿主机中创建虚拟机的请求,kvm也是采用全虚拟化的解决方案去实现的虚拟化。
kvm虚拟化的原理
运行在操作系统之上的一些进程都是通过我们的操作系统与内核里面的一些模块进行沟通,linux内核里的模块与底层的硬件进行沟通,以此完成计算任务的发布与完成。
在kvm里面它的完成效果是在虚拟出来的kvm虚拟机由安装在虚拟主机的应用像,虚拟cpu向操作系统里面的内核的kvm模块发起计算请求,kvm模块通过一些驱动,调用我们底层的硬件,cpu,内存,以此完成计算任务之后再返回给cpu,然后由虚拟cpu再返回给上层的应用,它的数据流向是这样的,虚拟cpu、内存、磁盘分别是由qemu硬件虚拟化器创建出来的虚拟硬件,创建出来之后会被绑定到一个进程里面作为进程资源,进程里面每一个cpu都是一个线程,以此完成虚拟机里面的计算任务,在进程资源里面还包含着一些内存,磁盘,网络的io设备,同样它也属于进程资源里面所使用虚拟硬件安装的操作系统去使用的。如果放眼到宿主机中去看,就可以把kvm虚拟机看成一个进程,进程运行在我们的系统上,进程想要去调用底层的cpu就是这个进程去联系系统中的内核去调用底层的内存cpu。
可以把kvm虚拟机看做操作系统/宿主机操作系统里的一个进程,这个进程比较特殊,这个进程里面是一个操作系统而且是完全封闭的一个操作系统。
原理:在一个进程里面去加载虚拟的硬件,虚拟硬件之上安装操作系统,操作系统之上安装一些n机,redis,slb等等应用。
kvm虚拟机向下调用硬件,物理,cpu,网络,磁盘的时候都是以一个进程的身份向linux内核中的kvm模块发起计算请求,kvm模块去控制计算的任务,放入到物理的cpu中进行计算,计算结果再返回给相应的物理机中的虚拟机,虚拟机里面的一个应用。
kvm虚拟化网络解析
KVM中支持三种网络模式,分别为NAT模式、bridge桥接模式、host-only仅主机模式:NAT模式通常用来在个人虚拟化桌面中应用广泛,桥接模式在服务器虚拟化使用广泛,host-only一般在超级大的服务厂商内部使用。
NAT模式
宿主机作为centos的主机,在主机之上会创建出相应的虚拟机(kvm01)对外提供一个web server的服务器里面安装了一个nginx服务,网卡是ens33,在kvm环境部署的时候有个网卡叫virbr0,就是我们在宿主机中的一个nat网卡,主要起的作用就是地址的转换,相当于变种的防火墙,主要接收来自ens33的请求,或者是由kvm向外部(百度,新浪)发送一些数据请求,沿这条线再回来相应的响应,在kvm01中也会有自己的一张虚拟网卡(eth0),eth0会br0发送相应的一个请求,br0会将请求转发到ens33这张网卡中,ens33网卡会将请求转发到互联网的服务器中(百度),在这个过程中百度在解析到请求之后,会向你返回相应的响应,这个响应可以接收到的,因为我们触发的条件是kvm01作为源地址向外进行请求被br0,被ens33记录,响应回来的时候根据记录的源地址会进行不断的地址转换一直到eth0,eth0接收到响应的数据包之后在kvm01中通过osi七层模型进行相应的一个解封装过程,一直达到最高层的nginx那个地方去解析网页。这个就是在kvm里采用nat模式的数据流传过程。
值得一提的是nat模式这种网络可以出,不可以进的,对象是针对虚拟机而已,虚拟机的网络对外可以通,对内不通的。
如果是从互联网中,某一个用户去访问kvm01虚拟机的话,我们的源地址就是客户端的地址,目标地址就是kvm01的地址,client机器与kvm01并不在同一个网段中,ens33可以与client进行通信,一旦到virbr0的时候只有ens33这台机器的ip是被virbr0能转换到eth0身上的,原因在于virbr0设置的规则,
总结:nat模式可以出,访问外网,通过宿主机的ens33对外网进行访问,而如果从外网访问虚拟机的时候,虚拟机被接收请求的时候(client发出请求的时候)可以到达virbr0这个设备上,但是这个设备会拦截你向内进行访问,nat可以出,不可以进。
桥接网络
宿主机中有虚拟机kvm01,kvm02,他们两个中分别有两张网卡,eth0,如果想用桥接的网络对外进行上网,宿主机的网卡ens33,外部会有百度服务器,想用通过ens33访问百度服务器,桥接网络在内部的访问状态,在内部会创建一张桥接网卡bridge0,eth0连接bridge0,两台虚拟机的eth0连接虚拟网卡,桥接网卡连接到ens33上对外进行服务,所创建的br0设备也在宿主机之上的,br0设备被当作是一个虚拟的交换机,ens33这张网卡也是接到了br0身上,通过br设备访问百度,与宿主机所在网段的交换机进行连接,并且从宿主机所在网段的dhcp获取相应的ip,bridge0相当于宿主机中的虚拟交换机,在虚拟交换机中连接着不同的虚拟机的网卡,包括宿主机的一张网卡,以此来完成桥接网络,
host-only仅主机模式
相当于在宿主机中创建了一个私有的网段:1.不对外进行通信,2只在该虚拟网段中进行通信。相当于自己创建出来了一个虚拟交换机,虚拟交换机与外部并没有任何的相连,仅在宿主机中进行相应的网络流转实现。在特别大的厂商才能看见(阿里,天翼)