KVM全称是Kernel-based Virtual Machine,由一个叫做Qumranet的软件公司开发并发布于2006年10月,2017年2月KVM代码被整合进Linux内核。

2008年,RedHat收购了Qumranet,推出基于KVM的虚拟化产品套件,作为他们主推的虚拟化产品。

现在Linux内核的虚拟化模块包括KVM和XEN,但是基于Linux的虚拟化技术,大多数人默认的选择是KVM。

众所周知Linux是开源操作系统,所有在Linux内核上的开发都会被开源,KVM作为Linux内核的一部分,可以得到来自全世界的商业和个人支持,这意味着持续的系统升级、新特性升级和安全更新,因为这个原因,KVM会得到越来越多的支持,可以说KVM就是虚拟化技术的发展方向。

KVM简介

KVM特性
  • KVM内核模块安装到Linux内核中,Linux内核就变成了一个hypervisor。
  • KVM虚拟化需要CPU支持硬件虚拟化技术(Intel-VT或AMD-V)。
  • KVM作为hypervisor通过硬件虚拟化技术提供虚拟CPU和内存。支持CPU和内存超分。更多细节可以参考这篇文章
  • KVM通过/dev/kvm在hypervisor上暴露出可供用户空间访问的内核接口,这些接口需要由软件来调用,这个软件就是QEMU。另外,QEMU还负责模拟IO设备供guest使用。VirtIO通过在guest和模拟IO设备之间添加抽像层,达到IO设备的paravirtualization,提高了IO性能(参考这篇文章)。
  • 支持VM在线和离线迁移。
  • 支持VM快照(依虚拟磁盘类型而定)。
  • 网络层面支持基于Linux的NAT和Bridge.
将KVM投入使用的公司
  • IBM
  • Apple
  • Google (GCP)
  • RedHat
  • DigitalOcean
趋势
  • VMWare and HyperV are leading.
  • KVM is the future.
  • Citrix(Xen) is losing ground.

KVM架构

QEMU可以不依靠KVM模拟完整的guest系统,但性能很差,下图右上角的”QEMU guest”就是这样的模式。
KVM guest vs QEMU guest

Xen, KVM, QEMU架构对比
Xen vs KVM vs QEMU

下图左边是完全虚拟化的网卡通信,没有VirtIO抽像层,虚拟网卡和Hypervisor通信需要经过QEMU翻译。右边是添加了VirtIO抽像层的Paravirtualization版本,在Guest和hypervisor上安装了VirtIO驱动,虚拟网卡和Hypervisor通信经过VirtIO优化,提升了性能。
VirtIO作用示意图

KVM在CloudStack中的实际使用

整体配置
  • CloudStack作为云计算管理平台,用来管理hypervisors, Volumes, Clusters, Virtual Routers…
  • 云计算的主要作用:为各类应用系统,包括SAP软件,Hana DB等提供自动化部署。
  • 自动化部署使用Ansible,包括基础服务系统和客户系统。
  • 网络配置优化,VLan隔离用户。
  • KVM作为hypervisor
  • Ceph作为存储backend
  • 目录访问使用OpenLDAP
  • 监控用checkMK
云架构Overview

KVM应用实例

通过图形化界面调用基础设施服务(VPN, Webproxy, DNS, Routing, LDAP, Monitoring, Billing等)的API来读取VM的系统信息。CloudStack负责管理存储、网络和hypervisor.

通过图形化界面调用AnsibleAPI来管理基础设施服务和客户VM,比如:

  • 创建DNS记录
  • 创建Backup记录
  • 创建LDAP用户
  • 将VM加入监控系统名单
  • 调用CloudStackAPI创建或删除VM、Volume或其他CloudStack对象
  • 在操作系统层面配置VM或基础设施服务所在的服务器
CouldStack特性

支持多种类型的hypervisor,包括HyperV, VMWare, Citrix Xen, 当然还有KVM(基于UbuntuRedHat)。因为这个特性,多种hypervisor可以设置为在CloudStack上共存。

支持多种存储技术。

Java开发,开源,社区活跃,Bug处理及时。

CloudStack架构

CloudStack架构

多台CloudStack Management Server实例组成一个服务器集群,接入MySQL数据库集群,提供统一的管理服务接口。

多种访问API:

  • User UI
  • Admin UI
  • Doman Admin UI

在hypervisor上装有CloudStackAgent,用以定义接口并和CloudStack进行通信。

通过API Bindings管理网络设备、防火墙。

通过一些额外的VM来管理和扩展一些服务,如second storage, console proxy等。

网络配置

网络配置模型

其中的缩写意义:

  • SSVM: Second Storage VM
  • CPVM: Console Proxy VM
  • VR: Virtual Router

上图是一个以KVM作为hypervisor的基本网络配置模型,hypervisor运行在Lenovo的物理机上,系统是Ubuntu。6块网卡,每2块Bond成为一个逻辑网卡,分别作为管理、客户和存储的网络接口。

客户的VM通过Virtual Router和Internet进行通信,也就是说,客户这块网卡是设置了VLan连接到外网的。

存储配置

CloudStack支持多种存储形式,包括常见的Local Storage, NFS, SMB, 以及这里使用的Ceph

Ceph

Ceph是下一代的分布式存储技术,扩容方便,支持商用硬盘,不依赖特殊的企业级存储产品(如EMC的产品)。

KVM原生支持Ceph作为Backend,相比于VMWare需要安装插件才可以支持。

典型客户Landscape应用场景

客户与客户之间的网络完全隔离,由CloudStack配置的虚拟路由作为网关。虚拟路由是CloudStack自带的,和KVM没有关系。客户VM通过虚拟路由和Internet通信

CloudStack集群中,对应每个客户有一个Service VM,提供LDAP,监控,自动化管理等服务。自动化管理由客户专属的Ansible服务提供。