Introduction to KVM Keynote
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”就是这样的模式。
Xen, KVM, QEMU架构对比
下图左边是完全虚拟化的网卡通信,没有VirtIO抽像层,虚拟网卡和Hypervisor通信需要经过QEMU翻译。右边是添加了VirtIO抽像层的Paravirtualization版本,在Guest和hypervisor上安装了VirtIO驱动,虚拟网卡和Hypervisor通信经过VirtIO优化,提升了性能。
KVM在CloudStack中的实际使用
整体配置
- 以
CloudStack作为云计算管理平台,用来管理hypervisors, Volumes, Clusters, Virtual Routers… - 云计算的主要作用:为各类应用系统,包括
SAP软件,Hana DB等提供自动化部署。 - 自动化部署使用
Ansible,包括基础服务系统和客户系统。 - 网络配置优化,VLan隔离用户。
- KVM作为hypervisor
Ceph作为存储backend- 目录访问使用
OpenLDAP - 监控用
checkMK
云架构Overview

通过图形化界面调用基础设施服务(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(基于Ubuntu或RedHat)。因为这个特性,多种hypervisor可以设置为在CloudStack上共存。
支持多种存储技术。
用Java开发,开源,社区活跃,Bug处理及时。
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是下一代的分布式存储技术,扩容方便,支持商用硬盘,不依赖特殊的企业级存储产品(如EMC的产品)。
KVM原生支持Ceph作为Backend,相比于VMWare需要安装插件才可以支持。
典型客户Landscape应用场景
客户与客户之间的网络完全隔离,由CloudStack配置的虚拟路由作为网关。虚拟路由是CloudStack自带的,和KVM没有关系。客户VM通过虚拟路由和Internet通信
在CloudStack集群中,对应每个客户有一个Service VM,提供LDAP,监控,自动化管理等服务。自动化管理由客户专属的Ansible服务提供。
