用 CloudStack 配置和管理一個(gè)簡單云
CloudStack 在 IaaS 市場的背景和主要競爭對手
隨著亞馬遜在公有云和 VMware 在私有云方面的成功,各類企業(yè)紛紛在云時(shí)代邁出了自己的步伐,這些企業(yè)希望在自身的計(jì)算資源(主機(jī),網(wǎng)絡(luò),存儲)虛擬化過程中能夠獲得強(qiáng)大功能的同時(shí),又維持相對低廉的成本。這正是 IaaS 供應(yīng)商們發(fā)展的動(dòng)力。
IaaS 提供了對資源的自動(dòng)化管理能力。例如用界面、腳本甚至 Web Service API 實(shí)現(xiàn)對大量硬件、大量虛擬機(jī)的生命周期管理。IaaS 產(chǎn)品面對的是大規(guī)模、可伸縮的云環(huán)境,這是與用手工管理有限資源的方式完全不同的一類系統(tǒng)。
CloudStack 前身為 cloud.com 的商業(yè)化產(chǎn)品,它在 2011 年被 Ctrix 以超過二億美金價(jià)格收購,隨后又在今年被捐獻(xiàn)給 Apache 基金會。這項(xiàng)產(chǎn)品開源的舉措,引起了市場對 IaaS 發(fā)展路線的一些爭議,例如它與另外一個(gè)開源產(chǎn)品 OpenStack 的競爭與合作關(guān)系?
OpenStack 是由 Rackspace 和 NASA 主導(dǎo)開發(fā)的一個(gè) IaaS,它擁有更大的用戶群,包括 HP,IBM,Dell 和 Redhat 等大公司。表 1 列出了 CloudStack 與 OpenStack 的一些對比。
表 1.CloudStack 與 OpenStack 的對比
附:比較數(shù)據(jù)截止至2012年中,對應(yīng)的軟件版本為CloudStack 3和OpenStack Essex。
可以認(rèn)為,在市場上 CloudStack 和 OpenStack 這兩個(gè) IaaS 平臺存在不同的功能、客戶和發(fā)展路線,前者作為曾經(jīng)的商業(yè)軟件,已經(jīng)被證明為可以可靠的用于生產(chǎn)系統(tǒng);而后者,雖則目前缺少廣泛的真實(shí)用戶,卻擁有更多的大公司支持。這是它們顯著的不同。
盡管如此,但從技術(shù)而言,它們背后的源代碼貢獻(xiàn)者并不是一定不同的,經(jīng)常有來自同一家公司的開發(fā)人員為這兩個(gè)開源項(xiàng)目提交代碼。從這個(gè)角度說,兩個(gè)平臺在某一天的合并也不會令人驚奇。
還存在其它眾多的 IaaS 產(chǎn)品(例如 Eucalyptus,Nebula 等),可以在文末的 參考資源中找到一些介紹??傮w而言,這些產(chǎn)品當(dāng)中 CloudStack 和 OpenStack 是特性最為相近、也是最引起爭論的,參考資源中的一篇文章提及到了最近發(fā)生的一個(gè)有趣爭論。
CloudStack 架構(gòu)圖
CloudStack 采用了典型的分層結(jié)構(gòu):客戶端、核心引擎、以及資源層。它面向各類型的客戶提供了不同的訪問方式:Web Console、Command Shell 和 Web Service API。通過它們,用戶可以管理使用在其底層的計(jì)算資源(又分為主機(jī)、網(wǎng)絡(luò)和存儲),完成諸如在主機(jī)上分配虛擬機(jī),配給虛擬磁盤等功能。見圖 1。
圖 1. 系統(tǒng)架構(gòu)圖
虛擬機(jī)如果使用 Xen 和 KVM,需要安裝 CloudStack Agent 來支持其與管理服務(wù)器的交互。而管理服務(wù)器和 Xen Server 交互則是靠 XAPI,和 vCenter、ESX 交互靠 HTTP。
當(dāng)部署 CloudStack 時(shí),需要了解它的層次結(jié)構(gòu)和存儲管理,見圖 2。
圖 2. 部署圖
Zone:Zone 對應(yīng)于現(xiàn)實(shí)中的一個(gè)數(shù)據(jù)中心,它是 CloudStack 中最大的一個(gè)單元。
Pod:Pod 對應(yīng)著一個(gè)機(jī)架。同一個(gè) pod 中的機(jī)器在同一個(gè)子網(wǎng)(網(wǎng)段)中。
Cluster:Cluster 是多個(gè)主機(jī)組成的一個(gè)集群。同一個(gè) cluster 中的主機(jī)有相同的硬件,相同的 Hypervisor,和共用同樣的存儲。同一個(gè) cluster 中的虛擬機(jī),可以實(shí)現(xiàn)無中斷服務(wù)地從一個(gè)主機(jī)遷移到另外一個(gè)上。
Host:Host 就是運(yùn)行虛擬機(jī)(VM)的主機(jī)。
即從包含關(guān)系上來說,一個(gè) zone 包含多個(gè) pod,一個(gè) pod 包含多個(gè) cluster,一個(gè) cluster 包含多個(gè) host。
CloudStack 中存在兩種存儲:
Primary storage:一級存儲與 cluster 關(guān)聯(lián),它為該 cluster 中的主機(jī)的全部虛擬機(jī)提供磁盤卷。一個(gè) cluster 至少有一個(gè)一級存儲,且在部署時(shí)位置要臨近主機(jī)以提供高性能。
Secondary storage:二級存儲與 zone 關(guān)聯(lián),它存儲模板文件,ISO 鏡像和磁盤卷快照。
模板:可以啟動(dòng)虛擬機(jī)的操作系統(tǒng)鏡像,也包括了諸如已安裝應(yīng)用的其余配置信息。
ISO 鏡像:包含操作系統(tǒng)數(shù)據(jù)或啟動(dòng)媒質(zhì)的磁盤鏡像。
磁盤卷快照:虛擬機(jī)數(shù)據(jù)的已儲存副本,能用于數(shù)據(jù)恢復(fù)或者創(chuàng)建新模板。#p#
安裝 CloudStack
環(huán)境準(zhǔn)備
- 一個(gè)完整的 CloudStack 環(huán)境包括兩部分:
- 管理服務(wù)器(Management Server)
- 虛擬機(jī)管理器 (Hypervisor)
附:通常對 CloudStack 的 hypervisor 也有另外的稱呼,例如主機(jī)(host),代理(agent)等。本文統(tǒng)一為 hypervisor。
在本文的安裝步驟中,所要配置的為一個(gè)簡單網(wǎng)絡(luò),即所有被管理的虛擬機(jī)都位于一個(gè)網(wǎng)段。相應(yīng)的硬件如下:
表 2.軟硬件環(huán)境
本次安裝中 CloudStack 的版本為:Red Hat Enterprise Linux/CentOS 6.2
Hypervisor 為 KVM。
管理服務(wù)器需要更多的存儲空間是因?yàn)?NFS 也建在該機(jī)上。更多的詳細(xì)安裝需求可以參閱 CloudStack 官網(wǎng)的指南。這里需要著重列出的問題為:
Q1:官網(wǎng)的安裝要求中哪些軟硬件因素容易導(dǎo)致 CloudStack 的安裝失???
Hypervisor 所在的主機(jī),要求 CPU 和主板支持硬件虛擬化(本人的機(jī)器是 DELL 臺式機(jī),需要在主板的 BIOS 中設(shè)置 Intel-VT 為 enable)。
操作系統(tǒng)必須是 64 位的,推薦 centos 6.2(當(dāng)前最新的 CloudStack 3 支持 6.2)。如果使用 5.5 或者 6.0 版本,一定要選擇匹配的 CloudStack 安裝包。Ubuntu 目前只有運(yùn)行在 10.04 平臺上的發(fā)行版,且該 release 不是最新的 CloudStack。此處強(qiáng)烈建議新用戶給 Managment Server 和 Hypervisor 所在的兩臺主機(jī)選擇一樣的操作系統(tǒng)(推薦 centos/redhat)和一樣版本的 CloudStack 軟件,同時(shí)注意 OS 一定是要被官方 release 宣稱支持,這樣能避免走不少彎路。例如確實(shí)也存在有人能成功在 Ubuntu 12.04 或 centos 6.3(官方 2012 年 9 月尚未宣稱支持)上部署 CloudStack,但付出精力較大。
Hypervisor 的主機(jī)不能有任何正在運(yùn)行的虛擬機(jī),否則在后續(xù)的 add host 操作中會遇到失敗。最佳的建議是 hypervisor 主機(jī)上的操作系統(tǒng)為全新安裝,且沒有部署任何其余虛擬機(jī)。
無論是管理服務(wù)器還是 hypervisor 所在主機(jī),都需要以 root 登錄進(jìn)行 CloudStack 安裝。
Management Server 和 Hypervisor 主機(jī)必須是有獨(dú)立靜態(tài) IP 的主機(jī)。否則后續(xù)安裝因?yàn)?IP 地址變化會導(dǎo)致 service 狀態(tài)異常。
CentOS 安裝后的默認(rèn)網(wǎng)絡(luò)配置為 DHCP,需修改為手工分配 IP,這步操作要在 cloud-server 和 cloud-agent 兩臺機(jī)器都進(jìn)行:
點(diǎn)擊桌面右上角的網(wǎng)絡(luò)圖標(biāo),編輯網(wǎng)絡(luò):
圖 3
Method 原來為“DHCP”,改成設(shè)置為“Manual”,然后輸入靜態(tài) IP 地址、掩碼、網(wǎng)關(guān)、DNS 服務(wù)器信息。
圖 4
安裝 Management Server
以 root 身份登錄 cloud-server.squirrel.org。
運(yùn)行“hostname – fqdn”,檢查其返回的格式必須是包括域名的全稱(例如 cloud-server.squirrel.org)。Hostname 最好是在安裝 centos 時(shí)即設(shè)置好,否則需要在 /etc/hosts 和 /etc/sysconfig/network 兩處文件中同時(shí)修改才可以永久生效。
設(shè)置 SELinux。在 /etc/selinux/config 中修改“SELINUX=enforcing”為“SELINUX=permissive ”,并在 shell 中運(yùn)行“setenforce permissive ”令其立即生效。
進(jìn)入下載并解壓好的 CloudStack 安裝目錄 ( 我這里是 /home/squirrel/mybox/cloud/CloudStack-oss-3.0.2-1-rhel6.2),運(yùn)行命令“./install.sh”,選擇“M”安裝 Management Server 軟件。
運(yùn)行下面命令啟動(dòng) NFS 和 rpcbind 服務(wù),并設(shè)置為開機(jī)運(yùn)行:
- # service rpcbind start
- # service nfs start
- # chkconfig nfs on
- # chkconfig rpcbind on
再次運(yùn)行命令“./install.sh”,選擇“D”安裝數(shù)據(jù)庫 mysql。
編輯 /etc/my.cnf,在 [mysqld] 下面加入內(nèi)容:
- innodb_rollback_on_timeout=1
- innodb_lock_wait_timeout=600
- max_connections=350
- log-bin=mysql-bin
- binlog-format = 'ROW'
重啟數(shù)據(jù)庫后,設(shè)置 root 用戶密碼。
- # service mysqld restart
- # mysql -u root
- mysql> SET PASSWORDPASSWORD = PASSWORD('<password>');
- mysql> exit
運(yùn)行 CloudStack 腳本讓其自動(dòng)配置數(shù)據(jù)庫:
- #cloud-setup-databases cloud:<dbpassword>@localhost \
- --deploy-as=root:<password>
即表示以 root 用戶身份來生成數(shù)據(jù)庫,該數(shù)據(jù)庫屬于新建的 cloud 用戶(密碼 dbpassword 可以留空)。
最后,下面的命令將完成對操作系統(tǒng) iptables、sudoers 的設(shè)置(CloudStack 本身有安全性方面的要求,不是無限暴露給網(wǎng)絡(luò),同時(shí)又需要一些管理權(quán)限來運(yùn)行自身服務(wù),因此要做這兩項(xiàng)的設(shè)置),并啟動(dòng)管理服務(wù)器:
- #cloud-setup-management
使用“service cloud-management status”查看運(yùn)行狀態(tài)。
Q2:第 2 步中運(yùn)行“hostname – fqdn”命令時(shí),要保證機(jī)器是聯(lián)網(wǎng)狀態(tài),才能返回正確的主機(jī)名稱。
Q3:如果后續(xù)打算把 hypervisor 也安裝在 management server 的同一臺主機(jī)上,需要在 /etc/sysconfig/network-scripts/ifcfg-<yourPhysicalDeviceName> 中配置出對應(yīng)的信息。
同時(shí),如果該 hypervisor 為 KVM,需要修改 /etc/sudoers ,加入如下行:
- Defaults:cloud !requiretty
配置 NFS
前面講過,CloudStack 需要兩類存儲(primary storage 和 secondary storage)來支持它的 cluster 和 host,本節(jié)中由 NFS 來提供這兩個(gè)存儲,因此前述步驟中要啟動(dòng) NFS 服務(wù)。同時(shí)為了方便起見,NFS Server 也由 cloud-server.squirrel.org 充當(dāng)。
以 root 身份登錄 cloud-server.squirrel.org。
創(chuàng)建兩個(gè)目錄,分別作為一級和二級存儲:
- # mkdir -p /export/primary
- # mkdir -p /export/secondary
編輯文件 /etc/exports ,加入:
- /export *(rw,async,no_root_squash)
然后導(dǎo)出 /export 目錄:
- # exportfs -a
編輯 /etc/sysconfig/nfs 文件,取消如下行的注釋符號(或者在文件末尾直接添加下列行):
- LOCKD_TCPPORT=32803
- LOCKD_UDPPORT=32769
- MOUNTD_PORT=892
- RQUOTAD_PORT=875
- STATD_PORT=662
- STATD_OUTGOING_PORT=2020
編輯防火墻設(shè)置文件 /etc/sysconfig/iptables,在 input 部分最上面加入如下的規(guī)則:
- -A INPUT -m state --state NEW -p udp --dport 111 -j ACCEPT
- -A INPUT -m state --state NEW -p tcp --dport 111 -j ACCEPT
- -A INPUT -m state --state NEW -p tcp --dport 2049 -j ACCEPT
- -A INPUT -m state --state NEW -p tcp --dport 32803 -j ACCEPT
- -A INPUT -m state --state NEW -p udp --dport 32769 -j ACCEPT
- -A INPUT -m state --state NEW -p tcp --dport 892 -j ACCEPT
- -A INPUT -m state --state NEW -p udp --dport 892 -j ACCEPT
- -A INPUT -m state --state NEW -p tcp --dport 875 -j ACCEPT
- -A INPUT -m state --state NEW -p udp --dport 875 -j ACCEPT
- -A INPUT -m state --state NEW -p tcp --dport 662 -j ACCEPT
- -A INPUT -m state --state NEW -p udp --dport 662 -j ACCEPT
重啟防火墻,并保存修改:
- # service iptables restart
- # service iptables save
在管理服務(wù)器(cloud-server.squirrel.org)和 hypervisor 主機(jī)(cloud-agent.squirrel.org)上,修改文件 /etc/idmapd.conf,加入如下內(nèi)容:
- Domain = squirrel.org
重啟管理服務(wù)器的主機(jī),然后測試并掛載 NFS。在 cloud-agent.squirrel.org 機(jī)器建立目錄 /primarymount,運(yùn)行如下命令并確認(rèn)其是否成功:
- mount -t nfs 192.168.1.4:/export/primary /primarymount
Q4:在 KVM hypervisor 機(jī)器運(yùn)行 showmount 命令時(shí),如果采用的是 hostname,例如“showmount -e cloud-server.squirrel.org”,并且失敗,報(bào)錯(cuò)“clnt_create: RPC: Program not registered”,那么可以嘗試用 IP 代替:“showmount -e 192.168.1.4”?;蛘呔庉嫳緳C(jī)的 /etc/hosts,加入對方 server 的 IP- 主機(jī)名映射(但這樣失去了靈活性):
- 192.168.1.4 cloud-server.squirrel.org
Q5:第 5 步中新加入規(guī)則在防火墻配置文件中的次序?qū)?NFS share 成功很重要,一定要加入 INPUT 區(qū)的最開始部分,即系統(tǒng)中原有的 input 項(xiàng)必須在新加入行的后面,否則可能在運(yùn)行 showmount -e 192.168.1.4 時(shí)會出現(xiàn)
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) 的錯(cuò)誤。
Q6:出現(xiàn)錯(cuò)誤 mount.nfs: access denied by server while mounting 192.168.1.4:/export/primary 的處理?
有時(shí)當(dāng)運(yùn)行“showmount -e cloud-server.squirrel.org”有“clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)”錯(cuò)誤提示,然后 mount nfs 失敗,會出現(xiàn)標(biāo)題上的錯(cuò)誤信息,這可能跟 NFS 的建立方式有關(guān),有時(shí)也跟防火墻有關(guān)。需要檢查 log:
- tail -200 /var/log/messages
- refused mount request from 192.168.1.5 for /export/primary (/export): illegal port 1024
那么考慮嘗試如下方法:
- vi /etc/exports
在原來的那一行上修改如下:
- /export *(rw,async,insecure,no_root_squash)
然后:
- exportfs -rv
- service nfs restart
在 cloud-agent.squirrel.org 上重新運(yùn)行命令:
- mount -t nfs 192.168.1.4:/export/primary /primarymount
沒有提示,應(yīng)該成功了,可以確認(rèn):
- mount |grep primary
- OK !
準(zhǔn)備系統(tǒng)虛擬機(jī)模板
系統(tǒng)虛擬機(jī)模板(System VM Template)保存在二級存儲上,是用于創(chuàng)建云平臺上的系統(tǒng)虛擬機(jī)的。
以 root 身份登錄 cloud-server.squirrel.org。
這里下載的是 KVM 模板,運(yùn)行如下命令安裝:
- # /usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt
- -m /export/secondary
- -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2
- -h kvm -F
依賴于網(wǎng)絡(luò)速度,這個(gè)過程所需時(shí)間在幾分鐘到數(shù)小時(shí)(筆者的下載速度顯示在 2M~3M/s,三分鐘左右完成全部下載和安裝)。
Q7:這里有兩點(diǎn)需要注意:
- 磁盤分區(qū)必須夠大。
- 虛擬機(jī)模板的下載安裝這步不可省略,否則后面在控制臺添加二級存儲時(shí)會失敗。
系統(tǒng)虛擬機(jī)不同于普通的 hypervisor host 上的虛擬機(jī),它是 CloudStack 自帶的用于完成自身系統(tǒng)相關(guān)的一些任務(wù)的 vm。它有兩種:
- 二級存儲虛擬機(jī)(Secondary Storage VM):下載上傳模板、下載鏡像,第一次創(chuàng)建虛擬機(jī)時(shí)從二級存儲拷貝模板到一級存儲并且自動(dòng)創(chuàng)建快照等。
- 控制臺代理虛擬機(jī)(Console Proxy VM):用于在 web 界面上展示控制臺。
需要注意的是,系統(tǒng)虛機(jī)為 Debian 32 位操作系統(tǒng),CloudStack 管理員可以用 SSH 登錄。同時(shí),能在主機(jī)的 /var/lib/libvirt/images 查看到它們,如圖 5:
圖 5.查看已經(jīng)安裝的 VMs
#p#
安裝 KVM Hypervisor
以 root 身份登錄 hypervisor 主機(jī) cloud-agent.squirrel.org。
確保 hostname 是完整帶域名的,修改方法同管理服務(wù)器步驟 1。
運(yùn)行“yum erase qemu-kvm”刪除 OS 自帶的 qemu-kvm。
進(jìn)入下載并解壓好的 CloudStack 安裝目錄,運(yùn)行命令“./install.sh”,選擇“A”安裝 agent。
安裝完畢后,運(yùn)行下面命令啟動(dòng) nfs 和 rpcbind 服務(wù),并設(shè)置為開機(jī)運(yùn)行:
- # service rpcbind start
- # service nfs start
- # chkconfig nfs on
- # chkconfig rpcbind on
Q8:如何處理因?yàn)闆]有 enable VT 而導(dǎo)致 CloudStack Agent 啟動(dòng)不成功?
注意檢查 log:/var/log/cloud/agent/。如果是因?yàn)?BIOS 的 VT 沒有打開而引起的啟動(dòng)失敗,則需要在打開 VT 支持后重新安裝 agent。運(yùn)行命令:
- # service cloud-agent status
若顯示:
- cloud-agent (pid 4188) is running...
則說明已經(jīng)成功運(yùn)行了。
安裝 NTP,時(shí)間同步
運(yùn)行“yum install ntp”安裝 NTP 服務(wù)。
編輯配置文件 /etc/ntp.conf,加入如下服務(wù)器:
- server 0.xenserver.pool.ntp.org
- server 1.xenserver.pool.ntp.org
- server 2.xenserver.pool.ntp.org
- server 3.xenserver.pool.ntp.org
重啟 NTP 并設(shè)置為開機(jī)自動(dòng)運(yùn)行:
- # service ntpd restart
- # chkconfig ntpd on
在 Management Console 中配置虛擬化資源
當(dāng)上面的管理服務(wù)器與 hypervisor 安裝好后,可以登錄進(jìn) CloudStack 的 UI console 進(jìn)行資源的配置與部署。
和幾個(gè)競爭對手——例如 Eucalyptus 從一開始就對 AWS 的兼容,OpenStack 對松耦合組件的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)——相比,CloudStack 的特點(diǎn)之一就是有最友好的用戶界面,即控制管理臺。
首先打開瀏覽器,登錄 URL:
- http://192.168.1.4:8080/client
- 用戶名 / 密碼:admin/password
選擇“Continue with basic installation”,接著修改 CloudStack 管理員密碼。
圖 6.添加 zone
圖 7.添加 pod
圖 8.添加客戶機(jī)網(wǎng)絡(luò)
圖 9.添加 cluster
圖 10.添加 host
圖 11.添加一級存儲
圖 12.添加二級存儲
最后點(diǎn)擊“Launch”啟動(dòng) CloudStack 云平臺,開始初始化。
圖 13.初始化中
直到出現(xiàn)成功信息。這樣一個(gè)簡單的云環(huán)境就搭建完畢,我們隨后可以在這個(gè)控制臺執(zhí)行計(jì)算資源的管理任務(wù)了。下面兩圖為控制臺顯示界面。
圖 14.Overview
圖 15.Infrastructure
Q9:有時(shí)因?yàn)楦鞣N原因,例如在控制臺錯(cuò)誤的配置了一些數(shù)據(jù),需要重新初始化時(shí),可以刪除 CloudStack 的數(shù)據(jù)庫,步驟如下:
在命令行下:
- mysql –u root <password>
- mysql> drop database cloud; drop database cloud_usage;
- #cloud-setup-databases cloud:<dbpassword>@localhost --deploy-as=root:<password>
- #cloud-setup-management
然后重復(fù)本節(jié)的操作。
附:CloudStack 的 Web Console 界面是可以定制化的。
#p#
使用 CloudStack API
如同 AWS API 一樣,CloudStack API 也是基于 Web Service,可以使用任何一種支持 HTTP 調(diào)用的語言(例如 Java,PHP)編寫代碼。
調(diào)用代碼(caller)首先需要在管理服務(wù)器進(jìn)行認(rèn)證。目前 CloudStack 采用兩種認(rèn)證方式:
- Session 認(rèn)證:通過 login API,獲得一個(gè) JSESSIONID cookie 和一個(gè) SESSIONKEY token。
- API Key 認(rèn)證。
本文代碼示例采用 API Key 進(jìn)行認(rèn)證。其過程如下:
管理員給調(diào)用者分配 API Key 和 Security Key(由 Admin 通過 web console 或者用 registerUserKeys在程序中生成)。
調(diào)用者用 Security Key 以 HMAC SHA-1 哈希算法對 API Key + Command String 生成簽名。
最后的 API Request=Base URL+API Path+Command String+Signature。
下面具體為 admin 用戶生成兩個(gè) key:
首先登陸管理臺:http://192.168.1.4:8080/client。
點(diǎn)擊 accounts,選擇 admin,點(diǎn)擊 users tab,找到 admin。
可以看到 API Key 和 Security Key,如果兩個(gè)框沒有值,點(diǎn)擊工具欄的鑰匙小圖標(biāo),“Generate Keys”,如圖 16。
圖 16. 生成 API Key 和 Security Key
兩個(gè) Key 的生成結(jié)果如下:
表 3.Admin 用戶的 API Key 和 Security Key
接下來用 CloudStack 的 Restful API 生成一個(gè)虛擬機(jī)。其調(diào)用 URL 如下:
- http://192.168.1.4:8080/client/api?command=deployVirtualMachine&\
- serviceofferingid=1&templateid=4&zoneid=1
command 參數(shù)中的內(nèi)容可以參閱 API Reference: CloudStack,此處不贅述。需要注意的是,URL 當(dāng)中每個(gè)參數(shù)是按照字母順序排列的,這是生成簽名必要的。
下面演示如何生成簽名并組裝一個(gè)完整的 URL。
首先在此處下載一段 perl 腳本,我們要利用它來幫助生成簽名。將它放入合適的目錄,然后在命令行下鍵入:
- $ ./generate-url.pl –f 1 -u
- "command=deployvirtualmachine&serviceofferingid=1&templateid=4\
- &zoneid=1" -a TEBBqfXkV-9blsxpkjFLAxNUmnvMsFEq7WKwPOMT_nuce69bmcElXz1\
- izsN1qJFK58ye5U5hWWN2ckscsysodg – s 7VJx0QfxvJQZBYZbLdct2QFck8lV6hwLMvo9\
- YCJ97pVou8f_aDSHdhEqBaY2CtFI6_MULP0eYqr_Z7D2Jon8nQ
-f 后面數(shù)字 1 是生成 url 的意思,-a 后面是 API Key,-s 后面是 Security Key。-u 后面的 command 參數(shù)都已經(jīng)修改為小寫字母(此步不可省略)。命令運(yùn)行完畢生成一段字符串:
- http://*.*.*.*/client/api?command=deployvirtualmachine&serviceofferingid=1\&zoneid=1&templateid=4&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4\
- GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG\
- 6EosCcRGvO7OWU%3D
然后把 IP 替換入上面 url,并把 command 中的小寫字母還原成原來正確的 API 名字,結(jié)果如下:
- http://192.168.1.4:8080/client/api?command=listVirtualMachines&account=\admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-o\
- NxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=i5%2FQxBf7FIGc6GvAfNcpFnVKpEw%3D
把該 URL 鍵入瀏覽器,可以執(zhí)行成功,返回一段 XML response:
- <deployvirtualmachineresponse cloud-stack-version="3.0.2.20120506223416">
- <id>d29a98f2-610c-4e4e-9331-18c133c5bdb3</id>
- <jobid>a5c9f26d-98be-4a81-9883-da9dd8dfda47</jobid>
- </deployvirtualmachineresponse>
如果回到控制臺界面的 instance tab,可以看到一個(gè)新的 vm instance 被創(chuàng)建。
用同樣的方法,使用如下命令,列舉出 Admin 用戶下的全部虛擬機(jī)。
- http://192.168.1.4:8080/client/api?command=listVirtualMachines&account=
- admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-\
- oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG6EosCcRGvO7OWU%3D
Q10:CentOS 需要安裝 perl 開發(fā)環(huán)境才能運(yùn)行上面的腳本。如果在命令執(zhí)行過程中出現(xiàn)類似 cannot locate WWW/Mechanize 類的錯(cuò)誤,需要先安裝 cpan:
- yum install cpan
然后用 cpan 安裝缺少的 module:
- cpan install WWW::Mechanize
后面缺少哪個(gè) module,就用 cpan 安裝該 module,直到所使用的包都被裝入。
總體而言,CloudStack 的 API 提供了很靈活和強(qiáng)大的功能,而且通過 CloudBridge,更是實(shí)現(xiàn)了與亞馬遜 EC2 API 的兼容。
現(xiàn)狀與展望
CloudStack 目前在 Apache 站點(diǎn)的更新也很快,最新的 4.0 也已經(jīng)發(fā)布,它提供了 VLAN 間路由(VPC)能力、給管理資源保存元數(shù)據(jù)、增加新類型存儲、和支持 Ubuntu 12.04 和 REHL6.3 等新功能。
在國內(nèi),像中國電信這類大型企業(yè),還有一些中小型企業(yè),都在迅速的使用 CloudStack 來構(gòu)建它們的公共云或私有云、混合云平臺。在這些用戶的實(shí)踐中,CloudStack 對豐富種類的 Hypervisor、存儲類型的支持、強(qiáng)大的伸縮能力和網(wǎng)絡(luò)功能、良好的安全設(shè)計(jì)、靈活的 API 調(diào)用都令人留下深刻印象。
與 OpenStack 的競爭會是接下來幾年 CloudStack 無法回避的問題,相對于對手的后發(fā)優(yōu)勢,CloudStack 更強(qiáng)調(diào)成熟的產(chǎn)品應(yīng)用。但隨著自身的開源,將來的 IaaS 市場也許會在求同方面走的更遠(yuǎn)。