什么是虚拟化?
在计算机领域中虚拟化,和我们平时说的虚拟化并没有什么两样,说白了就是一个虚拟出来的东西罢了,并不是真实存在的。
虚拟化的历史
虚拟化早在20实际60年代末,由IBM开发被命名为vmm(Virtual Machine Monitor)虚拟机监视器的软件,我们知道那时候工艺技术并不发达,电脑也不像现在这样属于每家每户的标配,IBM为了解决电脑使用的问题,就开发了此软件,用于将一台大型计算机硬件虚拟分为多个计算机,以提供多用户对计算机的使用。
此图是一个标准虚拟化场景,硬件上方安装一个操作系统(我们成为宿主机),由操作系统上安装一个软件(我们称之为Hypervisor)创建出多个虚拟机(我们成为来宾主机),guest主机如果发起系统调用等特权指令的操作会被hypervisor接收,并转换后交给host实现系统调用。
虚拟化的分类
半虚拟化:虚拟机明确的知道自己运行与虚拟机中,发起的所有系统调用被称作为hypercall,由hypercall直接向硬件发出指令。
完全虚拟化:又被称为硬件辅助的虚拟化,其实还有一种被称之为模拟化的东西,模拟化是什么呢?就是guest所有设备都是通过hypervisor模拟出来的,底层硬件和guest的硬件甚至可以完全不一样,但是这样就会多个上面提到的指令转换的过程,这样性能就大大被降低。为了解决这个问题,一些硬件厂商直接在硬件上提供了一些技术支持,例如我们知道cpu有个叫做运行环的概念,用户空间的指令在环3上运行,如果有对硬件的操作,都是通过发起系统调用,由内核操作硬件来完成这类型的指令,是在环0上执行,支持硬件辅助的cpu会虚拟出一个叫环-1的东西,我们host的内核从此就在环-1上呆着了,cpu上的指令集依然在环0上,这时候如果guest发出一个系统调用,就会直接被cpu捕获,再由cpu激活运行在环-1上的host内核来执行,这样一来是不是就比前面说的模拟化性能大大提升啊~。(当然在这里只提到了cpu的虚拟化,甚至cpu的MMU和TLB的虚拟化都没提到,还有内存的虚拟化,IO的虚拟化,这里就不多做介绍了)
另外其实还有很多种虚拟化的分类,例如我们使用的tomcat 应用级别的虚拟化,还有现在的容器虚拟化(只隔离用户空间,多个用户空间共享内核空间)等等,但这些不是今天我们所说的重点。
看了对半虚拟化和完全虚拟化,如果我描述正常的话,相信你已经有个一点点概念了,半虚拟化无疑是运行性能应该是最好的,但是需要修改guest上的内核,以让他知道自己运行在虚拟机的环境中,但是这又很难实现,毕竟修改内核也不是谁都会玩的,再说了有些系统闭源你根本没法修改~。所以一般都使用的完全虚拟化类型。
再说kvm之前还必须提一下一个重要的软件qemu,qemu本身是一款模拟软件,可以模拟出各种硬件,xen和kvm都是依赖于qemu,IO设备一般有qemu模拟,cpu和内存一般就基于硬件辅助技术虚拟出来,qemu同时也是一款管理工具,但自身是一个比较底层的工具,底层也就意味着不好用。。。
kvm介绍
kvm有一家以色列的公司Qumranet开发,但后来被红帽收购,已经被收录至内核之中,想使用,我们直接在内核中加载此模块,在用工具进行管理即可。
kvm依赖hvm硬件需要支持虚拟化技术,也就是我们上面提到的硬件辅助
kvm的管理工具
qemu:我们上文中提到的,但太过底层,所以不好用。
libvirt:有红帽牵头提出的项目,为所有虚拟化的场景中提供一个通用层,可管理所有虚拟化场景中的主机,但本身是作为一个守护进程运行在host主机上,所以较为重量级。
libvirt提供了几个工具virsh 命令行管理工具,具有重多的子命令,用于管理guest(例如添加内存大小啊)好在帮助很好查看,后文介绍,virt-install guest的管理工具用于创建guest主机等操作,另外还提供了一个图形化的管理工具virt-manager,用于创建管理guest。
接着来看如何使用
在vmwaer中勾选此项,并启动系统。
[root@localhost ~]# cat /proc/cpuinfo #进入系统后,查看cpu信息
确保cpu支持虚拟化技术 intel为vmx amd为svm
[root@localhost ~]# modinfo kvm #查看当前系统是否有kvm模块,如果有模块的响应信息就代表OK了
[root@localhost ~]# modprobe kvm_intel #装载此模块
[root@localhost ~]# ls /dev/kvm #可以看到在设备目录下有个叫kvm的设备。
/dev/kvm
[root@localhost ~]# yum install libvirt #安装libvirt
[root@localhost ~]# systemctl start libvirtd #启动服务
[root@localhost ~]# yum install virt-manager #安装图形化管理工具
接着执行virt-manager就可以直接启用图形化接口了,记得要安装linux图形界面才行,如果还要远程打开图形化窗口记得ssh -X重新登录(我这使用-X一直登录不了,就直接在虚拟机上截图看看吧)。
看到这里有没有很熟悉的感觉~,就跟我们用的vmwaer差不多,除了丑了点,接着就可以添加虚拟机,等等做修改处理了。
virsh的使用
virsh –help 可以看到有非常多的子命令,并且后面也有简单的描述,比如我想使用attach-disk添加磁盘的命令,那么使用virsh attach-disk –help 就可以看到具体使用格式,以及支持的选项。
具体的就不演示了
到这里其实还有不少问题,比如网络,磁盘,的虚拟化,用qemu-img模拟出一个磁盘,网络的虚拟化等等。
自己本来也并未完全吸收,这里就不过多介绍了,不然就成了门外汉在这指手画脚闹笑话了,以后了解了,能组织出自己的语言,再来介绍。
另外自我认为,想要学习虚拟化的使用,难得不在部署上,在虚拟化的背后有太多的理论知识,那才是重点,就像开篇标红出说的,了解那些才能真真知道虚拟化具体是咋回事,此篇就当写着玩好了~~~
原创文章,作者:N24_Ghost,如若转载,请注明出处:http://www.178linux.com/70784
评论列表(1条)
赞,有很多自己思考的地方~另外可以看下zstack~