用Archipel實現與虛擬機管理程序對話
原創【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)。
#p#
安裝過程
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
make
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,
04 [
05 {4560, ejabberd_xmlrpc, []},
06 {5280, ejabberd_http, [
07 http_bind,
08 http_poll,
09 web_admin
10 ]}
11 ]}.
12 [...]
13 {modules,
14 [
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這種模式。
#p#
找到你的虛擬機
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
list
dominfo ID_of_VM
UUID
要開始導入過程,UUID必不可少(代碼段4)。虛擬機現在也會出現在左邊的聯系人列表中;Archipel管理人員在這里就能查看虛擬機的狀態,執行生命周期命令,比如start(啟動)、stop(停止)和pause(暫停),甚至可以將虛擬機遷移到另一個虛擬機管理程序主機上,或者創建快照。
增加Archipel環境中虛擬機數量的第二個辦法就是,直接在Archipel GUI中創建虛擬機。這個過程只需要幾個步驟。首先,將所需的安裝ISO映像文件存放到/vm/iso目錄中。然后在GUI中,點擊New VM(新建虛擬機),進入到Definition(定義)選項卡,輸入內存、磁盤驅動器和網絡所需要的設置(圖4)。
圖4:配置虛擬機的過程不需要加以說明。
完成這一步后,你需要創建一個新的(虛擬)光盤驅動器,并設置虛擬機,以便從光盤啟動。點擊Play(播放),即可喚醒虛擬機、觸發安裝。VNC Console(VNC控制臺)選項卡中由JavaScript實現VNC,為管理虛擬機的圖形界面提供了一種簡潔又吸引人的方法。
#p#
與虛擬機對話
值得一提的是,集成聊天表明了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