时间:2017-06-14 14:16:58 作者:琪琪 浏览量:42
云最成熟的架构是IaaS(Infrastructure as a Service),其中用到的技术有xen,kvm,lxd等,VMware虚拟化技术也是其中的一种。
为什么要虚拟化技术呢?目前在众多大规模互联网公司和游戏公司大都采用xen,kvm等虚拟化技术,使用这些虚拟化技术的好处是当服务器宕机时,运维人员在做维护时只需要将在虚拟机上运行的服务切换到另一台物理机上。而如果不使用虚拟化技术,运维人员就必须在服务离线前再找一台物理机配置服务,以实现切换。因此,虚拟化技术可以实现服务实时切换、迁移。另外,在运维上,特别是自动化运维以及实现弹性运算等高级功能只能通过虚拟机的运行方式来实现,而物理机的运行方式是运行不了的。
IBM和Intel公司在硬件制造生产上也不断地为提供更好地、更便捷地实现虚拟化技术开发出CPU的新特性。
那么,创建虚拟机的工作原理又是怎样的呢?创建虚拟机又是一个怎样的过程?简单地说,创建虚拟机就是在一台电脑上虚拟出多台电脑,并且虚拟机之间彼此独立,看起来就像独立的电脑一样。我们知道,一台主机最核心的硬件部件是CPU(Central Processing Unit),Memory,I/O设备,它们通过主板连接起来。因此严格来说,创建虚拟机是通过软件方式虚拟出各个具有独立的CPU、Memory、I/O设备的平台。我们把宿主机称为Host,把各个虚拟机称为Guest。
问题来了,假设我们的电脑CPU只有一个,所以底层能实现运算的只有一个CPU,那么软件如何保证各个虚拟机拥有独立的CPU?对于Memory和I/O来说又是怎么实现的?
对于CPU来说,因为CPU的工作方式是分时的(Time-sharing),它能把运行时间分为多个时间段,并将这些时间段分配给各个虚拟机,是这样来实现的。
对于Memory来说,首先要明白读取内存数据的方式。内存是编址的存储单元,读取方式是CPU通过寻址后定位到内存某一个cell存储空间上获取数据的。因此,虚拟内存是通过人为地在逻辑上把内存切成多段,分别分配给各个虚拟机,每个虚拟机只能使用自己地址范围内的内存,剩下的内存则分配给宿主机。
I/O的虚拟化是比较难的。例如输入设备键盘是不可能同时为多个虚拟机以及宿主机占用的,因此也只能类似“分时”地使用,键盘或者鼠标的控制权在各个虚拟机和宿主机间的切换是通过“捕获”来实现的。
此外,网卡的虚拟化是通过软件的方式,为各个虚拟机虚拟出网卡,这些网卡最终都要对应到物理网卡上。
OK,创建虚拟机的原理大概讲完了,那么创建虚拟机的步骤究竟怎么样呢?主要有两大步骤,一是虚拟出一个物理机,二是为这个物理机安装OS。
虚拟出一个物理机是指虚拟出硬件部件的意思,根据上面提到的,主要是虚拟出CPU、Memory、I/O(Disk,Ethercard等)。例如指定有多少个CPU,CPU有几个核,有多少内存,有多少个硬盘,这些硬盘是什么格式的,有多少个网卡,这些网卡又是什么格式的......做完这一步骤之后,物理机就虚拟出来了,但是我们知道,如果没有软件在这些硬件上面运行,那么这些硬件就相当于一堆废铁,所以我们还要为这个物理机安装上操作系统。
再拓展一点,上面创建虚拟机的过程中,硬盘的虚拟化或磁盘的虚拟化是通过磁盘映像文件来实现的(disk image file),即将一个或多个文件当做硬盘或磁盘来使用。那么问题来了,怎么把文件当成磁盘来使用的?这就是这个用来做虚拟化的软件(例如VMware Workstation)的意义了。这个软件能够通过某个接口虚拟出硬盘控制器,这个控制器就能把文件当做磁盘来使用了,而且不仅能指定这个硬盘文件的大小,还能支持稀疏格式(sparse)。什么是稀疏格式呢?例如我们在创建虚拟机时,指定这个虚拟机的硬盘为20G,但实际上在我们的电脑上看到的这个硬盘文件只是显示20k,由此导致的虚拟机的硬盘大小与其在宿主机上占用空间的大小不一致,这就是稀疏格式(sparse)。并且,这个20k会随着我们的需求以及我们在虚拟机上的操作不断增加,例如从20k增加到4G,再到10G等等。