天天看點

《OpenStack實戰指南》—— 2.2 在Ubuntu上使用源代碼編譯安裝

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

對于各個版本的linux來說,都會制作openstack相應的軟體包。雖然在2.1節中介紹了二進制包安裝,但是在這裡筆者還是會講一下源代碼安裝openstack基本元件的過程,因為從學習的角度來說,通過源代碼安裝openstack各個元件的過程,可以使讀者對openstack的架構和各個元件的作用有一個比使用二進制安裝更全面的了解。另一個好處是,二進制包的釋出會滞後于源代碼,如果想在第一時間嘗試一些最新的功能或修複bug後的版本,源代碼安裝是個不錯的選擇。當然,源代碼安裝比二進制包安裝複雜,有一定的難度,并且要使用者自己去解決一些依賴問題。

在本節中,将會介紹如何使用源代碼方式安裝keystone、glance、nova、neutron、cinder和horizon元件。openstack各個項目的代碼都可以在github上擷取。在接下來的安裝過程中,筆者按照1個controller節點、1個network節點、1個compute節點、1個volume節點的架構來部署。因為其架構方式和二進制安裝一樣,是以一些基礎配置,如每個節點的ip設定、ntp配置等,在本節中跳過。本節使用的作業系統依舊是ubuntu 12.04 lts版本。

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

controller上各個元件負責的功能與使用二進制包安裝時的一樣。在本節中,如果沒有特殊說明,那麼與2.1節中介紹的架構一樣,隻是安裝方式上有些差別。

1.?前置準備

首先進行ip配置,以及rabbitmq、ntp的安裝配置,可參考2.1節相關内容。

使用postgresql作為openstack的後端資料庫。如果需要一個穩定的開源資料庫,那麼postgresql可以優先考慮。此外,需要安裝python通路postgresql時用的psycopg2,這是目前流行的postgresql的python連接配接庫。指令如下:

建立一個資料庫使用者openstackdbadmin,設定密碼為openstack123。這個使用者将作為各個元件連接配接資料庫的唯一使用者。示例代碼如下:

在二進制包安裝的時候使用root使用者,并且安裝的時候會把配置檔案配置成特定的使用者組屬性,不需要手動幹預。但是在使用源代碼安裝的時候,必須處理好這些檔案的使用者組屬性關系。在本節中,筆者将會以openstack這個使用者的身份去安裝、配置、啟動服務。首先建立一個稱為openstack的使用者,并且加入到sudo組,讓其有使用sudo的權限。指令如下:

接下來的包都會放在openstack這個使用者的主目錄下,在這裡是/home/openstack

除非特殊說明,否則本節其餘操作都是在openstack這個使用者下執行。

下載下傳需要用到的git工具的源代碼,在ubuntu下安裝,指令如下:

對于學習源代碼安裝的一個較好的,也是官方的方法就是閱讀openstack開發人員寫的一套安裝腳本,我們稱之為devstack,其源代碼在github上維護。這個項目的初衷是讓開發人員能夠快速建立一個完整的openstack開發環境,該項目由rackspace的團隊建立,并且由openstack的開發社群維護,它的腳本更新速度應該是最接近于openstack開發的,一些新的功能在腳本中都會更新展現出來。無論是開發人員還是系統運維工程師,這個腳本都是學習openstack的一個重要資源。後面的安裝也是基于這個腳本的,會用到裡面的一些檔案,是以,首先需要下載下傳該項目腳本的代碼:

源代碼安裝和二進制包安裝的差別主要展現在幾個方面,如果讀者能把握住哪些是不同的,哪些是相同的,那麼學會二進制包安裝後,源代碼安裝的學習就會相對容易點。第一個差別是安裝的軟體包不同。在二進制包中,各個linux發行平台已經把openstack元件中每個軟體打成相應的包,其中包括運作元件所需的很多依賴包。而源代碼安裝方式,除了安裝openstack社群釋出的元件包外,還需要手動安裝那些元件所需要的依賴包。能否完全正确地安裝好依賴包是要解決的一個關鍵問題。第二個差別展現在配置檔案上。二進制包安裝好後,都會在/etc下建立好所需的配置檔案。而源代碼安裝需要自己去建立相關目錄。第三個差別是啟動問題。在二進制包安裝好後,往往都配置成了相應linux系統版本的啟動方式,譬如使用service啟動。而源代碼安裝方式,需要自己寫啟動腳本,每個人的啟動腳本和方式都不一樣,因人而異。還有一些小的差別就是源代碼安裝需要建立使用者,自己設定 openstack元件的安裝路徑、使用者、權限,手動建立一些必要的目錄等。至于兩者相同的地方,很明顯就是資料庫,以及配置檔案中的參數。

openstack各個元件的配置檔案都會放在/etc下的各個目錄中,包括nova、glance、 keystone、neutron等。這樣做是為了統一規範每個元件的配置目錄,友善管理。這裡介紹一下安裝的思路。一般情況下,在/etc下建立元件的目錄,設定為使用者的權限,在各個元件的源代碼中也有相應的etc目錄,其中包括需要用到的配置檔案。把要用的配置檔案從源代碼目錄複制到/etc下元件的目錄中,然後編輯/etc下相應的配置檔案。安裝的思路是首先確定每個元件需要的依賴包已經安裝,然後在源代碼的第一層目錄,執行python的安裝指令。這樣一個元件就安裝好了。

2.?安裝部署keystone

首先下載下傳keystone源代碼,并且切換到havana版本的穩定分支:

在/etc下建立名為keystone的目錄。設定屬主為使用者openstack。從下載下傳的keystone源代碼中把/etc下的配置檔案複制到/etc/keystone下,其代碼如下:

keystone有許多配置選項,這也是openstack一個比較大的特點。openstack會盡量支援更多的,同時比較流行的一些開源軟體來完成類似功能。由于不同的開源軟體有自身的特點和功能,是以openstack可給使用者比較多的選擇餘地,使用者可根據自身的情況選擇适合的方式。在keystone中,選擇存放認證資料(包括使用者、密碼等資料)的方式時,可以選擇ldap、資料庫。在這裡我們把用得比較多,同時也比較容易上手的mysql資料庫作為存放資料的方式。在認證方式上,keystone可以使用原有的uuid的方式,也可以選擇後來加入的pki方式來增強安全性。在本節中,會介紹一些使用廣泛的配置,其他更多内容可以從第5章擷取。需要配置keystone.conf以下主要的選項:

初始化keystone,首先要建立keystone所用的資料庫,以及一些配置檔案中用到的目錄,然後初始化keystone用的pki。

需要建立不存在的目錄,用來存放keystone日志,可在keystone.conf中定義,其代碼如下:

需要建立不存在的目錄,用來存放keystone使用pki的相關檔案,其代碼如下:

建立keystone所用的資料庫,代碼如下:

切記要退出postgres使用者,傳回到openstack使用者環境中,其代碼如下:

進入devstack項目的目錄,因為要用到裡面的一些檔案。

在devstack項目中,開發人員告訴了我們需要安裝哪些前置依賴的和需要使用的第三方的軟體包,這裡需要安裝general和keystone,其代碼如下:

keystone需要用到passlib軟體包,使用pki時必須安裝,其代碼如下:

安裝keystone元件,其代碼如下:

進入keystone目錄,其代碼如下:

下面開始安裝keystone client。keystone client是一個使用keystone的指令行接口工具,和dashboard一樣,它能完成大部分的日常操作。熟悉和熟練使用指令行工具對維護openstack及其每一個元件是非常重要的,系統管理者90%的工作是通過client指令行完成的,而不是通過dashboard。

切記退回到openstack的home目錄,所有元件的頂層都在使用者home目錄下,其代碼如下:

在安裝的過程中,如果出現依賴包安裝報錯的情況,可根據出錯的python軟體包的url進行手動下載下傳,并進行安裝,然後傳回安裝keystone client,其代碼如下:

3.?使用tmux啟動keystone

至此,已經安裝好了keystone服務和指令行下的keystone client。接下來要啟動keystone程序。我們是通過源代碼方式來安裝keystone的,沒有配置成ubuntu服務管理程式,是以,不能像二進制包方式安裝後那樣,通過指令“service keystone start”來啟動,而是需要直接運作keystone的可執行檔案,并加上一些配置檔案的參數。

可執行檔案都放在bin目錄下。--config-file參數指明了keystone的配置檔案路徑。

啟動完成後,是不是發現什麼輸出也沒有,shell也不會傳回提示符?而一旦關掉ssh視窗或按+組合鍵後,keystone程序就結束了。是不是應該把這個程式放在背景運作呢?這裡要用到終端複用軟體tmux。tmux是一個類似于screen的軟體,采用bsd授權。ubuntu 12.04下預設安裝了這個優秀的軟體,在這裡僅簡單地使用它來打開一個會話。退出前面建立的keystone程序,不要怕,因為我們已經學會如何啟動keystone了。用+組合鍵中斷剛才建立的keystone程序,當然也可以再開啟一個終端會話視窗,用指令kill結束keystone程序。

在下面這行代碼中,new-session打開一個新的會話,-s給這個會話命名為keystone,按Enter鍵之後可以看到一個空白的新的會話。

執行啟動keystone的指令,代碼如下:

讀者可能會發現,這裡介紹的内容看上去和前面介紹的内容差不多。然後先按住和<b>鍵不放,然後再按鍵,退出剛才建立的會話。是不是又傳回到我們建立會話之前的視窗了?現在使用指令“ps aux | grep keystone”,檢視一下keystone的程序是否還存在。不存在的話記得發郵件告訴筆者。現在回到tmux,在源代碼安裝時會多次使用tmux,使用下面的指令可列出将會用到的和tmux相關的指令。</b>

列出目前存在的所有的tmux會話,代碼如下:

傳回會話名為name的會話,代碼如下:

現在可以使用指令“tmux attach-session -t keystone”回到剛才建立的keystone會話中。tmux還有很多參數和指令,可以使用指令“man tmux”檢視。

接下來是關于使用keystone的内容,包括建立使用者等,都和二進制包安裝方式一樣,讀者可以參考2.1節的相關内容。

4.?安裝部署glance

安裝glance的思路和過程與安裝keystone類似,大緻的過程可以分為下載下傳源代碼、安裝依賴軟體包、安裝glance和glance client、編輯glance的配置檔案等。

将openstack的資料目錄放在/data下,包括glance的鏡像和nova的虛拟機等。讀者需要自己建立這個目錄,并且確定這個目錄足夠大能滿足使用者環境所需的大小。

在安裝過程中,確定這個目錄所在的檔案系統的可用空間有50gb,涉及的指令如下:

安裝glance元件所需要的依賴軟體,指令如下:

安裝glance元件,代碼如下:

建立用來存放glance配置檔案的目錄,和keystone一樣,也是放在/etc下,其代碼如下:

以上給出的是配置檔案中需要修改和注意的部分,其他沒有列出的按照預設設定即可,不要删除其他在這裡沒有列出的配置項。以下給出的配置也是如此。

建立專門的glance目錄用來存放鏡像檔案和鏡像緩存,代碼如下:

5.?啟動glance

glance服務包括glance-registry和glance-api,需要分别啟動這兩個服務程序。同啟動keystone一樣,使用tmux來建立兩個新會話,分别命名為glance-registry和glance-api。指令如下:

6.?安裝部署nova

首先下載下傳nova源代碼,并且切換到havana版本的穩定分支:

安裝nova元件所需要的依賴軟體,代碼如下:

安裝nova元件,代碼如下:

安裝nova client,代碼如下:

配置nova,主要是建立一些必要的目錄,把配置檔案從源代碼目錄中複制到/etc下,設定使用者的sudo權限等,其代碼如下:

把以下内容添加到nova-rootwrap檔案中。

下載下傳novnc,因為novnc不是openstack項目的元件,是以需要去novnc的項目網站下載下傳。

接下來就是編輯配置檔案,可參照2.1節相關内容。注意,把nova.conf中的state_path參數改成現在的/data/nova,資料庫改成使用postgresql的格式。配置檔案完成之後,使用指令nova-manage運作“db sync”同步一下。

7.?啟動nova服務

啟動nova的服務同樣使用tmux,可參照glance和keystone的使用方式。啟動的服務與二進制包安裝方式一樣,代碼如下:

8.?安裝配置neutron-server

安裝neutron-server的方式和前面介紹的keystone、nova、glance類似,主要思路是:下載下傳源代碼、安裝源代碼、建立neutron和open vswitch plugin的目錄并且設定權限、複制源代碼中的配置檔案到相應的目錄中、設定rootwrap配置檔案。剩下的和前幾節類似,即修改配置檔案内容、建立資料庫、啟動服務,這部分内容不再贅述。其代碼如下:

把下面第一行代碼加入到neutron-rootwrap檔案中,接着執行餘下指令。

安裝neutron client,指令如下:

9.?安裝部署cinder

下面安裝cinder元件,代碼如下。注意,由于同前面其他元件安裝類似,是以不再進行具體說明。

添加下面第一行代碼到cinder-rootwrap檔案中,接着執行餘下指令。

其餘的配置檔案内容,包括安裝tgt、建立資料庫等内容,可參照2.1節相關内容。在控制節點上,啟動cinder-api和cinder-scheduler服務即可,其代碼如下:

10.?安裝horizon

安裝horizon的方法完全可以參照devstack的腳本,主要是先安裝apache2等依賴軟體包,然後複制配置檔案,進行一定的修改即可,其代碼如下:

最後,重新開機apache服務。