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.
通过图形化界面调用Ansible
API来管理基础设施服务和客户VM,比如:
- 创建DNS记录
- 创建Backup记录
- 创建LDAP用户
- 将VM加入监控系统名单
- 调用
CloudStack
API创建或删除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上装有CloudStack
Agent,用以定义接口并和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
服务提供。