【51CTO 11月15日外电】开源社区已经推出了世界上最出色的一些虚拟化技术,包括Xen和KVM虚拟机管理程序,各种功能强大的应用编程接口(API),以及Libvirt等接口。但是到目前为止,还没有哪个开源项目为虚拟化环境开发出真正精心设计的跨虚拟机管理程序管理工具。只有少数几个项目要么局限于某一种特定的接口,比如Virt-manager X11应用软件;要么是致力于云计算的工具,比如Xen的Enomalism,对于平常的虚拟机管理程序管理工作来说它又太过了。
管理员们日益寻求的是一种直观的Web图形用户界面(GUI),能够提供这样的功能:集中又全面地管理来自Xen、KVM和VMware等可用系统的成千上万个虚拟机,这时Archipel应运而生,它采用了全新的方法:一小队法国开发人员声称,希望比Enomalism或Proxmox做得更出色,于是深入钻研开源工具箱,开发出了Archipel。
这个Web GUI依靠Cappuccino JavaScript框架,提供了类似桌面应用程序的体验。究其核心,Archipel依靠Libvirt API,以便能够支持所有的主流虚拟机管理程序,比如KVM、Xen、OpenVZ和VMware。就在不久前,Archipel的第二个测试版已发布。
与虚拟机管理程序对话
Archipel采取了一种新方法,它选择扩展消息与出席协议(XMPP)作为与虚拟机管理程序对话的协议。这种即时消息传递协议因Jabber而广为人知,它支持内部消息实时传递,以实现控制和提供信息的目的。这意味着,你甚至可以使用Jabber客户端来查询虚拟机的状态信息,或者发送命令。究其核心,Archipel包括三个部分(见图1):
图1:Archipel架构,包括虚拟机管理程序、虚拟机、Archipel代理和冗余的XMPP服务器。
•Archipel客户端提供了吸引人的Web GUI,这个GUI很像iTunes,可以在大多数浏览器中运行,这归功于JavaScript。(测试客户端可供使用)
•Archipel代理在服务器上用来联系虚拟机管理程序实例。代理用Python编写,采用了模块化结构。管理员可以使用外壳命令,安装和更新代理。
•XMPP服务器架构必不可少,因为代理使用以Libvirt作为基础的XMPP,与虚拟机进行对话。
Archipel建议使用Ejabberd Jabber/XMPP服务器,不过据说实施的其他服务器也行。启动虚拟机的命令通过Archipel客户端上的Jabber XMPP,传送到XMPP服务器;然后,它传送到Libvirt(Libvirt-create),***传送到虚拟机管理程序(如KVM-create)。
Archipel的其中一个***缺点体现在安装过程:说明文档内容极其匮乏。但至少,描述设置的部分相当清晰,不过你需要留意几个错误。***的办法就是从安装Ejabberd入手,它需要版本至少是2.1.6,***使用二进制安装工具。接下来,你需要添加ejabberd_xmlrpc和mod_admin_extra模块,以扩展XMPP服务器。为此,获取用Erlang编写的源代码,然后将因而获得的*.beam文件拷贝到Ejabberd后台驻留程序的ebin目录(代码段1和代码段2)。
完成了这一步后,你需要修改/opt/ejabberd‑2.1.6/conf/ejabberd.cfg(视发行版而定,这个文件可能是/etc/ejabberd/ejabberd.cfg)。为此,启用你刚刚创建的模块;最重要的是,输入完全符合标准的域名(FQDN)。遗憾的是,Archipel项目记载的配置方法在许多方面具有误导性;为此,你可能应该遵循代码段3。
代码段1:ejabberd_xmlrpc
wget http://www.ejabberd.im/files/contributions/
xmlrpc‑1.13‑ipr2.tgz
tar ‑xzvf xmlrpc‑1.13‑ipr2.tgz
cd xmlrpc‑1.13/src
cd ../../
cp ebin/*.beam /opt/ejabberd‑2.1.6/lib/ejabberd‑2.1.6/ebin
***,创建管理员帐户,完成Ejabberd的设置:
ejabberdctl register admin FQDN password
设置Archipel代理的过程要快一点,从依赖性检查开始,为此你需要Python版本2.5或更新版本、Libvirt版本0.8.7或更新版本、KVM等虚拟机管理程序,以及Qemu版本0.12.5或更新版本。此外,你应该有Qemu-img和Python设置工具。
代码段2:mod_admin_extra
cd /usr/local/src/ejabberd‑modules/mod_admin_extra/trunk/
./build.sh
cp ebin/mod_admin_extra.beam
/opt/ejabberd‑2.1.6/lib/ejabberd‑2.1.6/ebin
代码段3:ejabberd.cfg
01 {hosts, ["jabber.deutschewolke.datenwerk‑it.de"]}.
02 [...]
03 {listen,
05 {4560, ejabberd_xmlrpc, []},
06 {5280, ejabberd_http, [
07 http_bind,
08 http_poll,
09 web_admin
10 ]}
11 ]}.
12 [...]
13 {modules,
15 {mod_adhoc, []},
16 {mod_http_bind,[]},
17 [...]
18 {mod_admin_extra, []}
19 ]}.
20 [...]
下面序列的命令安装了Archipel代理:
easy_install archipel‑agent
archipel‑initinstall
现在,你需要把服务器的FQDN添加到/etc/archipel/archipel.conf,使用提供的init脚本来启动Archipel:
/etc/init.d/archipel start
***,你需要两个Ejabberd pubsub节点,确保权限系统和标记管理可以正常工作:
archipel‑tagnode ‑‑jid=admin@FQDN ‑‑password=Password ‑‑create
SUCCESS: pubsub node /archipel/tags created!
archipel‑rolesnode ‑jid=admin@FQDN ‑‑password=Password ‑‑create
SUCCESS: pubsub node /archipel/roles created!
你不需要手动建立客户端,在Archipel维基中已有详细描述。而是只要选择***的Archipel客户端发行版,将它解压缩到本地目录中,在浏览器中打开index.html。至于登录时,输入完全符合标准的Jabber ID很重要;也就是说,该ID必须包括完整的服务器名称(图2)。
图2:就客户端的Archipel登录而言,你需要在Jabber ID字段中输入完整的登录名(包括域)。
你在这里所需的密码是你在创建管理员帐户时指定的登录信息。Service BOSH字段的URL遵循http://FQDN:5280/http‑bind这种模式。
找到你的虚拟机
Archipel提供了一种整洁的用户界面,显示了需要注意的详细信息。但是如果你没有往自己的环境填充大批的虚拟机管理程序主机和虚拟机,即使再漂亮的界面也不会有太大帮助。在填充环境的***步当中,你得向Archipel注册虚拟机管理程序。为此,点击左下角的+符号,在Archipel XMPP系统上创建一个新的(Jabber)联系人。
联系人的ID在这里是Hypervisor@FQDN;完成后,点击OK。虚拟机管理程序及其化身就会出现在左边的联系人列表中。主机的主视图是Health(健康)视图,这为你实时提供了一系列完整的关键信息(见图3)。
图3:在Archipel的健康摘要中检查虚拟机管理程序的健康状况。
遗憾的是,Archipel还是没有出现在这个虚拟机管理程序的虚拟机上。你有两个选择:***个是可以使用Archipel管理工具,添加一个现有的虚拟机;archipel‑importvirtualmachine脚本在这里大有帮助。该脚本需要两个变量,你得事先找到正确的值。其中一个变量是本地虚拟机管理程序的SQLite 3数据库描述文件,该文件位于/var/lib/archipel/hypervisor.sqlite3.2;另一个变量是你想要导入的虚拟机的UUID。要找出UUID,最容易的办法就是运行virsh Libvirt工具:
virsh ‑‑connect qemu:///system
dominfo ID_of_VM
要开始导入过程,UUID必不可少(代码段4)。虚拟机现在也会出现在左边的联系人列表中;Archipel管理人员在这里就能查看虚拟机的状态,执行生命周期命令,比如start(启动)、stop(停止)和pause(暂停),甚至可以将虚拟机迁移到另一个虚拟机管理程序主机上,或者创建快照。
增加Archipel环境中虚拟机数量的第二个办法就是,直接在Archipel GUI中创建虚拟机。这个过程只需要几个步骤。首先,将所需的安装ISO映像文件存放到/vm/iso目录中。然后在GUI中,点击New VM(新建虚拟机),进入到Definition(定义)选项卡,输入内存、磁盘驱动器和网络所需要的设置(图4)。
图4:配置虚拟机的过程不需要加以说明。
完成这一步后,你需要创建一个新的(虚拟)光盘驱动器,并设置虚拟机,以便从光盘启动。点击Play(播放),即可唤醒虚拟机、触发安装。VNC Console(VNC控制台)选项卡中由JavaScript实现VNC,为管理虚拟机的图形界面提供了一种简洁又吸引人的方法。
与虚拟机对话
值得一提的是,集成聊天表明了Archipel如何一贯立足于XMPP协议上。当然,你可以使用Chat与自身环境中的其他管理员进行联系,但是让人好奇的是,有一个办法可以直接与虚拟机管理程序和虚拟机进行口头上的联系(图5)。
图***rchipel以***人称单数回答问题,非常乐意把虚拟机管理程序和虚拟机健康状况的详细信息告诉你。
Archipel的自然语言词汇相当有限,但是以这种方式进行联系在生产环境下既有趣,又异常有效。如果你问虚拟机how are you(你好),它会以***人称单数回答经过压缩的状态消息。你可以使用任何Jabber客户端,以这种方式进行聊天。Archipel总是很乐意为你提供信息。
代码段4:导入虚拟机
/etc/init.d/archipel stop # Archipel Agent stop
archipel‑importvirtualmachine
‑‑file=/var/lib/archipel/hypervisor.sqlite3
‑‑uuid=UUID ‑‑xmppserver=FQDN ‑‑name=vm1
/etc/init.d/archipel start # Archipel Agent start
管理员可以在GUI中实时查看所有系统及相应操作的日志;你还可以将有选择的消息推送到智能手机上。比如说,为此,你只要将App Notifications应用程序装入到iPhone上,在archipel.conf中输入私密的API密钥。
角色概念、部署和标记
作为一款面向虚拟机的成熟的管理解决方案,Archipel拥有众多功能强大的部署工具:集成的VM Casting协议(原先由Enomalism开发)使用RSS新闻源,为虚拟机管理程序支持设备下载件。这意味着,你可以根据定义的设备,自动部署虚拟机实例和更新版本。
此外,Archipel管理员可以直接从虚拟机本身来创建设备,将结果作为模板来存储,并将它们用于新的虚拟机。Archipel支持XVM2模板格式(这种格式同样由Enomalism首推,由XenServer推广),将来会支持流行的OVF标准。
许多管理工具仅限于这种级别的功能,而Archipel提供了另外几项企业级功能。这些增强的功能包括:一种复杂的角色概念,可用于为不同的用户和角色定义细粒度权限。如果你是拥有众多虚拟机的超大环境下的管理员,会喜欢上标记系统和相应的搜索功能,还会喜欢对联系人(也就是虚拟机管理程序和虚拟机)进行逻辑分组的功能。
通过成批命令(如同时启动、停止或迁移多个虚拟机)控制一整组虚拟机的功能非常有用。Archipel还让你可以事先安排与虚拟机有关的操作,并且使这个过程实现自动化。
集群、地理迁移和计费
为了避免某一台XMPP服务器出现单一故障点,Archipel支持集群机制。实际上,它支持创建多个站点,能够显示虚拟机管理程序主机,还能将驻留在这些主机上的虚拟机迁移到其他地方。路线图还包括针对云计算功能的模块扩展,包括计费模块。
一旦承诺的软件开发工具包(SDK)发布,想必没有什么阻止得了基于Archipel的管理系统的模块化、可定制的开发工作。遗憾的就是,最终版可能要到2011年年底才发布。如果你喜欢尝试,又有空余时间,就可以测试一下,但是你要有耐心,也不能因内容寥寥的说明文档而失去兴趣。有人希望,新兴的Archipel社区会迅速壮大起来,借助外部的贡献,摆脱初期困难。
截至截稿为止,Archipel已经绝不仅仅是面向开源虚拟机管理程序的一款出色的GUI。置身于异构虚拟机环境的管理员会发现,Archipel是其他基于Web的管理工具之外的一个非常值得关注、功能非常强大的选择。
如果你喜欢IRC聊天,会发现社区、甚至开发者本身很快就会提供建议和支持——我在撰写这篇文章时,他们就给予了我大有帮助的一些支持。
【51CTO.com独家译稿,未经授权谢绝转载!合作媒体转载请注明原文出处及出处!】
译文来源: http://www.linux-magazine.com/Issues/2011/130/Archipel?category=13394