天天看點

《OpenStack實戰指南》—— 2.1 在Ubuntu上使用二進制包安裝apt-get install –y ntp

本節書摘來自華章出版社《openstack實戰指南》一 書中的第2章,第2.1節,作者:黃 凱 毛偉傑 顧駿傑 ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

筆者寫本書的時候,openstack已經發展到havana版本,幾大主流的linux發行版本都會将openstack的源代碼做成各自平台的二進制安裝包,以供使用者使用。随着openstack使用的人越來越多,發行版本對linux的支援力度也越來越大,就目前來看,ubuntu(debian)、redhat、opensuse都有相應的包和開發定制的安裝程式。當然,各個linux平台上的包制作釋出的時間各有快慢,同時支援的版本更新也有快有慢。ubuntu是更新最快的發行版本之一。redhat也越來越重視openstack,更新包的速度也比以前快很多。這裡先以ubuntu作為底層的作業系統,因為ubuntu從openstack的cactus版本開始就将其作為自身一個雲計算的軟體,同時,社群對openstack的支援很好,網絡上很多文檔都是以ubuntu為作業系統進行部署安裝的,并且openstack的開發人員是在ubuntu上進行openstack的開發的,就目前情況來看,其支援度最好。

本節将會介紹如何在ubuntu 12.04 lts上安裝keystone、glance、nova、neutron、cinder和horizon這幾個元件,其中使用4台伺服器,分别作為controller、network、compute、volume節點。這4個節點的名字隻是按照它們需要完成的任務來命名的,并不是說它們有特定的名字。

在controller節點上計劃部署如下元件:

rabbitmq

mysql

keystone

glance

neutron

nova中除去nova-compute的其他元件

cinder中除去cinder-volume的其他元件

horizon

下面詳細介紹一下各個元件。

rabbitmq:在openstack中,各個服務之間是通過消息來互動的。因為openstack使用amqp(進階消息隊列協定)作為其消息傳遞的技術,是以rabbitmq、qpid、zeromq等支援amqp的軟體都是被openstack所支援的。這裡會使用rabbitmq,因為它是第一個被openstack使用的消息傳遞的軟體。openstack通過amqp實作rpc的服務,來保證不同元件之間的通信,rabbitmq是controller中一個非常關鍵的服務。rabbitmq結構圖如圖2-1所示。

《OpenStack實戰指南》—— 2.1 在Ubuntu上使用二進制包安裝apt-get install –y ntp

mysql:openstack所使用的資料庫。包括nova、glance、cinder等在内的元件都會建立自己的資料庫,儲存一些必要的資料。

keystone:openstack的使用者認證元件。它的功能主要是建立管理項目的使用者和各種服務端口,以及進行使用者的身份認證。要使用openstack的任意api,第一步就必須通過keystone的驗證。

glance:用來存放管理虛拟機鏡像和快照的服務,這也是一個最小架構中必須有的服務。

neutron:用來提供虛拟機網絡通信的元件。

nova(除去nova-compute的其他元件):這裡不包括nova-compute,因為controller節點不負責運作虛拟機。nova是個至關重要的元件,也是個相對龐大的元件,其中有很多服務,它是進行生成虛拟機工作的主要服務。

cinder(除去cinder-volume的其他元件):用來建立、删除及管理volume(虛拟磁盤卷),以及給volume做快照等服務的元件。

horizon:openstack的web管理頁面,使用django架構開發。web管理頁面包含了日常使用的大部分功能,提供給使用者一個最直覺的展現方式。很多簡單的二次開發工作都是從horizon開始的。

1.?系統環境準備

在安裝部署openstack之前,首先需要做一些安裝額外軟體和配置網絡等準備,主要包括以下幾個部分:

作業系統為ubuntu 12.04 lts,最小化安裝即可。在安裝系統的時候,安裝openssh-server,分區盡量能有30gb空間,用來完成這個測試環境。

網絡連接配接和ip設定。需要兩個以太網口,配置設定兩個獨立的網絡。

添加openstack havana版本的軟體包源到系統中,并且更新系統。

安裝ntp服務。

mysql,安裝mysql資料庫和python的mysql庫。

rabbitmq,安裝rabbitmq-server作為openstack的amqp。

(1)網絡ip配置

按照架構的設計,controller需要兩個網口,連接配接兩個網段。

eth0所在的網段是一個使用者可通路的網段,在本章中,把這個網絡命名為network-1,将會通過web通路這個eth0所使用的ip來進行登入web的操作。舉例來說,如果筆者現在的pc配置的ip是10.10.101.10,22位的掩碼,那麼筆者的controller的eth0可以配置為10.10.101.10/22這個網段中任何沒有使用的ip位址。

eth1所在的網段是一個私有的管理網段,在本章中,把這個網絡命名為network-2。在實際環境中,所有的節點,無論是controller,還是計算節點,網絡節點都需要有一個網口連接配接這個網段,所有的資料庫連接配接,以及rabbitmq的通信使用的都是這個網口。如果用ssh登入來進行修改配置等工作,也應接入這個網段進行操作。如果需要監控openstack環境中的伺服器和虛拟機,也建議通過接入這個網段進行。這個網段不需要有能通路外部網絡的功能。在一個簡單的模型中,隻要把這些網口接入到一台交換機上即可,示例如下所示:

以上是筆者環境中的網絡配置檔案,讀者可以根據自己環境的實際情況進行修改,然後重新開機伺服器網絡。指令如下,提示符#的指令操作表示是在root使用者環境下進行的操作。

(2)添加havana的源

ubuntu 12.04預設的openstack的版本是essex版本,如果不安裝其他版本的源,那麼預設指令安裝的都是essex版本的軟體包,這點需要使用者注意。此處,要加入openstack軟體包的havana的源,然後更新一下系統的軟體包資訊和已安裝的軟體。指令如下:

加入新的源後會在/etc/apt/sources.list.d/目錄下多出一個havana源的檔案,如下所示:

更新完系統後可以重新開機,也可以等安裝完openstack後再重新開機。

(3)安裝ntp服務

在整個openstack叢集中,規模可以從幾個節點到幾十個節點,甚至幾百個,為了保證這些叢集中的節點互相通信正常,需要使各個節點的時間一緻,誤差不能太大,是以需要一台ntp伺服器來提供時間同步,在這個測試環境中,選擇在控制節點上安裝ntp服務。指令如下:

(4)安裝mysql資料庫

openstack的主要元件都需要資料庫的支援。openstack支援mysql、postgresql、sqlite。在這個測試環境中,選擇mysql作為資料庫。控制端安裝mysql的server,節點通過python的mysql用戶端子產品連接配接到mysql server。指令如下:

安裝mysql的過程中,會提示建立mysql的root密碼。

預設mysql隻監聽127.0.0.1,而在實際的生産環境中,出于安全考慮,資料庫通信經過的是管理網段,隻需讓mysql監聽管理網的ip。在這個安裝執行個體中,可以将管理網ip設定為10.80.80.10。重新開機mysql使配置生效。代碼如下:

(5)安裝messaging服務

openstack元件之間的通信需要通過支援amqp的messaging服務軟體。openstack支援的有rabbitmq、qpid和zeromq。這裡安裝rabbitmq。指令如下:

安裝rabbitmq服務軟體時,rabbitmq預設使用者guest的密碼是guest,出于安全考慮,使用者可以在實際環境中更改密碼。如果使用者的rabbitmq啟動失敗,那麼可能是由于/etc/hosts中127.0.0.1所對應的主機名和使用指令hostname後的結果不一緻,此時可以嘗試在/etc/hosts的localhost前面把hostname加入,然後再啟動rabbitmq。修改guest密碼的指令是:

至此,前置工作已經完成,下面可以開始安裝openstack了。

2.?安裝部署keystone

把keystone作為安裝openstack的第一步,因為它是整個openstack的認證系統,就好比屋子的一扇門,隻有通過了這扇門,才能進行後面的操作。另外,keystone負責openstack的使用者管理,隻有建立了使用者,才能以這個使用者的身份進入這扇門。

安裝配置keystone的過程主要分為下面幾步:

安裝軟體包和修改配置檔案。

建立keystone的資料庫,并建立keystone的表結構。

啟動服務,确認服務正常運作。驗證keystone可以使用。

建立keystone的管理者使用者。

定義keystone使用的services和api endpoints。

以建立的使用者來使用keystone用戶端指令行。

(1)安裝和配置keystone

直接安裝keystone一個包即可,系統同時會自動安裝python-keystoneclient的用戶端包,其指令如下:

keystone的配置檔案放在/etc/keystone目錄下,要修改的主要是keystone.conf這個檔案。主要修改以下幾個參數:

admin_token:這個選項至關重要,可以将其比喻成擷取keystone管理權限的“鑰匙”。在這裡可以設定一個複雜的字元串,因為太簡單的字元串容易被破解。由于是測試環境,筆者就用openstack這個字元串作為admin的token。此時,因為在keystone中還未建立任何使用者,是以這個token和使用者無關,但是這個token在生産環境中需要足夠複雜且絕對保密。

debug與verbose:這兩個選項均設定為true,用于測試時檢視詳細的輸出資訊,而輸出資訊會儲存在log_dir和log_file定義的目錄檔案中。

connection:這個選項定義keystone使用的資料庫的url。這裡用了mysql的keystoneuser使用者,密碼是openstack,資料庫位址是localhost,也就是本機,資料庫名是keystone。注意,目前我們還沒有建立這個資料庫和資料庫使用者。

在這個測試環境中,保持配置檔案中其他選項不變。

(2)keystone的資料庫操作

需要在mysql中建立一個keystone的資料庫,再建立一個使用者,賦予其對keystone資料庫的操作權限,代碼如下。注意,建立的資料庫名、使用者名及密碼要和上面keystone.conf配置檔案中的connection選項一緻。

建立好的資料庫是空的,需要初始化keystone資料庫的表結構。keystone提供了一個很友善的建立結構的指令:

運作成功之後,可以進入mysql檢視keystone這個資料庫的表結構和字段。

(3)确認keystone服務正常運作

配置檔案修改後需要重新開機服務:

如何确認keystone服務正常啟動?根據筆者的經驗,可以從幾個方面入手,這個也是後面經常會使用的方法。

使用指令“service keystone status”檢視keystone程序是否為running狀态。

檢視log檔案。log檔案被定義在keytone.conf中,預設是/var/log/keystone/keystone.log,檢視是否有出錯日志。如果設定了debug和verbose為true,那麼資訊會很詳細,有利于排錯。

調用指令“keystone client”。其實前兩步是檢視服務是否正常啟動,真正确認還需要第三步,即排錯。服務啟動了并不代表keystone能如使用者所願地進行工作,有時配置選項設定成不同的參數,服務也能正常運作,但是使用keystone的時候會出錯,是以,運作一個實際的指令來驗證keystone是否能正常工作。運作指令前首先要輸入token和keystone的endpoint:

前面兩行是設定token和endpoint的環境變量。可以把它放入一個檔案裡,然後每次使用openstack之前隻要執行“source這個檔案”即可。還記得前面在keystone配置檔案中的一個選項admin_token嗎?這裡的第一個token使的就是當時設定的那個值。第三行指令是測試keystone是否能正常運作,需要列出keystone中的使用者。輸出是一個空行?不用擔心,這是正常運作的表現,至少沒有報錯資訊。運作指令的時候,建議結合日志的方法,再打開一個視窗使用指令tail日志檔案,檢視是否有報錯情況。因為到目前為止還沒有建立過使用者,是以肯定沒有使用者使用的使用keystone服務的日志。

(4)建立第一個keystone使用者

接下來的部分可能有點煩瑣和難以了解,但筆者不打算在這裡詳細講解每條指令的意思,也不會說明為什麼要這樣做。這些原理性的内容将在第5章詳細講解。這裡的任務是快速地把基本環境搭起來,如果讀者對這部分的内容産生疑惑,可以先照着步驟去做,相信等有了一個完整可用的體系後,在使用中會慢慢了解其中的含義。

這裡将建立一個使用者、一個tenant和一個role,它們之間的關系是使用者屬于tenant,使用者在tenant中可以有不同的角色。記住,操作之前一定要設定token和endpoint這兩個環境變量。

首先,建立一個具有管理權限的tenant,稱為admin,其代碼如下:

然後,建立一個使用者,命名為admin,密碼設定為openstack,其代碼如下:

最後,把前面建立的tenant、使用者和role組合起來,在admin的tenant中配置設定admin的角色給使用者admin,指令如下:

(5)定義services和api endpoints

為了使用keystone來認證使用者使用的openstack中的其他元件,需要在keystone中建立元件的服務和相應的api endpoints,元件服務的api endpoints是一組url加端口号,用來提供元件服務的api接口。

這裡需要建立一個keystone的服務和keystone的api endpoints,其代碼如下:

endpoint-create指令中的service id是service-create指令得到的id号。publicurl裡面的ip使用對外是可以通路的。adminurl和internalurl使用内部管理的ip,當然這個也可以視實際情況而定。

(6)使用keystone指令行用戶端

使用指令行用戶端需要通過認證,有以下兩種認證的方式。

使用keystone.conf配置檔案中的token認證,設定以下兩個環境變量:

其中填入需要認證使用者的tenant、使用者名和密碼,最後一個是認證的url,仔細觀察和keystone的endpoint中的publicurl的關系。

第一種方式通過設定os_service_token和os_service_endpoint來認證,适用于keystone中還沒有管理者權限的使用者的情況。現在我們有了一個管理者使用者,就應該通過使用者登入,而不是使用token。需要取消os_service_token和os_service_endpoint這兩個變量,然後再導入使用者的認證。如果同時設定了兩種方式,那麼系統會有一個忽略使用者認證的警告,仍舊使用token的認證。指令如下:

可以把認證方式的變量寫在一個檔案中,這裡指令為openstackrc,在以後每次使用的時候,導入以下檔案即可。

3.?安裝glance鏡像元件

glance元件完成鏡像模闆snapshot的存儲工作。glance主要包括了glance-api和glane-registry兩個服務,其安裝和配置都比較簡單,主要分為以下幾步:

安裝軟體包,編輯配置檔案。

建立glance的資料庫。

在keystone中,建立glance的使用者、服務和endpoint。

初始化glance資料庫,啟動服務,确認服務正常運作。

在glance中添加虛拟機鏡像。

(1)安裝軟體包,編輯配置檔案

安裝glance服務時,将把glance-api、glance-registry、python-glanceclient都安裝上。安裝指令如下:

glance的配置預設檔案在/etc/glance下,需要修改如下内容。

glance-api.conf的修改如下:

(2)建立glance資料庫

根據上面配置檔案中設定的sql_connection,在資料庫中建立使用者名為glanceuser,密碼為openstack。建立資料庫glance,賦予glanceuser對資料庫glance的所有權限,其代碼如下:

(3)在keystone中,建立glance的使用者、服務和endpoint

在這個測試安裝中,glance需要通過keystone來進行使用者的身份認證。我們已經在前面的glance-api和glance-registry配置檔案中設定了認證的使用者等,現在必須在keystone中建立使用者glance,加入service這個tenant,賦予admin的角色,其代碼如下:

在keystone通過使用者驗證後,因為需要知道glance的服務和endpoint api,是以必須在keystone建立,其代碼如下:

兩條指令的service id必須一緻。

(4)初始化glance資料庫,啟動服務,确認服務正常運作

使用glance-manage指令,初始化glance資料庫,其指令如下:

重新開機服務,檢視/var/log/glance目錄下的日志檔案,確定啟動後沒有出錯資訊。也可以在glance-api.conf和glance-registry.conf中設定debug和verbose為true,來得到更多的日志資訊。重新開機代碼如下:

最後,确認一下服務是否運作,其代碼如下:

(5)在glance中添加虛拟機鏡像

到此為止,glance的環境已經搭建好,但是glance中還沒有可用的鏡像,隻是可以用來啟動虛拟機的模闆。模闆可以自己建立,具體建立的方法将會在第6章詳細介紹。在這個測試安裝中,為了友善,使用網絡上一個精簡的可啟動的linux系統作為模闆。首先下載下傳這個小鏡像,其代碼如下:

使用glance指令行用戶端把鏡像添加到glance中。glance會在資料庫中記錄,并把檔案複制到指定的目錄,其代碼如下:

再次運作“glance image-list”指令檢視已上傳的鏡像,其代碼如下:

4.?安裝neutron網絡元件

neutron在整個openstack中負責網絡部分的功能,其實neutron僅僅隻有管理功能,實際的網絡方面的實作依靠的是更加底層的網絡技術,譬如linux網橋、open vswitch和nicira等,在neutron中,這些網絡技術以plugin的形式使用。是以,在各個節點上,需要安裝neutron的不同服務,才能形成一個真正的網絡元件。

在grizzly版本釋出以後,網絡元件改名為neutron,以前叫做quantum,是以,當看到有的文檔或者安裝過程提到quantum的時候,其實指的就是neutron。

在控制節點上,需要主要進行以下幾個步驟:

安裝neutron-server服務,修改配置檔案。

在keystone中建立使用者、服務和endpoint。

在mysql中建立資料庫和使用者。

(1)安裝軟體包,修改配置檔案

neutron的軟體包按照功能可以劃分為多個,在控制節點,隻需要安裝neutron-server的服務。同時,依賴會安裝neutron-plugin-openvswitch。其代碼如下:

修改配置檔案,主要是設定keystone認證和neutron資料庫,其代碼如下:

(2)建立使用者、服務和endpoint

在keystone中建立使用者、服務和endpoint,其代碼如下:

(3)建立neutron資料庫和使用者

因為neutron的資料庫會被其他節點連接配接,是以必須賦予neutron資料庫使用者相應的權限,使neutronuser不但能從本機連接配接,還要能從節點機器上連接配接控制伺服器上的資料庫,其代碼如下:

5.?安裝nova元件

nova項目中雖然包含了很多元件,但是要在控制伺服器上安裝除去nova-compute的其他一切nova元件。其過程主要分為下面幾步:

安裝nova軟體包,設定nova配置檔案。

建立資料庫,初始化nova資料庫。

在keystone中建立nova使用者和endpoint。

1)安裝nova軟體包,并配置相應檔案,指令如下:

nova的配置檔案放在/etc/nova目錄下,這次安裝中需要修改的是api-paste.ini和nova.conf這兩個檔案。

api-paste.ini中要修改的是認證部分,其代碼如下:

nova幾乎全部的配置都是寫在nova.conf中的,其中選項參數很多,這裡,筆者将列出一份測試環境安裝使用的nova.conf配置檔案以供參考。

2)建立并初始化nova資料庫,指令如下:

因為nova資料庫也需要其他節點連接配接,是以必須賦予從localhost和其他節點連接配接的權限,代碼如下:

初始化nova資料庫的表結構:

修改配置檔案和初始化資料庫後,需要重新開機nova所有安裝的服務,其代碼如下:

用如下指令檢視nova服務的狀态,:-)表示服務運作,xxx表示服務停止。也可以檢視/var/log/nova下的各個日志檔案是否有出錯日志。如果有出錯日志和xxx顯示,那麼必須排查錯誤。錯誤很可能出現在nova.conf配置檔案上。在進行下一步前,必須確定服務正常運作,其代碼如下:

3)在keystone中建立nova使用者和endpoint,示例如下:

運作nova的用戶端指令,列出目前可用的鏡像,測試是否能正常運作,其代碼如下:

6.?安裝cinder

cinder有三個元件服務:cinder-api、cinder-scheduler、cinder-volume。要在控制節點上安裝cinder-api和cinder-scheduler,其中cinder-api負責接收其他元件或指令對cinder-volume的請求,而cinder-scheduler則是cinder的排程程式,排程使用哪個volume。

(1)安裝和配置

指令如下:

配置keystone認證檔案,其代碼如下:

(2)建立資料庫和keystone使用者

建立和cinder.conf中connection變量一緻的資料庫使用者名及密碼,其代碼如下:

初始化資料庫cinder表結構:

在keystone中添加cinder使用者和服務的endpoint,其代碼如下:

重新開機cinder服務,其代碼如下:

可以使用指令檢視cinder服務的狀态,其代碼如下:

7.?安裝horizon

horizon是openstack的一個dashboard,也就是以網頁形式面向使用者的一個界面。通過horizon,使用者可以很友善地使用openstack,而不必使用煩瑣的指令行。安裝openstack的dashboard的過程很簡單,其指令如下:

安裝好以後,就可以使用web浏覽器了,這裡建議使用chrome通路10.80.80.10/horizon。此處暫時可以使用使用者名admin和密碼openstack進行登入。這個界面是ubuntu包裝過的,如果想要用horizon原來的界面,可以去除ubuntu的界面,代碼如下:

至此,可以打開web浏覽器,在位址欄裡輸入10.80.80.10/horizon,其中ip位址需更換成使用者實際環境中的。此時,會看到openstack登入界面,使用使用者名admin和密碼openstack進行登入,如圖2-2所示。

《OpenStack實戰指南》—— 2.1 在Ubuntu上使用二進制包安裝apt-get install –y ntp

在keystone中建立member角色,因為horizon中會用到這個角色,其代碼如下: