1 虚拟化的定义

         虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。宿主机通过 Hypervisor 的程序实现自身硬件资源虚拟化,实现方式又分为2种:(1)Hypervisor 直接安装在物理机上,在其上跑虚机;(2)物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理,比如虚机上跑虚机。相比较而言第一种性能优于第二种,第二种灵活度更高;

KVM 

        KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存,IO 外设的虚拟化交给 Linux 内核和 Qemu。

Libvirt

      简单说就是 KVM 的管理工具。

  Libvirt(虚拟化编辑器)包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh。
(1)libvirtd是服务程序,接收和处理 API 请求;
(2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
(3)virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。virsh命令具体用法可以百度上查找;
作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。

 

CPU虚拟化

     举例说明,KVM在宿主机上表现为linux的一个进程qemu-kvm,可以通过在这个进程里可以看到创建的虚拟机。每个vcpu都是qemu-kvm进程的一个线程,vcpu数可以超实际的cpu数,但需要注意机器负载情况,负责会影响整体性能;

内存虚拟化

     也是可以oversize,但也需要注意机器整体负载情况。为了在一台机器上运行多个虚拟机,KVM 需要实现 VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)之间的地址转换

存储虚拟化

        Storage Pool(存储池) 是宿主机上可以看到的一片存储空间,Volume(卷) 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。Storage Pool(存储池)主要有以下几种类型:

       (1)文件目录是最常用的 Storage Pool 类型。KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool,一个文件就是一个 Volume,卷存放在Storage Pool(存储池) 目录下。KVM 支持多种 Volume 文件格式:raw、qcow2(推荐,写时复制)、vmdk(vmware产品)等;

       (2)LVM 类型的 Storage Pool。不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上 VG 中的 LV 也可以作为虚拟磁盘分配给虚拟机使用。此时VG相当于Storage Pool(存储池),LV相当于Volume(卷)。此种方式优点是性能好,缺点是管理和移动性方面不如镜像文件,而且不能通过网络远程使用。

         KVM 还支持 iSCSI,Ceph 等多种类型的 Storage Pool,这里就不一一介绍了,最常用的就是目录类型,其他类型可以参考文档 http://libvirt.org/storage.html。

网络虚拟化

        Linux Bridge 和 VLAN。Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能大家可以简单的理解为是一个二层交换机或者 Hub。对于一个简单二层网络,如图1:br0是建立的网桥(可看作hub)、vnet0是宿主机上对于VM1虚拟网卡的名称(虚机的网卡名称是eth0)、eth0是宿主机的网卡名称;对于vlan网络,如图2,eth0.x 的作用是:定义了 VLANx;brvlanx 的作用是:Bridge 上的其他网络设备自动加入到 VLANx 中;eth0可以称为一个母设备,eth0.x作为其子设备,一个母设备可以对应多个子设备。eth0.x,brvlanx 和 vnet0 都分别接到 VLANx 的 Access口上。而 eth0 就是一个 Trunk 口,放开vlanx。

        总而言之,linuxbridge+vlan=虚拟交换机。(1)Linux 的 VLAN 设备实现的是隔离功能,但没有交换功能。 一个 VLAN 母设备(比如 eth0)不能拥有两个相同 ID 的 VLAN 子设备,因此也就不可能出现数据交换情况;(2)Linux Bridge 专门实现交换功能。 将同一 VLAN 的子设备(不同的母设备)都挂载到一个 Bridge 上,设备之间就可以交换数据了。

图 1 简单二层网络

虚拟化基础架构 虚拟化技术架构_虚拟化基础架构

图2 vlan网络

虚拟化基础架构 虚拟化技术架构_虚拟化基础架构_02

云计算

       IT系统架构的发展:面向物理机的裸机(物理机资源使用率低,管理复杂)、面向资源的虚拟化(采用虚机,资源利用率相对高,但虚机的管理又诞生出另一需求)、面向服务的云计算(如何对虚机统一又高效管理)。

  1. IaaS(Infrastructure as a Service):提供的服务是虚拟机,基础设施服务。例如阿里云、金山云等;
  2. PaaS(Platform as a Service):提供的服务是应用的运行环境和一系列中间件服务(比如数据库、消息队列等)。仅需要开发人员部署自己的数据就可以用,典型的 PaaS 有 Heroku、Google App Engine、IBM BlueMix ;
  3. SaaS(Software as a Service):提供的是应用服务,用户直接使用。 SaaS的使用者通常是应用的最终用户。 典型的 SaaS 有 Google Gmail、Salesforce 等;