作者:小不

 

熟悉虚拟化的你,恐怕很难相信,2014年了,对云计算和虚拟化领域之外的人提起KVM、虚拟化,还有人第一反应是:“KVM,是不是机房里面那个接鼠标、显示器、键盘的小推车?”“虚拟化,是不是VMware?”

KVM的问题在于,入门门槛略高,且对KVM调优需要相当得技能和经验。要学好管好KVM,你要学会使用或管理:Linux、Qemu、libvirt、virsh、virt-manager、NFS、iSCSI、FC、LVM、iptables、Linux bridge、tap、VLAN、macvtap、virtio、cgroups、VNC/Spice、各种监控工具……简单来说,除了需要Linux管理运维和企业IT的相关技能,还需要学习虚拟化知识。对于个人用户来说KVM太难上手。这就导致KVM在公有云中火得一塌糊涂,但是有些传统行业得IT部门对KVM还是望而却步,很多个人用户对虚拟化的体验还停留在VMware Workstation阶段。

所以,我们需要一个管理软件,实现常见的KVM虚拟化管理功能,并且以简明易懂的方式呈现出来,同时又不能过度简化以免退化成玩具。下面,请允许我介绍,人见人爱,花见花开的,Kimchi(朝鲜泡菜)虚拟化管理软件。

如果你的需求满足以下条件中的任意一点,Kimchi可能就是你的菜。

  1. 懂点IT,懂点网络,懂点存储,但是完全不懂虚拟化,想测测KVM。
  2. 手上有几台机器,想搞虚拟化,oVirt和OpenStack装起来太麻烦,一两个人也搞不定那么复杂的维护工作。
  3. 之前用其他工具创建了虚拟机,现在需要从平板电脑上访问管理界面和虚拟机图形终端。
  4. Virt-manager呈现太多细节,也不智能,Gnome Boxes太简单像个玩具。
  5. 宿主机不是给虚拟化独占的,还跑了一些其他业务,不希望装一个侵入式的虚拟化管理软件。而oVirt和OpenStack就是侵入式的,会修改宿主的网络和其他配置。比如,如果你是一个开发者,在自己的开发笔记本上想跑个虚拟机测点东西,oVirt和OpenStack就不适合了。
  6. 你在开发基于KVM的虚拟化管理方案,需要一套REST风格的API来管理宿主机、存储、网络、虚拟机。

Kimchi为什么叫Kimchi,现在已经不可考了,大概是创始人希望Kimchi像泡菜一样能和群众打成一片吧。Kimchi是一个基于HTML5的轻量化但智能的虚拟化管理软件,使用对商业扩展比较友好的开源许可证LGPL3发布。Kimchi的Web服务器运行在宿主机上,监听8000端口,提供一个Web界面。用户可以通过Web图形界面管理该宿主机上的虚拟机、存储、网络。下面是它的管理界面的截图。

111

点开其中一个虚拟机的屏幕,就可以直接在浏览器中操作虚拟机的图形界面了,如下图。

222

为了最大化Kimchi的跨平台和可访问性,前端Web界面是基于HTML5的,因此凡是支持HTML5、CSS、JS的浏览器都可以访问Kimchi。无论用户使用的系统是Windows、Linux还是平板电脑,都可以作为客户端管理并访问他的虚拟机。前端同时支持中英葡西德意法日韩俄各国语言。后端支持主流的Linux发行版,比如Fedora、Ubuntu、OpenSUSE、RHEL,等等。Kimchi的前端和后端完全只通过REST API通信,JS发出AJAX调用,后端响应之后,JS原地刷新页面。同时,REST API完全对外开发,文档、包装库也都是现成的。可以不使用Web界面,而直接使用API来控制Kimchi。这意味着,可以很容易的将Kimchi集成到其他的方案里,比如,可以在Bash脚本里通过curl命令向Kimchi服务器发起调用,按需创建虚拟机,使用完之后又删除掉。

在Kimchi里,创建一个虚拟机,只需要下面几步。

  1. 用户下载虚拟机操作系统的安装光盘镜像。如果不想手动下载,Kimchi里也自带了常见的Linux发行版的光盘镜像下载链接,Kimchi会直接把这个链接传给虚拟机,让它边下载边装。
  2. Kimchi会自动扫描宿主机中可用的光盘镜像并列出来,用户只需要选择一个光盘镜像。

333

  1. Kimchi自动分析光盘中的内容,识别要装的是什么操作系统,生成一个虚拟机模板,模板中包含了针对该操作系统比较常见的优化的虚拟机配置。用户也可以定制模版中的参数。
  2. 用户从选择一个模版创建虚拟机,Kimchi自动从存储池中分配新的卷,供虚拟机作为磁盘镜像。虚拟机启动以后开始安装客户操作系统。

创建虚拟机的过程十分简单,几乎没有需要思考和配置的地方,只需要选一下光盘镜像就行了。

管理虚拟网络也很容易。Kimchi目前提供三种网络,隔离、NAT、桥接。使用的主要技术是Linux bridge、macvtap、VLAN、iptables。不同隔离网络中的流量互相不可见,也出不了宿主物理网络,但是宿主可以和隔离网络中的虚拟机分别通信。隔离网络实际是建立若干隔离的Linux bridge,每个Linux bridge就承载了一个隔离网络,被插到同一个Linux bridge上的虚拟机就在同一个隔离网络。NAT网络则类似常见的防火墙+网关的传统网络,与隔离网络的区别是,NAT网络通过配置Linux的iptables nat表,把宿主机变成了网关,将虚拟网络中的流量进行地址端口转换后路由到公网,但是会屏蔽从公网主动发起的连接请求。这样的效果是,虚拟机可以上网,但是外面的流量无法主动进入虚拟网络。最后一种桥接网络,则是在物理网卡上建了macvtap类型的bridge。macvtap bridge由于不需要将网卡设置成混杂模式,所以效率比Linux bridge高。在桥接网络下,宿主机变成了一个软件实现的交换机,将虚拟网络桥接到物理网络,虚拟机可以自由上网,物理网络的流量也可以自由访问虚拟机。同时还可以在桥接网络上创建VLAN。Kimchi还将支持Open vSwitch,现在社区中已经有开发者在做。

当然,这些技术细节对用户是不可见的,在用户看来,三种网络分别是隔离、对外联通、全联通(可选VLAN)。下图展示了创建虚拟网络的Web界面,操作很简单。

444

目前Kimchi支持在用户创建好的Bond设备上创建桥接网络,以后Kimchi会支持直接在Web界面中创建Bond设备。

至于虚拟机存储,Kimchi的后端实际上用的是libvirt的存储池。Kimchi目前支持的存储后端类型包括,文件系统目录、NFS、iSCSI、SCSI/FC、LVM。第一种目录存储,实际上就是宿主机上的某个目录,Kimchi会使用这个目录存放虚拟机磁盘镜像。NFS则是把一个远程机器上的NFS导出点挂载到宿主机,用来保存磁盘镜像。iSCSI、SCSI、FC则是用扫描出来LUN来作为磁盘镜像,每个LUN就是一个虚拟磁盘。LVM则可以把宿主机上的块设备聚合起来变成一个逻辑卷组,然后从卷组里分配逻辑卷,每个逻辑卷就是一个虚拟磁盘。

下图是Kimchi存储池一览界面。

555

Kimchi有一些比较方便的功能。比如自动扫描目标服务器上的NFS导出点和iSCSI target,列出来让用户选,这样用户就不用记忆长长的NFS导出路径和target名字了。另外,用户还可以自由的为创建好的虚拟机添加新的虚拟磁盘。

Kimchi除了实现了常见的虚拟化管理功能,还有简单的宿主机管理功能,比如,系统运行状态图表,升级软件包,生成诊断报告。现在社区里还有一个Ginger插件,实现了常见的针对虚拟化的宿主机管理功能,比如,配置物理网卡IP地址、虚拟化相关配置文件备份和下载、系统调优。Ginger的界面如下。

666

Kimchi的后端框架支持插件,前端框架支持标签,因此第三方开发者可以向Kimchi添加任意的功能和新的Web界面。

总的来说,对于个人用户、企业虚拟化入门用户、主机数量比较少的用户,Kimchi既简单易用,也提供了丰富的功能和智能。将来Kimchi还将支持自治集群和热迁移,如果有兴趣,请移步Kimchi的主页:https://github.com/kimchi-project/kimchi

FAQ

  • 1.   问:Kimchi的社区热度如何?主要开发者来自哪里?

答:Kimchi的开发速度很快,现在已经迭代到1.3版了,每个新版本都加入大量新功能。根据https://www.openhub.net/p/kimchi的统计,上个月有来自12个开发者的82次提交,过去一年有来自32个开发者的1310次提交。后端使用Python开发,前端使用HTML5、Javascript、CSS等技术。目前有大约10人的稳定的全职核心开发人员,主要是IBM的软件工程师,分别来自中国、巴西、美国。另外今年在北美开的Linuxcon上,有Kimchi的演讲,相应的幻灯片可以从http://events.linuxfoundation.org/sites/events/files/slides/kimchi_v2.pdf下载。

  • 2.   问:Kimchi是否和其他的虚拟化管理软件兼容?我需要把虚拟机“导入”到Kimchi吗?

答:Kimchi的虚拟机就是libvirt虚拟机。Kimchi只在libvirt之上做了很薄的封装和逻辑,并且尽最大努力兼容其他工具创建的libvirt虚拟机。

  • 3.   问:Kimchi是否支持克隆虚拟机,这样创建大量虚拟机的时候会比较方便。

答:这个功能还没集成到正式版中,目前社区里已经有代码了,正在review。

  • 4.   问:Kimchi和oVirt什么关系?功能上是子集吗?

答:Kimchi是oVirt的子项目,但是其实面向不同用户群的独立项目。oVirt是面向中小集群的虚拟化管理,Kimchi是面向单机和小集群的虚拟化管理。oVirt假设它独占主机,会改主机的网络和一些重要配置。Kimchi假设要和其他工具兼容,一般不作侵入性的配置改动。Kimchi目前只能管理本地宿主机,以后也会开发自治集群的功能,用多播在局域网内部识别出其他Kimchi节点,主要是为了在用户迁移的时候能够自动把其他节点识别出来。

oVirt的集群是结构化的,Kimchi的集群是自组织的。结构化的也就是整个集群是一致的,比如一台主机宕机,有统一的调度把虚拟机在其他主机上重启。自组织的,就是一台主机关机,虽然小伙伴们可能都能检测到这个事件,但是没办法自动重启虚拟机,因为不知道该在哪个主机上重启。这种情况下,用户需要手动干预,或者将来也许能集成一个集群锁来实现集群的一致性也不一定。Kimchi的目标用户是那些懂IT的客户,想测测KVM,尝试下虚拟化。对于那些需要更高级功能的用户,我们推荐他们使用oVirt。

  • 5.   问:仅仅是测试目的?不上生产环境的软件是赚不到钱的。

答:Kimchi不是为了和oVirt、OpenStack竞争大规模云计算虚拟化管理,而是需要填补入门级虚拟化的空白。现在很多用户一谈虚拟化就是VMware,对KVM上手和调优感到很困难,我们需要提供一个软件,让用户拿到一台新机器,装完系统后就能马上把虚拟机起起来。另外对于小规模的集群,oVirt和OpenStack就是杀鸡用牛刀了,安装维护oVirt和OpenStack都比较麻烦,如果集群规模不够大,不但享受不到oVirt、OpenStack带来的好处,还要付出维护成本。可以说Kimchi主要是填补了小规模KVM企业级虚拟化的市场。另外,Kimchi对外开放了API,支持插件,并且是用LGPL3发布的,扩展起来很容易,可以集成到其他项目里,对商业应用也比较友好。把Kimchi集成到更大的云计算管理软件里也不是不可能。Kimchi还补充了单机版的虚拟化管理软件的一些空白,比如Gnome Boxes功能太少像玩具,virt-manager功能点多,但是细节过多缺乏智能,Kimchi处于两者之间。

再者,Kimchi作为一个开源项目,目标不是赚钱,而是丰富KVM开源生态圈,让更多的人能把KVM用起来,而不是一提虚拟化就是VMware。Kimchi希望用农村包围城市推广KVM;-)。因此,像IBM这种大公司对Kimchi的投资,主要是看重了战略意义,而不是赚钱。

 


cloudsource版权所有,转载请注明

 

 

3 thoughts on “泡菜(Kimchi)和虚拟化”

  1. 在http://www.linux-kvm.org/page/Management_Tools里还有什么轻量级的,像上面所说非侵入性的web管理工具?

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据