一個小白使用 devstack 部署 openstack 的心路歷程

fitzeng發表於2017-11-04

0.前言

作為一個想要入門雲端計算的人來說,大多數人的第一步就是學習 openstack,而學習 openstack 的人面臨的第一步就是第一個‘難題’,使用自動化部署工具 devstack 部署 openstack 環境。第一次接觸這個東西,花了兩天多時間在 Ubuntu Server 和 Ubuntu Desktop 的 16.04 版本上成功部署。有很多人說 Desktop 版有很多坑,親測問題確實比 Server 版多,但都是可解決的。其中最對初學者不友好的就是網路問題,下面會介紹為什麼。所以如果你自己買了國外的 VPS 那就好辦了,因為有個騷操作要用到,如果你網速好可能你遇不到這些問題就可以忽略。

下面會分兩個部分介紹,都會將 Server 和 Desktop 上的部署過程描述一遍。
教程推薦 官方的 Doc避坑指南
教程這個東西對於初學者不宜太多,容易亂,只要有一個正確的執行框架就好。碰到其他 bug 直接 Google 就好。

然後介紹下我的環境吧

  • Mac 10.12.6
  • VirtualBox 5.1.28
  • Ubuntu Server 16.04 4G+20G (臨時測試 devstack,聽說坑少)
  • Ubuntu Desktop 16.04 4G+80G (平時使用)
  • VPS(最好有) (由於是乞丐版,不適合直接部署和平時學習)

1.Ubuntu Server 版

安裝 Ubuntu Server

首先肯定是要在 Virtual Box 安裝 Ubuntu Server 了,這一步略過。相信你已經是接觸過一段時間虛擬機器的人了,但是一點注意,竟可能分多一點記憶體和硬碟。由於我不打算日後再這 Server 版使用,所以我的配置是 4G + 20G

SSH 登入虛擬機器

當你建立完成之後面臨的一個問題就是那個介面太醜了。。。所以如果可以在宿主機上操作就好了,SSH 正好滿足你。
至於 SSH 不通使用不了的自己查查資料吧,這裡我主要介紹網路卡配置,我使用了兩個網路卡:
第一個:

做埠對映,將主機的 2222 對映到虛擬機器的 22,這條是為了以後使用 SSH。
第二個:

配完之後再在全域性配置中設定你所選中的網路卡啟用 DHCP。對於網路卡各種連線模式不熟的可以查查資料瞭解一下。

然後連線就是直接在主機下使用

ssh -p 2222 fitzeng@127.0.0.1複製程式碼

fitzeng 改成你的使用者名稱。
如果你出現各種問題連不上可以注意一下兩點:
1.防火牆
2.把 ~/.ssh 資料夾下的 known_hosts 檔案刪了再重連

開始部署

這裡的主教程以官方提供的為準,並且那些注意點我會更新。

部署的指令碼要求是擁有 root 許可權的非 root 使用者。

sudo useradd -s /bin/bash -d /opt/stack -m stack

echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
sudo su - stack

cd /opt/stack
git clone https://git.openstack.org/openstack-dev/devstack
cd devstack複製程式碼

如果上面 clone 太慢或者 clone 不下來的話可以試試 github 的源。

git clone https://github.com/openstack-dev/devstack.git複製程式碼

然後就是新增配置了,如果不懂推薦直接使用官方頁面介紹的。或者使用以下命令

cp samples/local.conf ./
vim local.conf複製程式碼

如果你幸運,講道理最後執行 ./stack.sh 直接一路到底。。。但是還有很多坑正在等待著我們。
但但是有一個很好的是他的 Log 和報錯十分清新,很快可以定位問題所在,有時候直接搜 Log 都會出現解決方法。
如果指令碼直接退出提示沒有 HOST_IP。那麼直接在 local.conf 後面新增

HOST_IP=x.x.x.x
GIT_BASE=https://github.com複製程式碼

HOST_IP具體是什麼在你的虛擬機器上 ifconfig 檢視。然後推薦把 git 源換成 github 的。
這裡你可以檢測一下你的源有沒有問題 apt-get update 有的話直接把有問題的源在 /etc/apt/sources.list.d/ 目錄下移除,移除前建議備份一下。然後推薦 apt-get upgrade 一下,Python 版本保持預設的 2.7.X 就好,如果出現什麼和 Python 3.4 不匹配的 Log 直接忽略。如果你換成 3.4 很多庫會出問題。如果你是 Python 3.X,可以把 /user/bin/ 下的 Python2.X 連結到該目錄下的 Python 檔案。這時執行 python -V 就能看到結果了。

但但但是,上面只是解決了有形的 Bug,還有就是無形的 Bug,你將面臨網路問題,如果你想順暢點可以直接更換源。
修改 pip 源

mkdir ~/.pip
vim ~/.pip/pip.conf

填入:
[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple複製程式碼

修改 sources.list:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

填入:
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse複製程式碼

都改成 aliyun 的。到這時候如果你的網路沒什麼問題,可能會出點環境小問題,dkpg 和各種包等之類的問題,一搜網上基本都有解決方案。

但但但是,如果你的網速下載某些包不超 10Kb/s 那就要用騷操作了。。。因為會一直卡著,網一斷又得重新開始,先 unstack,clean 再 stack,十分不友好。出現問題大多是在下載某個 git 倉庫和某些包的時候。尤其是 nova horizon 之類的,大小到了 300+M。

這裡介紹一個方法:
思路是先 SSH 上你的國外 VPS,下載你的 git 倉庫或其他檔案。然後再 SCP 到你的虛擬機器上。主要是這樣不會中斷,而且無形中就可以是多執行緒操作,開幾個終端 SCP 好幾個檔案。
看看速度對比效果吧,
虛擬機器上下載:

VPS 上下載:

之後自己 SCP 就好了

sudo scp -P 10800 -r root@xx.xx.xx.xx:/fitzeng/horizon /etc/stack/複製程式碼

-r 是 cp 資料夾,然後埠,IP 填你自己的後面跟目錄。這裡可能也有點慢,但是比之前的好而且穩定。

這一切操作都源於友好的 log 機制,看上面的圖片我們可以知道下載地址和存放目錄,所以,知道這些手段就多了起來。
網速夠快也可以直接在本地 clone。

有了這些操作基本就意味著你解決了網路問題,藉助 google 基本可以解決其他庫和環境的問題。
成功圖上傳一波:

2.Ubuntu Desktop 版

基本步驟是和前面一致的,出的問題可能就是你之前在 Ubuntu 上裝過各種軟體(我裝的 Sogou 輸入法,裡面的 fcitx 源影響了速度,甚至有時候直接卡這不動),更改了軟體源或者做過其它的工具更改,按照前面的配置親測可行。如果你之前在 Ubuntu Server 版上裝過,直接把檔案 SCP 過來,如果虛擬機器之間不能通訊,可以先 SCP 到宿主機,再從宿主機通過檔案共享的方式共享到 Ubuntu Desktop。
然後執行就可以了,有了前面的基礎就很簡單了。

那就看直接看結果吧:

3.後記

說實話,這不太算技術文章,純屬個人記錄。本來不太想寫,但是感覺國內環境對開發者有點不友好,如果這篇文章能對初學者有部分幫助我就滿意了,能夠使初學者繼續學習下去。然後這是部署完之後寫的,部署的過程遠不如寫的這麼輕鬆,但是我現在有信心去解決部署過程中碰到的問題,這才是重點。希望你也是。每個人的環境都不一樣,出現的問題也不可能一樣,所以如果你照上面做了還沒有解決可以留言大家一起討論。

最後:
多謝閱讀
祝大家一遍過 ^_^

相關文章