原文鏈接:http://os.51cto.com/art/201111/302661.htm
OpenStack詳細解讀:定義,好處與使用實例
【51CTO精選譯文】OpenStack是一個旨在爲公共及私有云的建設與管理提供軟件的開源項目。它的社區擁有超過130家企業及1350位開發者,這些機構與個人都將OpenStack作爲基礎設施即服務(簡稱IaaS)資源的通用前端。OpenStack項目的首要任務是簡化雲的部署過程併爲其帶來良好的可擴展性。本文希望通過提供必要的指導信息,幫助大家利用OpenStack前端來設置及管理自己的公共雲或私有云。
內容詳解
OpenStack包括數個由社區維護的項目,具體情況我將在後文中詳加闡述。
OpenStack Compute (Nova)是一套控制器,用於爲單個用戶或使用羣組啓動虛擬機實例。它同樣能夠用於爲包含着多個實例的特定項目設置網絡。OpenStack Compute在公共雲處理方面堪與Amazon EC2相提並論;而在私有云方面也毫不遜色於VMware的產品。在公共雲中,這套管理機制將提供預製的鏡像或是爲用戶創建的鏡像提供存儲機制,這樣用戶就能夠將鏡像以虛擬機的形式啓動。
OpenStack 對象存儲(Swift)是一套用於在大規模可擴展系統中通過內置冗餘及容錯機制實現對象存儲的系統。這些對象能夠通過一個REST API或是像Cyberduck這樣可以對接對象存儲API的客戶端加以恢復。
OpenStack鏡像服務 (Glance)是一套虛擬機鏡像查找及檢索系統。它能夠以三種形式加以配置:利用OpenStack對象存儲機制來存儲鏡像;利用Amazon的簡單存儲解決方案(簡稱S3)直接存儲信息;或者將S3存儲與對象存儲結合起來,作爲S3訪問的連接器。OpenStack鏡像服務支持多種虛擬機鏡像格式,包括VMware(VMDK)、Amazon鏡像(AKI、ARI、AMI)以及VirtualBox所支持的各種磁盤格式。鏡像元數據的容器格式包括Amazon的AKI、ARI以及AMI信息,標準OVF格式以及二進制大型數據。
最近根據投票結果納入“核心”項目集團的新成員是一項代號爲“Keystone”的身份服務以及一套基於Django的儀表板接口,後者的代號爲“Horizon”。本文中的儀表板示例也來源於這一項目。
初窺門徑
嘗試探索OpenStack Compute最爲合適的起點莫過於devstack.org站點,它爲開發人員或是概念驗證者們提供了一套腳本化安裝方案。來自docs.openstack.org的OpenStack入門教程同樣具備一步步詳細的指示,幫助我們在Ubuntu 11.10中設定OpenStack Compute、鏡像服務以及多合一對象存儲的安裝。如果大家擁有一臺自己的服務器,並打算利用它搞一些概念驗證工作,那麼 點擊此處 可以獲取一套專門供裸機使用的StackOps安裝系統。有了它,我們可以通過CD或者USB記憶棒完成OpenStack的安裝。
各位還可以利用docs.openstack.org上提供的對象存儲管理員指南或者OpenStack Compute管理員指南中的安裝說明,設置出生產級別的OpenStack對象存儲集羣或是OpenStack Compute雲。
OpenStack的使用
安裝結束之後,接下來我們就要看看如何利用部分安全功能,通過儀表板接口或是命令行啓動OpenStack Compute實例。我還將展示面向對象存儲的、用於通過塊存儲備份鏡像或者視頻的接口。
登錄到儀表板接口
OpenStack的儀表板是安裝在運行着Nova API服務的節點中的。通過這套儀表板,大家應該可以看出Nova API實例的URL與有效儀表板的證書一樣,也包括用戶名及密碼。
只要有了用戶名與密碼,大家可以利用OpenStack儀表板實現許多功能。首先,通過雲管理員分配給我們的用戶名及密碼登錄到儀表板中。
登錄之後,可以看到服務器使用量與每臺服務器的當前狀態,如圖一。
大家也可以點擊查看哪些服務器處於終止狀態。請注意,這裏的正常運行時間並不會顯示每套單獨服務器的狀態。
用戶儀表板左側的菜單提供的是我們所能執行的儀表板操作選項,所發出的命令通過API傳遞至終端。系統面板(也就是頁面最上方的菜單)提供另一套視圖,使得管理員能夠監控使用狀態、檢查雲中正在運行的服務並管理用戶及項目的配額。
如何在儀表板中啓用實例
現在,大家已經初步熟悉了儀表板的總體佈局,接下來就該利用自己的雲啓動一套新的虛擬機系統,也就是鏡像實例。一般來說,我們的雲管理員應該已經上傳了啓動所必需的鏡像。如果沒有,我將在後文中討論如何創建自定義鏡像。要想啓動鏡像,首先找到儀表板中的鏡像選項,在選定所要啓動的鏡像類型後點擊啓用按鈕。圖二中顯示了可用的幾款Ubuntu服務器鏡像以及一款Windows鏡像。
如果大家通過點擊啓動按鈕完成鏡像啓動工作,那麼接下來將會看到如圖三所示的啓動實例窗口。
此窗口包含了爲服務器命名、在啓動中插入某些用戶數據、選擇CPU數量、硬盤空間以及RAM數量等功能,設置完成後點擊“啓動實例”。現在我們已經擁有了一套虛擬服務器,無論是SSH還是正常使用都沒問題,就像普通的服務器一樣。但同時我們也省去了大量組裝、部署、佈線等常規服務器所帶來的諸多麻煩。
如何使用虛擬機實例
所謂實例,是指具備特殊規格內存、硬盤空間以及CPU的虛擬機。在OpenStack Compute的輔助下,我們通過對雲的調整及啓用,可以讓用戶實現啓動實例、重啓實例以及保存快照以備日後再利用等工作。
通過觀察用戶儀表板中的實例,我們能夠清楚地看到自己剛剛所啓動的實例。對於每個實例,我們都有數個操作選項,例如終止實例、重新啓動、保存快照等等——這些操作的實現都依靠OpenStack Compute API 1.1的支持。我們也可以打開一個控制檯窗口或是查看某個處於儀表板內的實例的日誌文件。
爲鏡像添加安全密鑰
安全功能是我們控制發往自己虛擬機訪問的必要保障,OpenStack通過兩種認證機制管理客戶端工具。一種是儀表板自帶的用戶名及密碼機制;另一種則是“密鑰對”,密鑰爲用戶的實例提供安全驗證。只有當用戶能夠同時通過以上兩種認證過程時,才能夠獲得在OpenStack雲中訪問目標實例的權限。密鑰對(包括公共密鑰對與私有密鑰對)在我們啓用實例時可以作爲非常有用的參數。舉例來說,要啓動一套實例並加以訪問,我們必須利用SSH創建一套密鑰對,這樣就能夠識別通過SSH訪問該實例的用戶。
OpenStack儀表板讓我們能夠在密鑰對選項中通過點擊創建新密鑰對管理密鑰。在下圖當中,大家可以爲自己的密鑰對命名,然後點擊創建密鑰按鈕。創建新密鑰對的過程包括登記公共密鑰及下載私有密鑰(一個.pem文件)兩部分。由於這一創建工作完全是爲我們的使用服務,因此請務必像對待其它SSH私有密鑰一樣妥善加以保管。詳見圖四。
利用工具爲自動化腳本啓動實例
我們可以輕鬆地通過儀表板啓動實例,但更多時候大家也許希望能夠利用命令行加以啓動,以使用某些腳本。這裏只要安裝python-nova客戶端,我們就能在命令行中獲得可以使用Compute API接口的nova shell命令。安裝客戶端,然後提供用戶名及密碼,設置適當的環境變量,這樣我們就擁有了在命令行中向雲端發送命令的能力。
安裝python-nova客戶端, 點此下載 原始碼,並將其安裝於大家常用的python環境中。
$ curl -O http://pypi.python.org/packages/source/p/python-novaclient/pythonnovaclient-2.6.3.tar.gz $ tar -zxvf python-novaclient-2.6.3.tar.gz $ cd python-novaclient-2.6.3 $ sudo python setup.py install
現在大家已經安裝了python-nova客戶端,輸入以下內容以確認安裝:
$ nova help
此時大家應該看到一個nova命令行客戶端的所有命令與參數列表。通過設置環境變量所需的參數,我們可以在命令行上快速執行這些命令。爲nova命令添加--username,或者將這些參數設爲環境變量:
export NOVA_USERNAME=joecoolexport NOVA_API_KEY=coolwordexport NOVA_PROJECT_ID=coolu
項目ID與Tenant一樣,都依賴於我們所使用的驗證服務。當雲管理員設置OpenStack時,應該注意爲其分配一個類似NOVA_URL這樣能夠爲nova所辨識的驗證端點。
export NOVA_URL=http://hostname:5000/v2.0export NOVA_VERSION=1.1
在建立自己的雲之前,我們需要通過向鏡像服務查詢哪些配置類型可以奏效,來了解什麼樣的鏡像能夠被正確使用。鏡像服務有點像雲領域的iTunes:我們可以在利用自己常用的鏡像在雲中創建實例之前,先在列表中查看哪些鏡像適用。大家可以利用以下命令獲得鏡像信息列表,包括名稱、狀態以及ID:
$ nova image-list
以下是返回信息的示例:
+----+-------------------------------------------------------+--------+ | ID | Name | Status | +----+-------------------------------------------------------+--------+ | 1 | aki-tty | ACTIVE | | 2 | ari-tty | ACTIVE | | 3 | ami-tty | ACTIVE | | 6 | CentOS_5.4_x64 | ACTIVE | | 14 | maverick-kernel | ACTIVE | | 15 | maverick | ACTIVE | | 20 | ubuntu-kernel | ACTIVE | | 21 | ubuntu-ramdisk | ACTIVE | | 22 | ubuntu | ACTIVE | | 24 | CentOS_5.6_x64_v5.7.14_Dev1 | ACTIVE | +----+-------------------------------------------------------+--------+
接下來大家需要了解其中每一項的相對大小,這裏使用flavor-list參數。
$ nova flavor-list +----+-----------+-----------+------+----------+-------+------------+----------+ | ID | Name | Memory_MB | Swap | Local_GB | VCPUs | RXTX_Quota | RXTX_Cap | +----+-----------+-----------+------+----------+-------+------------+----------+ | 1 | m1.tiny | 512 | | 0 | | | | | 2 | m1.small | 2048 | | 20 | | | | | 3 | m1.medium | 4096 | | 40 | | | | | 4 | m1.large | 8192 | | 80 | | | | | 5 | m1.xlarge | 16384 | | 160 | | | | | 89 | Boom | 2 | | 20 | | | | +----+-----------+-----------+------+----------+-------+------------+----------+
我們也可以使用grep來縮小查找結果列表,舉例來說,通過以下命令查看CentOS鏡像的信息:
$ nova image-list | grep 'CentOS' | 6 | CentOS_5.4_x64 | ACTIVE | | 24 | CentOS_5.6_x64_v5.7.14_Dev1 | ACTIVE |
在反饋得出的信息方面,我們可以選擇圖像與描述相結合的方式創建自己的虛擬服務器,並啓動實例。
要啓動服務器,首先選擇一個鏡像,找出該鏡像及相關描述的ID,並對其進行調整;接下來利用ID創建命令。根據上文所給出的資料,我們可以看到Ubuntu Maverick鏡像的ID爲15。如果我們實際只打算搭建一個2GBy內存、20GB硬盤空間的小型服務器,那麼可以選擇m1.small——因爲它所使用的ID爲2.將這些參數添加進boot命令中,這樣新建虛擬服務器的工作就完成了。
$ nova boot --flavor=2 --image=15 testserver +-----------+--------------------------------------+ | Property | Value | +-----------+--------------------------------------+ | adminPass | **************** | | created | 2011-09-01T21:40:41Z | | flavor | m1.small | | hostId | | | id | 1805 | | image | maverick | | metadata | {} | | name | testserver | | progress | 0 | | status | BUILD | | updated | 2011-09-01T21:40:41Z | | uuid | ce044452-f22e-4ea4-a3ec-d1cde80cf996 | +-----------+--------------------------------------+
現在,大家使用nova list命令即可查看自己在雲中所部署的新服務器:
$ nova list +------+------------+--------+--------------------------------+ | ID | Name | Status | Networks | +------+------------+--------+--------------------------------+ | 1805 | testserver | ACTIVE | private=10.4.96.81 | +------+------------+--------+--------------------------------+
狀態選項共有三種,分別是:ACTIVE(活躍), BUILDING(創建中)以及 UNKNOWN(未知)。BUILDING狀態一般是暫時性的,因此大家很可能在自己操作的時候不會遇到。如果出現UNKNOWN狀態,不妨反覆運行nova list命令,直到該狀態消失。
要查看特定服務器的全部信息,使用nova show命令加上我們從nova list命令中獲得的服務器ID。
$ nova show 1805 +-----------------+----------------------------------------------------------+ | Property | Value | +-----------------+----------------------------------------------------------+ | created | 2011-09-01T21:40:41Z | | flavor | m1.small | | hostId | 58a7430169aa42cde5ce2456b0cb5bb5ac1ab0703bab6420e8a49e6e | | id | 1805 | | image | maverick | | metadata | {} | | name | testserver | | private network | 10.4.96.81 | | progress | 100 | | status | ACTIVE | | updated | 2011-09-01T21:40:46Z | | uuid | ce044452-f22e-4ea4-a3ec-d1cde80cf996 | +-----------------+----------------------------------------------------------+
通過以上幾項nova命令的基本演練,現在大家已經在建立自有云的道路上邁出了第一步!
創建自定義鏡像,並打包上傳至OpenStack
成功從列表中查看當前可用的鏡像之後,大家可能還希望添加符合自己需要的鏡像。要創建自定義鏡像,首要要從ISO文件開始。CentOS、Debian、Fedora或者Ubuntu,只要合用,都可以下載對應的ISO文件。 點擊此處 獲取適合初學者的初始鏡像。在這裏獲取的都是.tar及.gz文件,其中包含虛擬機鏡像(*.img),一套Xen兼容內核/虛擬磁盤(後者由xen-內核/vmlinuz*與xen-內核/initrd*兩部分構成)以及一套KVM兼容內核/虛擬磁盤(後者由kvm-內核/vmlinuz*與kvm-內核/initrd*兩部分構成)。大家可以通過命令行或者使用VirtualBox以及kvm之類的虛擬化平臺打造自定義鏡像。創建一個.vdi鏡像,再利用quemu-utils中的quemu-img工具將其轉換爲可用格式。
大家可能還希望讓鏡像變得更大,向其中添加類似Linux標準基礎這樣的軟件包,以使其更適合日常工作中的實際應用。一旦在VirtualBox或者其它任何平臺上完成了自定義工作,將最終文件拷貝到安裝了euca2ools的Linux計算機中。在文章的下一節中,我將向大家介紹如何將自己的自定義鏡像通過命令行中的euca-命令導入OpenStack雲中。
如何將新鏡像導入OpenStack鏡像服務(Glance)
當一套自定義虛擬機鏡像創建完成,我們可以將磁盤鏡像數據及鏡像元數據存儲在鏡像服務中。
這裏使用Eucalyptus工具集也是個不錯的選擇,該工具集是一款作用於雲的開源命令行客戶端,並且兼容Amazon的EC2 API。安裝euca2ools命令行工具並確保自己的環境包含了Eucalyptus運行所必需的認證機制。
上傳內核,並注意Amazon內核鏡像(簡稱AKI):
euca-bundle-image -i kvm-kernel/vmlinuz-2.6.28-11-generic --kernel true euca-upload-bundle -b jbbucket -m /tmp/vmlinuz-2.6.28-11-generic.manifest.xml euca-register jbbucket/vmlinuz-2.6.28-11-generic.manifest.xml
上傳虛擬磁盤並注意Amazon虛擬磁盤鏡像(簡稱ARI),這樣大家就能獲得綁定鏡像時必需的參考信息:
euca-bundle-image -i kvm-kernel/initrd.img-2.6.28-11-generic --ramdisk true euca-upload-bundle -b jbbucket -m /tmp/initrd.img-2.6.28-11-generic.manifest.xml euca-register jbbucket/initrd.img-2.6.28-11-generic.manifest.xml
上傳自定義設備鏡像,通過在之前步驟中獲取到的值指定內核及虛擬磁盤:
euca-bundle-image -i centos-5.5-x86_64.img --kernel aki-XXXXXXXX --ramdisk ari-XXXXXXXX euca-upload-bundle -b jbbucket -m /tmp/centos-5.5-x86_64.img.manifest.xml euca-register jbbucket/centos-5.5-x86_64.img.manifest.xml
上傳至鏡像服務器的過程可能會持續一段時間——但當我們使用Eucalyptus的“describe images”命令時,新的AMI應該顯示如下內容。
euca-describe-images IMAGE ami-reey5wk5 jbbucket/centos.5-5.x86-64.img.manifest.xml myproject available private x86_64 machine ami-f4ks8moj ami-jqxvgtmd
如何通過UI使用存儲對象
大家可能利用REST API來訪問自己在OpenStack中的存儲對象,但更多的時候,我們只希望能有一套良好的用戶界面,以便通過拖拽操作實現文件存儲。開源客戶端Cyberduck,包括Mac OS X版本以及Windows版本,就針對從FTP到對象存儲等一系列機制提供了一套用戶界面。由於它的開源及跨平臺特性,這款優秀的界面完全可以安裝在OpenStack對象存儲當中(類似於Rackspace雲文件)。大家在cyberduck.ch站點下載即可。要實現其在OpenStack中的安裝,我們需要變更某個 隱藏的配置選項 。這裏需要將URL由default /v1.0修改爲/auth/v1.0。要在Mac OS X中修改授權URL,則需要打開終端窗口並輸入:
Defaults defaults write ch.sudo.cyberduck cf.authentication.context /auth/v1.0
Cyberduck 3.8.1中包含一個用於在打開某個鏈接時選擇Swift(OpenStack對象存儲)的下拉菜單。啓動Cyberduck,然後點擊新建連接工具欄按鈕或者選擇文件>打開連接。
選擇Swift(OpenStack對象存儲)並輸入以下值:
Server(服務器):輸入已安裝的Swift服務器的URL。
Port(端口):由於用戶是通過http進行連接,因此輸入443.
Username(用戶名):在冒號後輸入賬戶名稱,然後是用戶名,例如test:tester。
Password(密碼):根據上一步使用的賬戶名稱及用戶名輸入對應密碼。
圖五顯示的是一個Cyberduck Swift連接實例。
大家在自己的對象存儲系統中完成容器創建之後,就可以通過拖拽的方式將來自桌面的文件拷貝到Cyberduck當中,如圖六所示。
到這裏,我們已經可以將所有的圖片及視頻作爲內置冗餘備份到大規模擴展存儲系統當中。
獲取幫助及其它進一步操作
如果大家在安裝或測試過程中遇到問題,或者是無法使某些功能正常工作,OpenStack社區能夠提供解決方案。Launchpad中的“Answers”主題是尋求幫助的理想所在。
Launchpad解答主題中的部分章節羅列如下:
如果還有其它疑問,各位不妨向 https://launchpad.net/~openstack 中的OpenStack郵件列表發送郵件,並在 文檔 中留下評論,或者在 #openstack的IRC頻道 中與其他共同討論。