最近2個(gè)星期在嘗試用OpenStack搭建私有云,提供方便的虛擬機部署和管理。寫(xiě)一篇博客記錄一下相關(guān)資料。
1. OpenStack簡(jiǎn)介OpenStack是一個(gè)開(kāi)源軟件,它提供了一個(gè)部署云的平臺。為虛擬計算或存儲服務(wù)的公有/私有云,提供可擴展的、靈活的云計算。
OpenStack包含了一組由社區維護的開(kāi)源項目,主要項目有Compute(Nova), Object Storage(Swift),Image Service(Glance)。
Nova提供虛擬計算服務(wù),Swift提供存儲服務(wù),Glance提供虛擬機鏡像的注冊、分發(fā)服務(wù)。
他們之間的關(guān)系可以用這個(gè)簡(jiǎn)圖來(lái)表示:
2. OpenStack能夠做什么OpenStack能幫我們建立自己的IaaS,提供類(lèi)似Amazon Web Service的服務(wù)給用戶(hù):
普通用戶(hù)可以通過(guò)它注冊云服務(wù),查看運行和計費情況
開(kāi)發(fā)和運維人員可以創(chuàng )建和存儲他們應用的自定義鏡像,并通過(guò)這些鏡像啟動(dòng)、監控和終止實(shí)例
平臺的管理人員能夠配置和操作網(wǎng)絡(luò ),存儲等基礎架構
3. OpenStack Compute(Nova)的軟件架構下圖是Nova的軟件架構,每個(gè)nova-xxx組件是由python代碼編寫(xiě)的守護進(jìn)程,每個(gè)進(jìn)程之間通過(guò)隊列(Queue)和數據庫(nova database)來(lái)交換信息,執行各種請求。而用戶(hù)通過(guò)nova-api暴露的web service來(lái)同其他組件進(jìn)行進(jìn)行交互。Glance是相對獨立的基礎架構,nova通過(guò)glance-api來(lái)和它交互。
4. Nova各個(gè)組件的作用nova-api是Nova的中心。它為所有外部調用提供服務(wù),除了提供OpenStack本身的API規范外,他還提供了兼容EC2的部分API,所以也可以用EC2的管理工具對nova進(jìn)行日常管理。
nova-compute負責對虛擬機實(shí)例進(jìn)行創(chuàng )建、終止、遷移、Resize的操作。工作原理可以簡(jiǎn)單描述為:從隊列中接收請求,通過(guò)相關(guān)的系統命令執行他們,再更新數據庫的狀態(tài)。
nova-volume管理映射到虛擬機實(shí)例的卷的創(chuàng )建、附加和取消。
nova-network從隊列中接收網(wǎng)絡(luò )任務(wù),然后執行任務(wù)控制虛擬機的網(wǎng)絡(luò ),比如創(chuàng )建橋接網(wǎng)絡(luò )或改變iptables的規則。
nova-scheduler 提供調度,來(lái)決定在哪臺資源空閑的機器上啟動(dòng)新的虛擬機實(shí)例
Queue為守護進(jìn)程傳遞消息。只要支持AMQP協(xié)議的任何Message Queue Sever都可以,當前官方推薦用RabbitMQ。
SQL database存儲云基礎架構中的各種數據。包括了虛擬機實(shí)例數據,網(wǎng)絡(luò )數據等。
user dashboard是一個(gè)可選的項目。它提供了一個(gè)web界面來(lái)給普通用戶(hù)或者管理者來(lái)管理、配置他們的計算資源。
5. Nova的硬件架構Nova采用無(wú)共享、基于消息的架構,我們能安裝每個(gè)nova-xxx組件在單獨的服務(wù)器上,這樣可以根據不同目的進(jìn)行不同的配置安裝
單結點(diǎn):一臺服務(wù)器運行所有的nova-xxx組件,同時(shí)也驅動(dòng)虛擬實(shí)例。這種配置只為嘗試Nova,或者為了開(kāi)發(fā)目的進(jìn)行安裝。
1控制節點(diǎn)+N個(gè)計算節點(diǎn):一個(gè)控制結點(diǎn)運行除nova-compute外的所有nova-services,然后其他compute結點(diǎn)運行nova-compute。所有的計算節點(diǎn)需要和控制節點(diǎn)進(jìn)行鏡像交互,網(wǎng)絡(luò )交互,控制節點(diǎn)是整個(gè)架構的瓶頸,這種配置主要用于概念證明或實(shí)驗環(huán)境。
多節點(diǎn):增加節點(diǎn)單獨運行nova-volume,同時(shí)在計算節點(diǎn)上運行nova-network,并且根據不同的網(wǎng)絡(luò )硬件架構選擇DHCP或者VLan模式,讓控制網(wǎng)絡(luò )和公共網(wǎng)絡(luò )的流量分離。
6. OpenStack的安裝OpenStack的安裝是比較麻煩,可以參考官方文檔進(jìn)行: http://docs.openstack.org/diablo/openstack-compute/admin/content/ , 文檔有一些地方?jīng)]有更新到最新版本,會(huì )遇到一些小問(wèn)題,推薦一個(gè)第3方腳本進(jìn)行安裝: http://devstack.org/ 它適合用來(lái)搭建實(shí)驗環(huán)境??梢酝ㄟ^(guò)閱讀這個(gè)腳本,同時(shí)配合官方文檔來(lái)理解整個(gè)軟件架構。
同時(shí)通過(guò)Ubuntu源安裝的nova在實(shí)際使用過(guò)程中遇到一些小問(wèn)題,都需要打補丁來(lái)解決,建議了解整個(gè)配置以后,可以改成從git上獲取stable分支的代碼進(jìn)行安裝,這樣日后維護升級也比較方便。
如果你需要從無(wú)到有搭建整個(gè)數據中心,推薦Crowbar實(shí)現自動(dòng)化遠程安裝: https://github.com/dellcloudedge/crowbar 從裸機到可用系統只用在web界面點(diǎn)擊幾下即可完成,還自帶各種SA常用功能(比如nagios監控等),不過(guò)這個(gè)東西也比較復雜,推薦有興趣的SA們試用。
7. 遇到的問(wèn)題官方文檔和devstack腳本基本上都是為了搭建實(shí)驗環(huán)境寫(xiě)的,沒(méi)有為生產(chǎn)環(huán)境做最佳實(shí)踐的指導,在安裝過(guò)程中遇到很多問(wèn)題,比如:
A. 多節點(diǎn)部署的時(shí)候要用multi host參數
B. 使用VLAN+硬件網(wǎng)關(guān)的時(shí)候做網(wǎng)絡(luò )配置時(shí)候,需要指定dnsmasq_config_file來(lái)強制覆蓋dnsmasq的網(wǎng)關(guān)配置
C. 用KVM制作windows鏡像的時(shí)候需要安裝virtio驅動(dòng)
D. 通過(guò)Ubuntu源安裝的Nova,在A(yíng)mi格式的鏡像啟動(dòng)的instance無(wú)法做snapshot,需要打
補丁E. 通過(guò)Ubuntu源安裝的Nova,在啟用keystone進(jìn)行身份認證的情況下,無(wú)法提供EC2的兼容API,也需要打補丁
8. Openstack 的各種資料A. 官網(wǎng)和wiki http://docs.openstack.org/
B. Devstack的腳本說(shuō)明,對于了解如何配置各個(gè)組件非常有幫助 http://devstack.org/stack.sh.html
C. Rackspace的參考架構,有很多很有用的信息,包括硬件,網(wǎng)絡(luò ),軟件配置等等,強烈推薦: http://www.referencearchitecture.org
D. 看你準備基于什么技術(shù)進(jìn)行虛擬化,KVM或者Xen的文檔也是很有用的。
9. 展示用dashboard管理虛擬機
通過(guò)noVNC在web上連接到虛擬機