天天看點

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

第一部分 OpenStack及其構成簡介

一、雲計算

雲計算是一種計算模型,它将諸如運算能力、存儲、網絡和軟體等資源抽象成為服務,以便讓使用者通過網際網路遠端享用,付費的形式也如同傳統公共服務設施一樣。因需而定、提供友善、動态改變和無限的虛拟化擴充能力是雲計算的幾個重要特征。

不同的“雲”對應着不同的基礎設施。下面是三種廣義的“雲”:

l 基礎設施即服務(IaaS)

l 平台即服務(PaaS)

l 軟體即服務(SaaS)

譯者注:Open為開放之意,Stack則是堆砌,OpenStack合起來如其名,就是許多Open的Softwares堆積的集合,但1 + 1 > 2,系統的功能更為強大。

相關閱讀:

在Ubuntu 12.10 上安裝部署Openstack  http://www.linuxidc.com/Linux/2013-08/88184.htm

Ubuntu 12.04 OpenStack Swift單節點部署手冊 http://www.linuxidc.com/Linux/2013-08/88182.htm

在Ubuntu上安裝OpenStack的Swift元件-installing openstack object storage  http://www.linuxidc.com/Linux/2013-08/88180.htm

OpenStack Hands on lab系列  http://www.linuxidc.com/Linux/2013-08/88170.htm

二、OpenStack

(一)OpenStack概要

OpenStack是一整套開源軟體項目的綜合,它允許企業或服務提供者建立、運作自己的雲計算和存儲設施。Rackspace與NASA是最初重要的兩個貢獻者,前者提供了“雲檔案”平台代碼,該平台增強了OpenStack對象存儲部分的功能,而後者帶來了“Nebula”平台形成了OpenStack其餘的部分。而今,OpenStack基金會已經有150多個會員,包括很多知名公司如“Canonical、DELL、Citrix”等。

以下是5個OpenStack的重要構成部分:

l Nova - 計算服務

l Swift - 存儲服務

l Glance - 鏡像服務

l Keystone - 認證服務

l Horizon - UI服務

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

圖1 OpenStack基本構架

下圖展示了Keystone、Dashboard二者與其它OpenStack部分的互動。

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

(二)OpenStack計算設施----Nova

Nova是OpenStack計算的彈性控制器。OpenStack雲執行個體生命期所需的各種動作都将由Nova進行處理和支撐,這就意味着Nova以管理平台的身份登場,負責管理整個雲的計算資源、網絡、授權及測度。雖然Nova本身并不提供任何虛拟能力,但是它将使用libvirt API與虛拟機的主控端進行互動。Nova通過Web服務API來對外提供處理接口,而且這些接口與Amazon的Web服務接口是相容的。

功能及特點

l 執行個體生命周期管理

l 計算資源管理

l 網絡與授權管理

l 基于REST的API

l 異步連續通信

l 支援各種宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V

OpenStack計算部件

l Nova彈性雲包含以下主要部分:

l API Server(nova-api)

l 消息隊列(rabbit-mq server)

l 運算工作站(nova-compute)

l 網絡控制器(nova-network)

l 卷管理(nova-volume)

l 排程器(nova-scheduler)

API伺服器(nova-api)

API伺服器提供了雲設施與外界互動的接口,它是外界使用者對雲實施管理的唯一通道。通過使用web服務來調用各種EC2的API,接着API伺服器便通過消息隊列把請求送達至雲内目标設施進行處理。作為對EC2-api的替代,使用者也可以使用OpenStack的原生API,我們把它叫做“OpenStack API”。

消息隊列(Rabbit MQ Server)

OpenStack内部在遵循AMQP(進階消息隊列協定)的基礎上采用消息隊列進行通信。Nova對請求應答進行異步調用,當請求接收後便則立即觸發一個回調。由于使用了異步通信,不會有使用者的動作被長置于等待狀态。例如,啟動一個執行個體或上傳一份鏡像的過程較為耗時,API調用就将等待傳回結果而不影響其它操作,在此異步通信起到了很大作用,使整個系統變得更加高效。

運算工作站(nova-compute)

運算工作站的主要任務是管理執行個體的整個生命周期。他們通過消息隊列接收請求并執行,進而對執行個體進行各種操作。在典型實際生産環境下,會架設許多運算工作站,根據排程算法,一個執行個體可以在可用的任意一台運算工作站上部署。

網絡控制器(nova-network)

網絡控制器處理主機的網絡配置,例如IP位址配置設定,配置項目VLAN,設定安全群組以及為計算節點配置網絡。

卷工作站(nova-volume)

卷工作站管理基于LVM的執行個體卷,它能夠為一個執行個體建立、删除、附加卷,也可以從一個執行個體中分離卷。卷管理為何如此重要?因為它提供了一種保持執行個體持續存儲的手段,比如當結束一個執行個體後,根分區如果是非持續化的,那麼對其的任何改變都将丢失。可是,如果從一個執行個體中将卷分離出來,或者為這個執行個體附加上卷的話,即使執行個體被關閉,資料仍然儲存其中。這些資料可以通過将卷附加到原執行個體或其他執行個體的方式而重新通路。

是以,為了日後通路,重要資料務必要寫入卷中。這種應用對于資料伺服器執行個體的存儲而言,尤為重要。

排程器(nova-scheduler)

排程器負責把nova-API調用送達給目标。排程器以名為“nova-schedule”的守護程序方式運作,并根據排程算法從可用資源池中恰當地選擇運算伺服器。有很多因素都可以影響排程結果,比如負載、記憶體、子節點的遠近、CPU架構等等。強大的是nova排程器采用的是可插入式架構。

目前nova排程器使用了幾種基本的排程算法:

随機化:主機随機選擇可用節點;

可用化:與随機相似,隻是随機選擇的範圍被指定;

簡單化:應用這種方式,主機選擇負載最小者來運作執行個體。負載資料可以從别處獲得,如負載均衡伺服器。

(三)OpenStack鏡像伺服器----Glance

OpenStack鏡像伺服器是一套虛拟機鏡像發現、注冊、檢索系統,我們可以将鏡像存儲到以下任意一種存儲中:

本地檔案系統(預設)

l OpenStack對象存儲

l S3直接存儲

l S3對象存儲(作為S3通路的中間管道)

l HTTP(隻讀)

功能及特點

提供鏡像相關服務

Glance構件

l Glance控制器

l Glance注冊器

(四)OpenStack存儲設施----Swift

Swift為OpenStack提供一種分布式、持續虛拟對象存儲,它類似于Amazon Web Service的S3簡單存儲服務。Swift具有跨節點百級對象的存儲能力。Swift内建備援和失效備援管理,也能夠處理歸檔和媒體流,特别是對大資料(千兆位元組)和大容量(多對象數量)的測度非常高效。

功能及特點

l 海量對象存儲

l 大檔案(對象)存儲

l 資料備援管理

l 歸檔能力-----處理大資料集

l 為虛拟機和雲應用提供資料容器

l 處理流媒體

l 對象安全存儲

l 備份與歸檔

l 良好的可伸縮性

Swift元件

l Swift賬戶

l Swift容器

l Swift對象

l Swift代理

l Swift RING

Swift代理伺服器

使用者都是通過Swift-API與代理伺服器進行互動,代理伺服器正是接收外界請求的門衛,它檢測合法的實體位置并路由它們的請求。

此外,代理伺服器也同時處理實體失效而轉移時,故障切換的實體重複路由請求。

Swift對象伺服器

對象伺服器是一種二進制存儲,它負責處理本地存儲中的對象資料的存儲、檢索和删除。對象都是檔案系統中存放的典型的二進制檔案,具有擴充檔案屬性的中繼資料(xattr)。

注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支援,但是并沒有有效測試證明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同樣能運作良好。不過,XFS被認為是目前最好的選擇。

Swift容器伺服器

容器伺服器将列出一個容器中的所有對象,預設對象清單将存儲為SQLite檔案(譯者注:也可以修改為MySQL,安裝中就是以MySQL為例)。容器伺服器也會統計容器中包含的對象數量及容器的存儲空間耗費。

Swift賬戶伺服器

賬戶伺服器與容器伺服器類似,将列出容器中的對象。

Ring(索引環)

Ring容器記錄着Swift中實體存儲對象的位置資訊,它是真實實體存儲位置的實體名的虛拟映射,類似于查找及定位不同叢集的實體真實實體位置的索引服務。這裡所謂的實體指賬戶、容器、對象,它們都擁有屬于自己的不同的Rings。

(五)OpenStack認證服務(Keystone)

Keystone為所有的OpenStack元件提供認證和通路政策服務,它依賴自身REST(基于Identity API)系統進行工作,主要對(但不限于)Swift、Glance、Nova等進行認證與授權。事實上,授權通過對動作消息來源者請求的合法性進行鑒定。如下圖所示:

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

Keystone采用兩種授權方式,一種基于使用者名/密碼,另一種基于令牌(Token)。除此之外,Keystone提供以下三種服務:

l 令牌服務:含有授權使用者的授權資訊

l 目錄服務:含有使用者合法操作的可用服務清單

l 政策服務:利用Keystone具體指定使用者或群組某些通路權限

認證服務元件

服務入口:如Nova、Swift和Glance一樣每個OpenStack服務都擁有一個指定的端口和專屬的URL,我們稱其為入口(endpoints)。

l 區位:在某個資料中心,一個區位具體指定了一處實體位置。在典型的雲架構中,如果不是所有的服務都通路分布式資料中心或伺服器的話,則也稱其為區位。

l 使用者:Keystone授權使用者

譯者注:代表一個個體,OpenStack以使用者的形式來授權服務給它們。使用者擁有證書(credentials),且可能配置設定給一個或多個租戶。經過驗證後,會為每個單獨的租戶提供一個特定的令牌。[來源:http://blog.sina.com.cn/s/blog_70064f190100undy.html]

l 服務:總體而言,任何通過Keystone進行連接配接或管理的元件都被稱為服務。舉個例子,我們可以稱Glance為Keystone的服務。

l 角色:為了維護安全限定,就雲内特定使用者可執行的操作而言,該使用者關聯的角色是非常重要的。

譯者注:一個角色是應用于某個租戶的使用權限集合,以允許某個指定使用者通路或使用特定操作。角色是使用權限的邏輯分組,它使得通用的權限可以簡單地分組并綁定到與某個指定租戶相關的使用者。

l 租間:租間指的是具有全部服務入口并配有特定成員角色的一個項目。

譯者注:一個租間映射到一個Nova的“project-id”,在對象存儲中,一個租間可以有多個容器。根據不同的安裝方式,一個租間可以代表一個客戶、帳号、組織或項目。

(六)OpenStack管理的Web接口----Horizon

Horizon是一個用以管理、控制OpenStack服務的Web控制台,它可以管理執行個體、鏡像、建立密匙對,對執行個體添加卷、操作Swift容器等。除此之外,使用者還可以在控制台中使用終端(console)或VNC直接通路執行個體。總之,Horizon具有如下一些特點:

l 執行個體管理:建立、終止執行個體,檢視終端日志,VNC連接配接,添加卷等

l 通路與安全管理:建立安全群組,管理密匙對,設定浮動IP等

l 偏好設定:對虛拟硬體模闆可以進行不同偏好設定

l 鏡像管理:編輯或删除鏡像

l 檢視服務目錄

l 管理使用者、配額及項目用途

l 使用者管理:建立使用者等

l 卷管理:建立卷和快照

l 對象存儲處理:建立、删除容器和對象

l 為項目下載下傳環境變量

         第二部分 OpenStack安裝與配置

一、引言

本章内容講解如何在3台實體機上搭建最小化雲平台,這3台機器分為稱為Server1、Server2和Client1,之後的各章也是如此。Server1承載着Nova、Glance、Swift、Keystone及Horizon(OpenStack的Web UI)服務。Server2隻用來運作執行個體管理的nova運算工作站。由于OpenStack元件采用分布式結構,其中的任何一部分或幾個部分都可以安裝在任意伺服器上。

Client1并不是安裝所必須的,在本例中,它僅用來制作打包鏡像,并使用它通路Horizon在Web上管理OpenStack設施。于是就避免了使用伺服器來完成鏡像打包等諸如此類的任務了,而且在制作桌面系統鏡像時如果包含視窗界面的話,我們也隻能相應地使用有GUI的電腦來完成,故而最好還是别在伺服器上玩火了吧。建議Client1支援虛拟化技術,以便在制作完鏡像打包時可以運作KVM。

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

OpenStack安裝需要設定主機名、IP位址等,按你實際的環境進行配置。下表是譯者安裝的網絡參數清單:

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

以下是教程中網絡設定參數, 本教程均采用這些參數,但在實際安裝中請參照上表進行設定。

OpenStack學習筆記 第一部分 OpenStack及其構成簡介          第二部分 OpenStack安裝與配置                                    第三部分 OpenStack鏡像管理 

二、Server1

正如上表所示,Server1包含了所有的Nova服務:nova-compute、nova-api、nova-volume、nova-network以及Glance、Swift、Keystone和Horizon。這台伺服器上需要雙網卡。

(一)安裝底層OS

不必多想,請參照下述說明,記住相關參數,選擇64位Ubuntu12.04版,進行安裝。

l 建立的第一個使用者命名為“localadmin”

l 為eth0和eth1設定IP及其相關參數

l 在安裝服務包中,僅選擇“Openssh-server”作為預裝項

因為Server1上也将安裝nova-volume軟體,而nova-volume需要一塊專用分區,是以在安裝Ubuntu Server時請選擇手動分區,并另行建立一塊合适大小的分區。從本章起,教程都将以/dev/sda6作為這塊分區。你可以根據自己分區的實際情況進行修改。此外,請使用fdisk工具将該分區需要格式化為LVM(8e)格式,這一操作在安裝中或剛安裝完畢格式化均可。進一步,如果你還計劃在這台伺服器上再建立一個分區配給Swift的話,那麼就建立一塊分區并參照本章後文“安裝Swift”一節相關内容進行安裝。

待12.04的UbuntuOS安裝完畢後 ,使用下列指令更新系統:

sudo apt-get update

sudo apt-get upgrade

安裝網橋工具bridge-utils:

sudo apt-get install bridge-utils

(二)配置網絡

編輯/etc/network/interfaces檔案,如下所示:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 10.10.10.2

netmask 255.255.255.0

broadcast 10.10.10.255

gateway 10.10.10.1

dns-nameservers 10.10.8.3

auto eth1

iface eth1 inet static

address 192.168.3.1

netmask 255.255.255.0

network 192.168.3.0

broadcast 192.168.3.255

随後重新啟動網絡:

sudo /etc/init.d/networking restart

(三)NTP伺服器

安裝NTP軟體包。這個時間伺服器将為所有節點提供支援。OpenStack所有元件的時間都必須同步,于是我們就在Server1上安裝NTP服務并且讓其他伺服器或節點與之保持同步。

sudo apt-get install ntp

譯者注:NTP(Network Time Protocol),是用來使計算機時間同步化的一種協定,它可以使計算機對其伺服器或時鐘源(如石英鐘,GPS等等)做同步化,它可以提供高精準度的時間校正(LAN上與标準間差小于1毫秒,WAN上幾十毫秒),且可介由加密确認的方式來防止惡毒的協定攻擊。[來源:百度百科]

打開檔案/etc/ntp.conf增加以下三行内容,目的是讓本伺服器時間與外部伺服器時間同步。如果不能通路外網,NTP伺服器将使用本機硬體時鐘作為第二選擇。

server ntp.ubuntu.com

server 127.127.1.0

fudge 127.127.1.0 stratum 10

然後重新開機NTP使配置生效:

sudo service ntp restart

請確定伺服器IP位址可以被DNS解析。如果不能,則在/etc/hosts檔案中手工加入。

(四)資料庫

我們有很多選擇:MySQL、PostgreSQL或者SQLite等都能很好地對Nova和Glance提供資料支援。究竟選哪個,自己定吧。本例中采用MySQL。

MySQL

安裝mysql-server和python-mysqldb包:

sudo apt-get install mysql-server python-mysqldb

為mysql建立root密碼,在此使用“mygreatsecret”。随後編輯mysql配置檔案/etc/mysql/my.cnf,将綁定位址從127.0.0.1改為0.0.0.0,如下所示:

bind-address = 0.0.0.0

重新開機MySQL伺服器讓其開始監聽所有端口:

sudo restart mysql

建立資料庫

我們将要為nova、glance和keystone建立很多東東,各種資料庫、表及使用者。話音未落,這就開始了:

建立名為“nova”的資料庫:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'

建立一個使用者,名為“novadbadmin”:

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'

授予novadbadmin使用者nova資料庫全部權限:

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"

為novadbadmin同志建立密碼(譯者注:密碼是novasecret,後文類似之處不多言,請詳見指令):

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"

Glance登場,還是重複剛才的道道,首先建立一個名為glance的資料庫:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'

然後為這個建立的資料庫添加一個使用者“glancedbadmin”:

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'

接着,光榮授予他本資料庫的全部權限:

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"

是的,最後一步,為該使用者配置設定密碼:

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"

很煩的,keystone出場了。剛才的大循環,至此開始演繹第三遍:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret')"

現在,MySQL部分的工作結束。

(五)Keystone

Keystone是OpenStack的認證服務。使用以下指令進行安裝:

sudo apt-get install keystone python-keystone python-keystoneclient

打開/etc/keystone/keystone.conf檔案,将這一行:

admin_token = ADMIN

改為:

admin_token = admin

(本教程中我們将一直使用admin作為令牌)

本例中,我們使用MySQL來存儲keystone配置,則将 /etc/keystone/keystone.conf中的這句配置:

connection = sqlite:var/lib/keystone/keystone.db

換成:

connection = mysql://keystonedbadmin:[email protected]/keystone

然後,重新開機Keystone:

sudo service keystone restart

接着,執行以下指令同步資料庫:

sudo keystone-manage db_sync

最後,有些環境變量是OpenStack運作所必須的:

export SERVICE_ENDPOINT="http://localhost:35357/v2.0"

export SERVICE_TOKEN=admin

當然為了避免下次系統重新開機後,還得将這些變量再次export,最穩妥的辦法就是将其寫入~/.bashrc中。

建立租間

使用以下指令建立兩個租間,admin和service:

keystone tenant-create --name admin

keystone tenant-create --name service

建立使用者

執行以下指令,建立四個使用者admin、nova、glance及swift:

keystone user-create --name admin --pass admin --email [email protected]

keystone user-create --name nova --pass nova --email [email protected]

keystone user-create --name glance --pass glance --email [email protected]

keystone user-create --name swift --pass swift --email [email protected]

建立角色

使用指令建立兩個角色,admin和Member(譯者注:注意是大寫M):

keystone role-create --name admin

keystone role-create --name Member

檢視租間、使用者和角色

剛才建立的租間、使用者和角色可以通過如下指令進行檢視:

租間清單:

keystone tenant-list

+----------------------------------+--------------------+---------+

| id | name | enabled |

+----------------------------------+--------------------+---------+

| 7f95ae9617cd496888bc412efdceabfd | admin | True |

| c7970080576646c6959ee35970cf3199 | service | True |

+----------------------------------+--------------------+---------+

使用者清單:

keystone user-list

+----------------------------------+---------+-------------------+--------+

| id | enabled | email | name |

+----------------------------------+---------+-------------------+--------+

| 1b986cca67e242f38cd6aa4bdec587ca | True | [email protected] | swift |

| 518b51ea133c4facadae42c328d6b77b | True | [email protected] | glance |

| b3de3aeec2544f0f90b9cbfe8b8b7acd | True | [email protected] | admin |

| ce8cd56ca8824f5d845ba6ed015e9494 | True | [email protected] | nova |

+----------------------------------+---------+-------------------+--------+

角色清單:

keystone role-list

+----------------------------------+----------------------+

| id | name |

+----------------------------------+----------------------+

| 2bbe305ad531434991d4281aaaebb700 | admin |

| d983800dd6d54ee3a1b1eb9f2ae3291f | Member |

+----------------------------------+----------------------+

請大家格外注意id列中的值,雖然很長,但随後為使用者綁定角色,繼而把使用者配入租間中時可全靠它們了。

為特定租間中的使用者綁定角色

現在我們先為剛剛建立的使用者綁定角色,通過如下指令格式可以将特定租間中的特定使用者增加角色(譯者注:僅是指令格式,随後才是真正執行的指令):

keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

其中id字段可以通過keystone user-list,keystone role-list和keystone tenant-list指令獲得。

下面開始為“admin”租間中的“admin”使用者綁定“admin”角色:

keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd

接着執行如下指令,為“service”租間中的“nova”、“glance”、“swift”使用者綁定“admin”角色:

keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

Horizon和Swift隻“Member”角色即可,是以相應地執行如下指令:

keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd

注意,在執行自己的安裝時,請千萬按照實際安裝中的id進行設定,照抄本文id必将出錯!

建立服務

至此,我們該建立授權使用者可以享用的服務了,指令格式如下:

keystone service-create --name service_name --type service_type --description 'Description of the service'

安裝上述格式,建立nova-compute、nova-volume、glance、swift、keystone及ec2服務:

keystone service-create --name nova --type compute --description 'OpenStack Compute Service'

keystone service-create --name volume --type volume --description 'OpenStack Volume Service'

keystone service-create --name glance --type image --description 'OpenStack Image Service'

keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'

keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'

keystone service-create --name ec2 --type ec2 --description 'EC2 Service'

剛才建立的每個服務都擁有唯一的id,要檢視服務id,使用如下指令即可:

keystone service-list

+----------------------------------+----------+--------------+----------------------------+

| id | name | type | description |

+----------------------------------+----------+--------------+----------------------------+

| 1e93ee6c70f8468c88a5cb1b106753f3 | nova | compute | OpenStack Compute Service |

| 28fd92ffe3824004996a3e04e059d875 | ec2 | ec2 | EC2 Service |

| 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity | OpenStack Identity Service |

| 96f35e1112b143e59d5cd5d0e6a8b22d | swift | object-store | OpenStack Storage Service |

| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume | volume | OpenStack Volume Service |

| fbafab6edcab467bb734380ce6be3561 | glance | image | OpenStack Image Service |

+----------------------------------+----------+--------------+----------------------------+

這些id将被用于定義所屬服務的入口(endpoint)。

建立入口

建立服務入口的指令格式是:

keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url

使用如下指令建立nova-compute入口:

keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'

使用如下指令建立nova-volume入口:

keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'

使用如下指令建立glance入口:

keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'

使用如下指令建立swift入口:

keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'

使用如下指令建立keystone入口:

keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0

使用如下指令建立ec2入口:

keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud

(六)Glance

使用以下指令安裝glance:

sudo apt-get install glance glance-api glance-client glance-common glance-

registry python-glance

配置Glance服務

Glance預設使用SQLite,MySQL或PostgreSQL也可以很好地與Glance工作。

打開 /etc/glance/glance-api-paste.ini檔案并在末尾編輯如下内容:

admin_tenant_name = %SERVICE_TENANT_NAME%

admin_user = %SERVICE_USER%

admin_password = %SERVICE_PASSWORD%

這些值需要用剛才我們安裝中的實際值進行替換,admin_tenant_name應該是“service”,admin_user這裡是“glance”、admin_password是“glance”。

編輯完這三行應該是如下的樣子:

admin_tenant_name = service

admin_user = glance

admin_password = glance

接着再打開 /etc/glance/glance-registry-paste.ini檔案,也如上述操作一樣在檔案尾部進行同樣的編輯。

然後,修改glance資料庫連接配接為MySQL,編輯 /etc/glance/glance-registry.conf,找到“sql_connection =”這句作如下修改:

sql_connection = mysql://glancedbadmin:[email protected]/glance

緊接着還是這份檔案,在底部增加如下設定,目的是讓glance使用keystone授權:

[paste_deploy]

flavor = keystone

打開 /etc/glance/glance-api.conf檔案,在檔案末尾增加如下配置:

[paste_deploy]

flavor = keystone

在MySQL資料庫中建立glance schema,進行同步:

sudo glance-manage version_control 0

sudo glance-manage db_sync

上述改動全部完成後,重新開機glance-api和glance-registry服務:

sudo restart glance-api

sudo restart glance-registry

設定如下環境變量,你也可以将其寫入 ~/.bashrc中:

export SERVICE_TOKEN=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://localhost:5000/v2.0/"

export SERVICE_ENDPOINT=http://localhost:35357/v2.0

現在我們可以使用這個指令來測試glance是否正确安裝:

glance index

如果這條指令沒有傳回任何結果,則說明glance已經正确安裝完畢,并與Keystone正常通信。若是稍微探究一下的話,上述指令其實有傳回值,正确安裝情況下的傳回值是0,可以使用echo $?進行檢視。

在Glance正确配置且使用keystone作為授權機制後,我們便可以上傳鏡像到glance了,相關内容詳見後文中的“鏡像管理(Image Management)”。

(七)Nova

先使用如下指令安裝nova及其相關元件:

sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth

配置Nova

以如下配置為例,編輯nova主配檔案 /etc/nova/nova.conf:

--dhcpbridge_flagfile=/etc/nova/nova.conf

--dhcpbridge=/usr/bin/nova-dhcpbridge

--logdir=/var/log/nova

--state_path=/var/lib/nova

--lock_path=/run/lock/nova

--allow_admin_api=true

--use_deprecated_auth=false

--auth_strategy=keystone

--scheduler_driver=nova.scheduler.simple.SimpleScheduler

--s3_host=10.10.10.2

--ec2_host=10.10.10.2

--rabbit_host=10.10.10.2

--cc_host=10.10.10.2

--nova_url=http://10.10.10.2:8774/v1.1/

--routing_source_ip=10.10.10.2

--glance_api_servers=10.10.10.2:9292

--image_service=nova.image.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:[email protected]/nova

--ec2_url=http://10.10.10.2:8773/services/Cloud

--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens

--api_paste_config=/etc/nova/api-paste.ini

--libvirt_type=kvm

--libvirt_use_virtio_for_bridges=true

--start_guests_on_host_boot=true

--resume_guests_state_on_host_boot=true

# vnc specific configuration

--novnc_enabled=true

--novncproxy_base_url=http://10.10.10.2:60

--vncserver_proxyclient_address=10.10.10.2

--vncserver_listen=10.10.10.2

# network specific settings

--network_manager=nova.network.manager.FlatDHCPManager

--public_interface=eth0

--flat_interface=eth1

--flat_network_bridge=br100

--fixed_range=192.168.4.1/27

--floating_range=10.10.10.2/27

--network_size=32

--flat_network_dhcp_start=192.168.4.33

--flat_injected=False

--force_dhcp_release

--iscsi_helper=tgtadm

--connection_type=libvirt

--root_helper=sudo nova-rootwrap

--verbose

建立一個實體卷:

sudo pvcreate /dev/sda6

建立一個名為“nova-volumnes”的卷組:

sudo vgcreate nova-volumes /dev/sda6

修改 /etc/nova檔案夾的屬主及 /etc/nova/nova.conf檔案的通路權限:

sudo chown -R nova:nova /etc/nova

sudo chmod 644 /etc/nova/nova.conf

進入 /etc/nova/api-paste.ini檔案,找到末尾三行:

admin_tenant_name = %SERVICE_TENANT_NAME%

admin_user = %SERVICE_USER%

admin_password = %SERVICE_PASSWORD%

用之前建立的名字進行替換(譯者注:和Glance如出一轍,隻是這次是nova),編輯完畢如下所示:

admin_tenant_name = service

admin_user = nova

admin_password = nova

仍然在MySQL資料庫進行同步:

sudo nova-manage db sync

為執行個體提供IP池:

sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32

輸出環境變量:

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://localhost:5000/v2.0/"

重新開機nova服務:

sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;

執行下列指令測試nova是否正确安裝:

sudo nova-manage service list

Binary Host Zone Status State Updated_At

nova-network server1 nova enabled :-) 2012-04-20 08:58:43

nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44

nova-volume server1 nova enabled :-) 2012-04-20 08:58:44

nova-compute server1 nova enabled :-) 2012-04-20 08:58:45

nova-cert server1 nova enabled :-) 2012-04-20 08:58:43

若所有元件都是微笑,說明nova已經正确安裝完畢。

(八)OpenStack管理面闆

執行下列指令安裝管理面闆:

sudo apt-get install openstack-dashboard

重新開機Apache:

sudo service apache2 restart

好消息,現在打開浏覽器輸入server1的IP位址,就可以看到OpenStack的管理面闆登陸界面了。預設使用者名和密碼都是“admin”。在管理面闆中,可以進行建立密匙對,建立、編輯安全群組,建立執行個體,添加卷等操作。具體内容詳見後文“OpenStack Dashboard”章節。

(九)Swift

安裝Swift

最重要的部分是swift的代理、賬戶、容器及對象伺服器:

sudo apt-get install swift swift-proxy swift-account swift-container swift-object

随後安裝一些支援元件,xfsprogs(支援XFS檔案系統)、python.pastedeploy(通路keystone)和curl(測試swift):

sudo apt-get install xfsprogs curl python-pastedeploy

Swift存儲端

有兩種方法來建立或制備存儲端,一種是采用現有的分區或卷作為儲存設備,另一種是建立環回檔案(Loopback file)并将當做儲存設備。安裝時,兩種方式自選。

1. 分區作為儲存設備

如果在安裝OS時為Swift預留了一個分區,你就可以直接使用它。如果該分區沒有使用過或仍是空閑空間(比如/dev/sdb3),就應該把它格式化為xfs檔案系統,接着編輯 /etc/fstab中該分區的挂載點(注意:請根據實際情況選擇你自定的裝置,本教程假定手頭未使用也沒分區的空閑空間在 /dev/sdb上):

sudo fdisk /dev/sdb

Type n for new partition

Type e for extended partion

Choose appropriate partition number ( or go with the default )

Choose first and last sectors to set the hard disk size (or go with defaults)

Note that 83 is the partition type number for Linux

Type w to write changes to the disk

上述指令将建立一個譬如 /dev/sdb3的分區,接着我們便将其格式化為XFS。記得格式化前要先使用指令“sudo fdisk -l”檢視目前分區表,确定系統列出的分區含有你即将格式化的目标分區。最後,如果剛才xfsprogs成功安裝的話,我們才能夠使用以下指令:

sudo mkfs.xfs -i size=1024 /dev/sdb3

sudo tune2fs -l /dev/sdb3 |grep -i inode

建立一個該分區的挂載點,并命名為“swift_backend”:

sudo mkdir /mnt/swift_backend

緊接着編輯 /etc/fstab檔案寫入如下内容以便系統啟動時自動加載這個分區:

/dev/sdb3 /mnt/swift_backend xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

2. 環回檔案作為儲存設備

建立一個空檔案作為Swift存儲的環回裝置,在這裡我們使用disk copy指令建立它并命名為swift-disk,還将為其配置設定1G的磁盤空間。如果空間不夠,可以通過改變seek值來增加空間。随後格式化為XFS:

sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000

sudo mkfs.xfs -i size=1024 /srv/swift-disk

file /srv/swift-disk

swift-disk1: SGI XFS filesystem data (blksz 4096, inosz 1024, v2 dirs)

建立挂載點:

sudo mkdir /mnt/swift_backend

寫入 /etc/fstab:

/srv/swift-disk /mnt/swift_backend xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

3. 使用存儲

挂載存儲分區前,需要建立一些裝置節點并設定其屬主和主群為“Swift”:

sudo mount /mnt/swift_backend

pushd /mnt/swift_backend

sudo mkdir node1 node2 node3 node4

popd

sudo chown swift.swift /mnt/swift_backend/*

for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;

sudo mkdir -p /etc/swift/account-server /etc/swift/container-server /etc/

swift/object-server /srv/node1/device /srv/node2/device /srv/node3/device /srv/node4/device

sudo mkdir /run/swift

sudo chown -L -R swift.swift /etc/swift /srv/node[1-4]/ /run/swift

為了在系統啟動時啟動Swift服務,需要把如下兩行指令寫入 /etc/rc.local裡,位置在“exit 0;”之前:

sudo mkdir /run/swift

sudo chown swift.swift /run/swift

配置遠端備份

Rsync用來維護對象副本,許多swift服務都使用它保持對象一緻性及進行更新操作。所有存儲節點都将享用此配置:

首先編輯 /etc/default/rsync檔案:

Set RSYNC_ENABLE=true

然後編輯 /etc/rsyncd.conf配置檔案,如下所示:

# General stuff

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /run/rsyncd.pid

address = 127.0.0.1

# Account Server replication settings

[account6012]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/account6012.lock

[account6022]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/account6022.lock

[account6032]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/account6032.lock

[account6042]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/account6042.lock

# Container server replication settings

[container6011]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/container6011.lock

[container6021]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/container6021.lock

[container6031]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/container6031.lock

[container6041]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/container6041.lock

# Object Server replication settings

[object6010]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/object6010.lock

[object6020]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/object6020.lock

[object6030]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/object6030.lock

[object6040]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/object6040.lock

最後重新啟動服務完成rsync配置:

sudo service rsync restart

配置Swift元件

詳細的配置選項參見http://swift.openstack.org/deployment_guide.html。如果安裝了swift-doc包的話,則可以在/usr/share/doc/swift-doc/html目錄下直接檢視。Python使用paste.deploy管理配置。預設配置選項在[DEFAULT]段中,後面配置其它特殊項會覆寫預設段中的相關内容。格式如下:

THE SYNTAX set option_name = value

以下是一份paste.deploy的配置樣例,僅供參考:

[DEFAULT]

name1 = globalvalue

name2 = globalvalue

name3 = globalvalue

set name4 = globalvalue

[pipeline:main]

pipeline = myapp

[app:myapp]

use = egg:mypkg#myapp

name2 = localvalue

set name3 = localvalue

set name5 = localvalue

name6 = localvalue

建立并編輯 /etc/swift/swift.conf檔案,并寫入如下配置:

[swift-hash]

# random unique string that can never change (DO NOT LOSE). I'm using 03c9f48da2229770.

# od -t x8 -N 8 -A n < /dev/random

# The above command can be used to generate random a string.

swift_hash_path_suffix = 03c9f48da2229770

特别的,當建立更多的節點時,你需要記住随機串。不要照抄本例,請通過以下指令生成自己的随機字元串:

od -t x8 -N 8 -A n < /dev/random

1. 配置Swift代理伺服器

代理伺服器是swift的門衛,它的職責是檢測合法性。它将審查:一、請求是否僞造,二、請求使用資源的使用者身份。具體操作由keystone之類的認證伺服器來協助完成。

建立并編輯 /etc/swift/proxy-server.conf并增加如下内容:

[DEFAULT]

bind_port = 8080

user = swift

swift_dir = /etc/swift

[pipeline:main]

# Order of execution of modules defined below

pipeline = catch_errors healthcheck cache authtoken keystone proxy-server

[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

set log_name = swift-proxy

set log_facility = LOG_LOCAL0

set log_level = INFO

set access_log_name = swift-proxy

set access_log_facility = SYSLOG

set access_log_level = INFO

set log_headers = True

account_autocreate = True

[filter:healthcheck]

use = egg:swift#healthcheck

[filter:catch_errors]

use = egg:swift#catch_errors

[filter:cache]

use = egg:swift#memcache

set log_name = cache

[filter:authtoken]

paste.filter_factory = keystone.middleware.auth_token:filter_factory

auth_protocol = http

auth_host = 127.0.0.1

auth_port = 35357

auth_token = admin

service_protocol = http

service_host = 127.0.0.1

service_port = 5000

admin_token = admin

admin_tenant_name = service

admin_user = swift

admin_password = swift

delay_auth_decision = 0

[filter:keystone]

paste.filter_factory = keystone.middleware.swift_auth:filter_factory

operator_roles = admin, swiftoperator

is_admin = true

注意:可以使用apt-get安裝swift-doc軟體包,安裝後許多文檔都收錄在/usr/share/doc/swift-doc/html下,本配置樣例也是如此。

2. 配置Swift賬戶伺服器

預設swift容器服務配置檔案為 /etc/swift/account-server.conf:

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2

[pipeline:main]

pipeline = account-server

[app:account-server]

use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]

所有的account server配置檔案都在 /etc/swift/account-server目錄中。與 /srv裡的裝置相對應,我們建立1.conf、2.conf等等檔案,并将它們放到/etc/swift/account-server/下。以下是/etc/swift/account-server/1.conf配置檔案的内容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6012

user = swift

log_facility = LOG_LOCAL2

[pipeline:main]

pipeline = account-server

[app:account-server]

use = egg:swift#account

[account-replicator]

vm_test_mode = no

[account-auditor]

[account-reaper]

對其它裝置也是如此,比如/srv/node2、/srv/node3、/srv/node4等,我們分别建立2.conf,3.conf和4.conf與之對應。現在利用1.conf進行複制生成其餘檔案,并一一設定唯一的綁定端口及本地日志值:

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/2.conf

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/3.conf

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/4.conf

sudo sed -i 's/6012/6022/g;s/LOCAL2/LOCAL3/g;s/node1/node2/g' /etc/swift/account-server/2.conf

sudo sed -i 's/6012/6032/g;s/LOCAL2/LOCAL4/g;s/node1/node3/g' /etc/swift/account-server/3.conf

sudo sed -i 's/6012/6042/g;s/LOCAL2/LOCAL5/g;s/node1/node4/g' /etc/swift/account-server/4.conf

3. 配置Swift容器伺服器

預設swift容器服務配置檔案為 /etc/swift/container-server.conf:

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2

[pipeline:main]

pipeline = container-server

[app:container-server]

use = egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]

與account-server類似,我們同樣建立 /etc/swift/container-server/1.conf等等檔案與 /srv裝置比對,這是1.conf檔案内容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6011

user = swift

log_facility = LOG_LOCAL2

[pipeline:main]

pipeline = container-server

[app:container-server]

use = egg:swift#container

[container-replicator]

vm_test_mode = no

[container-updater]

接着利用1.conf繼續建立2.conf、3.conf和4.conf。并修改端口(分别是6021、6031和6041)及本地日志值(LOG_LOCAL3、LOG_LOCAL4和 LOG_LOCAL5)。

4. 配置Swift對象伺服器

預設swift容器服務配置檔案為 /etc/swift/object-server.conf:

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2

[pipeline:main]

pipeline = object-server

[app:object-server]

use = egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]

與account-server和container-server一樣,我們同樣建立 /etc/swift/object-server/1.conf等等檔案與 /srv裝置比對,這是1.conf檔案内容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6010

user = swift

log_facility = LOG_LOCAL2

[pipeline:main]

pipeline = object-server

[app:object-server]

use = egg:swift#object

[object-replicator]

vm_test_mode = no

[object-updater]

[object-auditor]

繼而利用1.conf繼續建立2.conf、3.conf和4.conf。并修改端口(分别是6020、6030和6040)及本地日志值(LOG_LOCAL3、LOG_LOCAL4和 LOG_LOCAL5)。

5. 配置Swift Ring伺服器

Ring是swift的一個極為重要的元件,它維護着對象的真實實體位置資訊,對象的副本及多種裝置。建立與對象服務、容器服務和賬戶服務相對應的ring-builder檔案:

pushd /etc/swift

sudo swift-ring-builder object.builder create 18 3 1

sudo swift-ring-builder container.builder create 18 3 1

sudo swift-ring-builder account.builder create 18 3 1

注意:執行以上指令時需要在 /etc/swift目錄下。

指令中的參數指定了分區、副本和小時的數量,用來限制分區多次移動。可以參考man頁面中的swift-ring-builder擷取更多資訊。

現在添加區域以均衡ring服務。指令格式如下:

swift-ring-builder <builder_file> add <zone>-<ip_address>:<port>/<device><weight>

執行下列指令:

sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/device 1

sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/device 1

sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/device 1

sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/device 1

sudo swift-ring-builder object.builder rebalance

sudo swift-ring-builder container.builder add z1-127.0.0.1:6011/device 1

sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/device 1

sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/device 1

sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/device 1

sudo swift-ring-builder container.builder rebalance

sudo swift-ring-builder account.builder add z1-127.0.0.1:6012/device 1

sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/device 1

sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/device 1

sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/device 1

sudo swift-ring-builder account.builder rebalance

啟動Swift服務

使用以下指令啟動swift和REST API:

sudo swift-init main start

sudo swift-init rest start

測試Swift

可以通過Swift指令或Horizon提供的Web管理面闆測試Swift是否正确運作。

首先,将 /etc/swift目錄的屬主設為swift.swift:

sudo chown -R swift.swift /etc/swift

執行以下指令檢視是否能得到正确的account、容器數量和存儲的對象資訊:

swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swift -K swift stat

StorageURL: http://127.0.0.1:8080/v1/AUTH_c7970080576646c6959ee35970cf3199

Auth Token: ba9df200a92d4a5088dcd6b7dcc19c0d

Account: AUTH_c7970080576646c6959ee35970cf3199

Containers: 1

Objects: 1

Bytes: 77

Accept-Ranges: bytes

X-Trans-Id: tx11c64e218f984749bc3ec37ea46280ee

至此,Server1終于安裝完畢!

三、Server2

Server2僅運作nova的運算服務。

(一)安裝底層OS

安裝64位Ubuntu12.04伺服器。

(二)配置網絡

安裝網橋軟體:

sudo apt-get install bridge-utils

編輯 /etc/network/interfaces檔案,如下所示:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 10.10.10.3

netmask 255.255.255.0

broadcast 10.10.10.255

gateway 10.10.10.1

dns-nameservers 10.10.8.3

auto eth1

iface eth1 inet static

address 192.168.3.2

netmask 255.255.255.0

network 192.168.3.0

broadcast 192.168.3.255

重新開機網絡:

sudo /etc/init.d/networking restart

(三)NTP用戶端

安裝NTP軟體包:

sudo apt-get install ntp

編輯 /etc/ntp.conf檔案,增加如下内容以同步至server1:

server 10.10.10.2

重新開機NTP服務使配置生效:

sudo service ntp restart

(四)Nova元件(僅nova-compute)

安裝Nova及其依賴包:

sudo apt-get install nova-compute

如下所示,編輯 /etc/nova/nova.conf檔案。該檔案與Server1中的一緻:

--dhcpbridge_flagfile=/etc/nova/nova.conf

--dhcpbridge=/usr/bin/nova-dhcpbridge

--logdir=/var/log/nova

--state_path=/var/lib/nova

--lock_path=/run/lock/nova

--allow_admin_api=true

--use_deprecated_auth=false

--auth_strategy=keystone

--scheduler_driver=nova.scheduler.simple.SimpleScheduler

--s3_host=10.10.10.2

--ec2_host=10.10.10.2

--rabbit_host=10.10.10.2

--cc_host=10.10.10.2

--nova_url=http://10.10.10.2:8774/v1.1/

--routing_source_ip=10.10.10.2

--glance_api_servers=10.10.10.2:9292

--image_service=nova.image.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:[email protected]/nova

--ec2_url=http://10.10.10.2:8773/services/Cloud

--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens

--api_paste_config=/etc/nova/api-paste.ini

--libvirt_type=kvm

--libvirt_use_virtio_for_bridges=true

--start_guests_on_host_boot=true

--resume_guests_state_on_host_boot=true

# vnc specific configuration

--novnc_enabled=true

--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html

--vncserver_proxyclient_address=10.10.10.2

--vncserver_listen=10.10.10.2

# network specific settings

--network_manager=nova.network.manager.FlatDHCPManager

--public_interface=eth0

--flat_interface=eth1

--flat_network_bridge=br100

--fixed_range=192.168.4.1/27

--floating_range=10.10.10.2/27

--network_size=32

--flat_network_dhcp_start=192.168.4.33

--flat_injected=False

--force_dhcp_release

--iscsi_helper=tgtadm

--connection_type=libvirt

--root_helper=sudo nova-rootwrap

--verbose

重新啟動Server2上的nova-compute服務:

sudo service restart nova-compute

利用如下指令測試雲中第二個運算節點(即Server2)是否正常運作:

sudo nova-manage service list

Binary Host Zone Status State Updated_At

nova-network server1 nova enabled :-) 2012-04-20 08:58:43

nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44

nova-volume server1 nova enabled :-) 2012-04-20 08:58:44

nova-compute server1 nova enabled :-) 2012-04-20 08:58:45

nova-cert server1 nova enabled :-) 2012-04-20 08:58:43

nova-compute server2 nova enabled :-) 2012-04-21 10:22:27

如果看到類似結果,則說明安裝已經成功可以使用。

至此,Server2安裝完畢!

三、Client1

(一)安裝OS

安裝64位Ubuntu12.04桌面版。

(二)配置網絡

如下所示,編輯 /etc/nova/nova.conf檔案:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 10.10.10.4

netmask 255.255.255.0

broadcast 10.10.10.255

gateway 10.10.10.1

dns-nameservers 10.10.8.3

(三)NTP用戶端

安裝NTP軟體包:

sudo apt-get install -y ntp

編輯 /etc/ntp.conf檔案,增加如下内容以同步至server1:

server 10.10.10.2

重新開機NTP服務使配置生效:

sudo service ntp restart

(四)用戶端工具

如前所述,Ubuntu12.04桌面版用來制作鏡像,同樣它也可以使用nvoa、glance和swift指令行工具管理雲。

使用下列指令安裝我們需要的指令行工具:

sudo apt-get install python-novaclient glance-client swift

接着安裝qemu-kvm:

sudo apt-get install qemu-kvm

輸入環境變量,并将其添加進 ~/.bashrc腳本中:

export SERVICE_TOKEN=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://10.10.10.2:5000/v2.0/"

export SERVICE_ENDPOINT=http://10.10.10.2:35357/v2.0

運作nova和glance指令檢視是否與OpenStack正常連接配接:

nova list

+--------------------------------------+------------+--------+----------------------+

| ID | Name | Status | Networks

|

+--------------------------------------+------------+--------+----------------------+

| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | ACTIVE | private=192.

168.4.35 |

| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.

168.4.36 |

+--------------------------------------+------------+--------+----------------------+

glance index

ID Name Disk Container Size

Format Format

------------------------------------ ------------------------------

----------------

65b9f8e1-cde8-40e7-93e3-0866becfb9d4 windows qcow2 ovf

7580745728

f147e666-990c-47e2-9caa-a5a21470cc4e debian qcow2 ovf

932904960

f3a8e689-02ed-460f-a587-dc868576228f openSUSE qcow2 ovf

1072300032

aa362fd9-7c28-480b-845c-85a5c38ccd86 CentOScli qcow2 ovf

1611530240

49f0ec2b-26dd-4644-adcc-2ce047e281c5 ubuntuimage qcow2 ovf

1471807488

(五)管理面闆

打開浏覽器輸入Server1的IP位址,如:http://10.10.10.2,便進入管理面闆的登陸頁面。使用使用者名“admin”和密碼“admin”進行登陸來管理您剛建好的OpenStack吧。

                                    第三部分 OpenStack鏡像管理 

一、簡介 

很多源都有為OpenStack已經編譯好的各種鏡像了,您可以直接下載下傳并通過使用這些鏡像來熟悉OpenStack。

不過如果是為生産環境進行部署的話,您一定需要建構含有定制軟體或配置的鏡像檔案。不要着急,本章将引領您完成幾種較為流行的Linux發行版鏡像,最後也将制作一份Windows的鏡像。

由不同的Linux發行版制作鏡像時,過程幾乎一樣,僅有微小的差别而已。由于含有cloud-ini軟體包,人們用Ubuntu系統制作鏡像檔案變得非常容易。Cloud-init軟體在執行個體運作時能夠自動維護執行個體配置,也将為無密碼登陸完成密匙導入以及完成設定主機名等任務。每個執行個體都将通過169.254.169.254的中繼資料接口,從nova運算中讀取特定的配置。

如果您制作發行版不含有諸如cloud-init此類的軟體包,您就需要自行完成密匙導入等操作了。說來也簡單,隻需向rc.local檔案中添加相關指令即可。

如前所述,建立Linux不同發行版的過程除了幾細微之處外,其餘完全一緻。不同點将在後文闡述。

本文所有的例子,都是在KVM基礎上完成的。正像前兩章說道的那樣,現在我正在使用client1。

接下來的操作将制作很多鏡像,這些鏡像代表一個沒有分區的硬碟。 

二、建立Linux鏡像

第一部,首先是在Client1上建立一塊空鏡像,這塊鏡像用作虛拟機的硬碟,是以請保證留出你所需的空間的大小:

kvm-img create -f qcow2 server.img 5G

(一)安裝準備

下載下傳你所需的Linux發行版iso原鏡像檔案,比如您想安裝Ubuntu,您可以使用wget或浏覽器從網站“http://releases.ubuntu.com”獲得iso檔案。

将下載下傳的iso檔案置入虛拟機的CD-ROM後,啟動KVM一個虛拟機執行個體。您将看到安裝過程的開始。鍵入如下指令,它将在端口0開放VNC服務:

sudo kvm -m 256 -cdrom ubuntu-12.04-server-amd64.iso -drive file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :0

使用0這個展示端口連入虛拟機的VNC,并完成安裝。

舉例如下,client1的IP位址是10.10.10.4,則通過下列指令通路vnc:

vncviewer 10.10.10.4 :0

注意,在制作Linux鏡像過程中,請建立一個單獨的ext4格式分區并将其挂在swap分區下。

安裝結束後,通過執行下列指令重新載入虛拟機:

sudo kvm -m 256 -drive file=server.img,if=virtio,index=0 -boot c -net nic -net user -nographic -vnc :0

此時,您可以在這個系統上安裝定制的軟體包,進行系統更新,添加使用者或更改配置了。

(二)Ubuntu 

執行以下指令:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install openssh-server cloud-init

清除 /etc/udev/rules.d檔案的網絡裝置命名規則,因為這些規則将從執行個體的網卡獲得。

sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules

(三)Fedfora 

運作如下指令:

yum update

yum install openssh-server

chkconfig sshd on

然後編輯 /etc/sysconfig/network-scripts/ifcfg-eth0檔案如下所示:

DEVICE="eth0"

BOOTPROTO=dhcp

NM_CONTROLLED="yes"

ONBOOT="yes"

清除 /etc/udev/rules.d檔案的網絡裝置命名規則,因為這些規則将從執行個體的網卡獲得。

sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules

關閉虛拟機。

由于Fedora沒有cloud-init或類似軟體,您需要親自進行幾步配置使執行個體可以得到諸如ssh key這樣的中繼資料。

編輯 /etc/rc.local檔案并且把以下内容粘貼到“touch /var/lock/subsys/local”行前:

depmod -a

modprobe acpiphp

# simple attempt to get the user ssh key using the meta-data service

mkdir -p /root/.ssh

echo >> /root/.ssh/authorized_keys

curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key| grep 'ssh-rsa' >> /root/.ssh/authorized_keys

echo "AUTHORIZED_KEYS:"

echo "************************"

cat /root/.ssh/authorized_keys

echo "************************"

(四)OpenSUSE

選擇ssh服務,curl以及其他需要的包。

安裝ssh伺服器:

zypper install openssh

安裝crul:

zypper install curl

使用如下步驟将Ssh Key注入執行個體中:

首先,建立檔案 /etc/init.d/sshkey并且寫入下列内容:

echo >> /root/.ssh/authorized_keys

curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys

echo "AUTHORIZED_KEYS:"

echo "************************"

cat /root/.ssh/authorized_keys

echo "************************"

然後,為該檔案設定權限:

chmod 755 /etc/init.d/sshkey

将sshkey服務設定為開機自動啟動:

chkconfig sshkey on

使用下列指令設定防火牆(而非iptables),令其允許ssh服務:

yast2

最後同樣地,清除 /etc/udev/rules.d檔案的網絡裝置命名規則,因為這些規則将從執行個體的網卡獲得。

sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules

(五)Debian 

安裝時選擇SSH伺服器,Curl及相關軟體。

然後進行必要的設定,為key注入而編輯 /etc/rc.local檔案并增加如下内容:

echo >> /root/.ssh/authorized_keys

curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys

echo "AUTHORIZED_KEYS:"

echo "************************"

cat /root/.ssh/authorized_keys

echo "************************"

同樣地,清除 /etc/udev/rules.d檔案的網絡裝置命名規則,因為這些規則将從執行個體的網卡獲得。

sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules

(六)CentOS6及RHEL6 

安裝時選擇SSH伺服器,Curl及相關軟體。

然後進行必要的設定,為key注入而編輯 /etc/rc.local檔案并增加如下内容:

echo >> /root/.ssh/authorized_keys

curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys

echo "AUTHORIZED_KEYS:"

echo "************************"

cat /root/.ssh/authorized_keys

echo "************************"

 編輯 /etc/sysconfig/network-scripts/ifcfg-eth0檔案如下所示:

DEVICE="eth0"

BOOTPROTO=dhcp

NM_CONTROLLED="yes"

ONBOOT="yes"

同樣地,清除 /etc/udev/rules.d檔案的網絡裝置命名規則,因為這些規則将從執行個體的網卡獲得。

sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules

(七)上傳Linux鏡像 

使用如下指令上傳鏡像:

glance add name="<Image name>" is_public=true container_format=ovf disk_format=qcow2 < <filename>.img

三、建立Windows鏡像 

第一步,仍然是在Client1上建立一塊空鏡像,這塊鏡像用作虛拟機的硬碟,是以請保證留出你所需的空間的大小:

kvm-img create -f qcow2 windowsserver.img 20G

(一)安裝作業系統 

當執行個體運作時,OpenStack利用virtio接口來使用鏡像,于是鏡像中的作業系統需要裝有virtio驅動。不巧的是,預設Windows Server 2008是沒有virtio驅動的。您可以在如下網址:http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin 下載下傳裝有該驅動的iso鏡像并使用該鏡像進行安裝。

譯者注1:Virtio 是半虛拟化 hypervisor 中位于裝置之上的抽象層。virtio 由 Rusty Russell 開發,virtio 是對半虛拟化 hypervisor 中的一組通用模拟裝置的抽象。該設定還允許 hypervisor 導出一組通用的模拟裝置,并通過一個通用的應用程式設計接口(API)讓它們變得可用。[來源:開源中國http://www.oschina.net/p/virtio]

譯者注2:該連結的virtio-win是0.1-22版,不能用。下載下傳用1.1.16新版即可。

執行此指令開始安裝:

sudo kvm -m 1024 -cdrom windows2008.iso -drive file=windowsserver1.img,if=virtio -boot d -drive file=virtio-win-0.1-22.iso,index=3,media=cdrom -device virtio-net-pci -net nic -net user -nographic -vnc :5

當安裝提示您選擇一塊硬碟裝置步驟時,您并不能看到目前有可用裝置。點選左下方的“載入裝置(Load drivers)”按鈕,選擇第二CDROM後,含有virtio驅動的硬碟便被加載了。

在安裝結束之前,您需要重新開機系統一次,此時您可以安裝其它您所需的軟體或執行任何需要的配置更改。除此之外,請務必開放執行個體中的遠端桌面,因為遠端桌面将是您連接配接并使用該執行個體的唯一途徑。同時,Windows防火牆應該相應地設定為對ICMP和RDP開放。

(二)上傳Windows鏡像

關閉虛拟機并将該鏡像使用如下指令上傳至 OpenStack 中:

glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 < windowsserver.img