虚拟化

虚拟化是云计算的基础。

简单地说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,

虚拟机共享物理机的CPU、内存、IO硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host)​,​宿主机上面的虚拟机称为客户机(Guest )​。

那么Host是如何将自己的硬件资源虚拟化,并提供给Guest 使用的呢?

这个主要是通过一个叫做​Hypervisor ​的程序实现的。

根据Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:​1型​虚拟化和​2型​虚拟化。






1型虚拟化

HypervisorF 直接安装在物理机上,多个虚拟机在Hypervisor 上运行Hypervisor 实现方式般是一个特殊定制的Linux 系统。Xen和VMWare 的ESXi都属于这个类型,如图1-1所示。


《每天5分钟玩转OpenStack》之虚拟化 & KVM_云计算





2型虚拟化

物理机上首先安装常规的操作系统,比如 Redhat 、Ubuntu 和Windows 。

Hypervisor 作为os上的一个程序模块运行,并对虚拟机进行管理。

KVM、VirtualBox 和VMWare Workstation 都属于这个类型,如图1-2所示。


《每天5分钟玩转OpenStack》之虚拟化 & KVM_运维_02





理论上讲:

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实操