虚拟化
虚拟化是云计算的基础。
简单地说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,
虚拟机共享物理机的CPU、内存、IO硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest )。
那么Host是如何将自己的硬件资源虚拟化,并提供给Guest 使用的呢?
这个主要是通过一个叫做Hypervisor 的程序实现的。
根据Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:1型虚拟化和2型虚拟化。
1型虚拟化
HypervisorF 直接安装在物理机上,多个虚拟机在Hypervisor 上运行Hypervisor 实现方式般是一个特殊定制的Linux 系统。Xen和VMWare 的ESXi都属于这个类型,如图1-1所示。
2型虚拟化
物理机上首先安装常规的操作系统,比如 Redhat 、Ubuntu 和Windows 。
Hypervisor 作为os上的一个程序模块运行,并对虚拟机进行管理。
KVM、VirtualBox 和VMWare Workstation 都属于这个类型,如图1-2所示。
理论上讲:
1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;
2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。
嵌套意味着可以在KVM虚拟机中再运行KVM。
KVM
下面重点介绍KVM这种2型虚拟化技术。
在x86平台上最热门、运用最广泛的虚拟化方案莫过于KVM了。
OpenStack 对KVM支持得也最好,我们的教程也理所当然选择KVM作为实验环境的Hypervisor 。
KVM全称是Kemel -Based Virtual Machine。也就是说KVM是基于Linux 内核实现的。
KVM有一个内核模块叫kvm.ko,只用于管理虚拟CPU和内存。
那 IO 的虚拟化,比如存储和网络设备由谁实现呢?
这个就交给Linux 内核和Qemu来实现。
说白了,作为一个Hypervisor,KVM本身只关注虚拟机调度和内存管理这两个方面。
IO外设的任务交给Linux 内核和Qemu。
Libvirt
大家在网上看KVM相关文章的时候肯定经常会看到Libvirt 这个东西。
Libvirt 是啥?
简单地说就是KVM的管理工具。
其实,Libvirt 除了能管理KM这种Hypervisor,还能管理Xen,VirtualBox 等。
OpenStack 底层使用Libvirt,所以很有必要学习一下。
Libvirt 包含3个东西:后台daemon 程序libvirtd 、APl库和命令行工具virsh
libvirtd 是服务程序,接收和处理API请求;
API库使得其他人可以开发基于Libvirt 的高级工具,比如virt-manager ,这是个图形化的KVM管理工具,后面我们也会介绍;
virsh 是我们经常要用的KVM命令行工具,后面会有使用的示例。
作为KVM和OpenStack 的实施人员,virsh 和virt-manager 是一定要会用的。
--
待续...
继本篇下一篇是KVM实操