云平台、虚拟化与容器:Hypervisor、KVM、QEMU、Libvirt、Docker、OpenStack

【Hypervisor】
Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件,也可叫做VMM(virtual machine monitor),即虚拟机监视器。

Hypervisors是虚拟环境中的根操作系统,可以访问服务器上包括磁盘和内存在内的所有物理设备。不但协调着这些硬件资源的访问,而且在各虚拟机之间施加防护隔离。当服务器启动并运行Hypervisor时,它会加载所有虚拟机的操作系统并给每一台虚拟机分配内存、CPU、网络和磁盘资源。

不管是KVM完全的虚拟化,还是XEN准虚拟化,都要有这个Hypervisor中间层。但基于容器的虚拟化技术不依赖Hypervisor。

【KVM】
KVM(Kernel-Based Virtual Machine)是基于内核的虚拟化。它其实是Linux内核的一个可加载模块,通过调用Linux内核自身的功能,实现对CPU和内存的虚拟化。这是一种完全的虚拟化,需由CPU硬件(如Intel-VT,AMD-V)支持。

功能上KVM主要负责vCPU的创建、虚拟内存的分配、vCPU寄存器的读写以及vCPU的运行。但仅有KVM还是不够的,用户无法直接控制内核去做事情。它只提供接口,至于怎么创建虚拟机,分配vCPU等并不在它上面进行。因此还必须有一个运行在用户空间的工具才行。于是KVM的开发者基于成熟的可独立使用的另外一套完整的虚拟化软件QEMU进行修改整合,最后形成了QEMU-KVM。

在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间。QEMU将CPU指令的部分交给内核模块来做,进而通过KVM实现CPU和内存的虚拟化。其他硬件设备(磁盘,网卡,显卡等)仍然通过QEMU来模拟。这样”KVM+QEMU”就实现了完整的高性能的服务器虚拟化。当然,由于QEMU模拟IO设备时效率不高,作为进一步优化,现在常采用半虚拟化的virtio方式来虚拟IO设备。

【Libvirt】
Libvirt是RedHat开发的一套虚拟机管理工具,主要由三个部分组成:API库、守护进程libvirtd和命令行管理工具 virsh。libvirt需要通过用户空间QEMU来与KVM进行交互。

【Docker】
Docker是基于容器的虚拟化技术,它提供了一种轻量级的打包和运行程序的方式,不需要为业务应用新启动一个操作系统。其原理是把应用程序和其运行环境一起打包到镜像中,增强了运行环境的一致性,大幅缩短业务应用部署上线的时间。另外由于Docker能够直接访问主机硬件,使得它的I/O操作比虚拟机要快得多。

【OpenStack】
OpenStack是私有云环境中最流行的云平台,它提供了一个完整管理数据中心的解决方案。虚拟化只是其中一部分,还包括存储、网络、监控、多租户管理等很多内容。

你可能感兴趣的:(概念篇)