1. 程式人生 > >teuthology安裝部署(2)

teuthology安裝部署(2)

Tags: teuthology ceph 自動化測試

ceph自動化測試環境teuthology的安裝部署具體步驟

再次強調,本文所述均建立在Ubuntu14.0LTS系統之上,這是一個非常普通的系統,也是ceph官方推薦使用的。
本文中所克隆的源,有ceph官方的地址,也有H3C的地址,大家都可以自己選擇,並無好壞之分,只是個參考。
本文從簡到難,逐層安裝,沒搞懂的就搜尋下,一步步裝,不要跳著檢視,那樣反而會給自己造成麻煩,如果有什麼概念上的問題,請參看上一篇文章。

paddles的安裝部署

前提:請安裝好Ubuntu系統,在虛擬機器上和物理機上均可,機器要可以上網,配置好apt-get源,使用163的源,或者sohu的都可以。

(1)按照系統級別依賴
配置好apt-get的源之後,通過執行簡單命令即可安裝所有依賴

apt-get install python-dev python-virtualenv postgresql postgresql-contrib postgresql-server-dev-all supervisor

# 如果你的機器沒有安裝一些我們所需要的基本工具,我並沒有辦法一一陳述
# 後續碰到了,你可以自行安裝,我只能大概提到一些
# git,用於拉取程式碼
apt-get install git
# python環境,一般預設自帶,沒有的話可以搜尋下安裝Python
# pip easy_install,這都是Python中的模組,可自行搜尋安裝,很簡單

(2)安裝並配置postgresql資料庫
這裡我們安裝9.3版本,該版本穩定成熟。

# 非常方便的安裝方式
apt-get install postgresql-9.3
# 安裝完成之後,會預設的建立一個使用者postgres,這是postgresql的管理員賬戶
su – postgres
# 通過該命令進入sql控制檯,類似於oracle的sqlplus
psql

然後你就會進入sql控制檯,接下來你將輸入sql命令完成一些基本配置

-- 第一件事情是為改使用者設定密碼,以後很多配置檔案裡面有用到
\password postgres
-- 然後輸入你自己喜歡的密碼即可,本文將統一採用‘1q2w3e’作為我們的密碼
-- 如果你想更換密碼,可以通過命令 -- alter user postgres with password '1q2w3e',很方便。

為自己的資料庫的管理員賬戶配置好密碼之後,現在你需要建立一個庫的例項,就和oracle中的資料庫例項類似,以提供給我們的paddles使用。本文將保持和ceph官方的統一,使用‘paddles’作為我們要建立的資料庫名字。

create database paddles;
-- 通過'\l'命令,我們可以檢視到我們剛剛建立好的資料庫
\l
-- 然後我們退出sql控制檯,或者你可以直接按ctrl+d
\q 

然後我們回到root的操作模式下

# 為paddles的安裝建立一個使用者,並設定密碼
# 本文中我們將建立名為‘paddles’的使用者用於執行paddles
useradd -m paddles -g root -G root
# 為改賬號設定密碼
echo paddles:1q2w3e | chpasswd
# 建立完成之後,我們切換到paddles使用者下操作
su - paddles

我們在建立paddles賬號時並沒有指定它的bash,如果你直接登入到paddles使用者會有一些問題,所以我們都是直接先連線到root,然後再切換到paddles上即可。

# 從github上克隆我們需要的程式碼
git clone https://github.com/ceph/paddles.git
# 或者你可以使用我們的 git clone https://github.com/H3C/paddles.git
# 下載好之後,進入到下載的資料夾中,執行
# 該命令為建立Python引以為傲的沙盒環境
# 沙盒大概是指該沙盒中的環境是獨立,與系統環境互不干擾
virtualenv ./virtualenv
# 配置我們的config.py檔案,從模板中複製一份然後修改,這種方式會很常見
cp config.py.in config.py
vi config.py

# 我們主要改兩行,一個是server配置項,改成我們自己要監聽的地址
# 一般就是本機的ip,監聽埠我選擇了8080,你可以隨意,只要各處統一就好
server = {
    'port': '8080',
    'host': '172.16.38.101'
}

# 還有一處要修改的就是資料庫的地址,在最下方
# 我們使用的是postgresql資料庫,這裡我們將之前配置的資料庫資訊填上
# 註釋掉預設的url行,增加我們自己的
# 這個位置其實就是Python語法中的map,別忘記在逗號
'url' : 'postgresql://postgres:1q2w3e@localhost/paddles',


# 進入沙盒環境
source ./virtualenv/bin/activate
# 然後你就會發現自己的命令列前面表面你已經進入到沙盒環境中了
# 安裝沙盒需要的相關依賴
pip install -r requirements.txt
# 初始化環境
python setup.py develop
# 建立表,也即在postgresql建立和初始化paddles需要的表結構
# 這裡我一度官方的修改會導致這一步出問題
# 所以如果你在這裡也遇到了問題,你可以使用前面說的H3C的原始碼
pecan populate config.py
# 配置資料遷移工具
cp alembic.ini.in alembic.ini
vi alembic.ini
# 這裡主要配置資料庫資訊
sqlalchemy.url = postgresql://postgres:1q2w3e@localhost/paddles
# 觸發遷移工具生效
alembic stamp head

到此為止,你已經完成了paddles需要的所有配置。當然,你現在還是處於沙盒環境之後,沙盒環境無非就是使用沙盒內的Python編譯器執行你的命令而已,你甚至可以在./virtualenv/bin/中找到這些命令,有興趣可以自行檢視。
現在你需要啟動你的paddles了,有兩種情況。

  1. 為測試
    僅僅是為了看一下,我的paddles配置正確了嗎,能夠正常運行了嗎,那麼你可以通過在沙盒中執行
pecan serve config.py

直接臨時啟動你的paddles,然後就可以通過你在config.py中配置的地址來檢視你的成果了,按照我的配置的話,開啟瀏覽器,輸入地址:
http://172.16.38.101:8080/
然後,你就會看到一串JSON格式的資料返回給你了。
應該是類似於:

{"_help_": {"docs": "https://github.com/ceph/paddles", "extensions": {"Chrome": "https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc", "Firefox": "https://addons.mozilla.org/en-US/firefox/addon/jsonview/"}}, "last_job": "19 hours, 40 minutes, 22 seconds ago", "last_run": "21 hours, 1 minute, 28 seconds ago"}

這說明你的paddles已經可用了,它已經可以作為pulpito的儲存後臺來使用。
2. 正式使用
在install(1)中,我們已經說到要使用supervisord作為我們程序管理工具,這裡我們將演示如何使用supervisord來管理我們的paddles。
(1)配置gunicorn
首先,我們要放棄使用pecan來執行我們的Python web服務,使用一個稍加封裝的,更好的‘pecan’—- gunicorn,不必擔心,你用不著重新安裝它的環境,也一點都用不著去學,你只需要瞭解瞭解以下幾個命令即可。
退到paddles使用者環境,不退也可,都無所謂,只是編輯個檔案而已

vi gunicorn_config.py

將該檔案改為以下內容,甚至可能它原本就已經是以下內容了,那就不用改了

import os
import multiprocessing
_home = os.environ['HOME']

workers = multiprocessing.cpu_count() * 2
workers = 10
max_requests = 10000
#loglevel = 'debug'
accesslog = os.path.join(_home, "paddles.access.log")
#errorlog = os.path.join(_home, "paddles.error.log")

然後你就可以退出該使用者了,關於如何使用supervisord管理它,我們將在後面的章節中彈到,就在本章節下第2個章節,很快。

pulpito的安裝部署

特殊說明(1):
https://github.com/caibo2014/gooreplacer4chrome
改Web應用設計到谷歌的API,最好使用谷歌瀏覽器進行訪問,當然,如果你是位經驗豐富的程式設計師,相信你也有別的方法來代替Google-front-api等。
後面會相信闡述該問題的解決方法。

特殊說明(2):
我們建議將paddles和pulpito安裝一臺機器,使用不同的埠而已,因為這兩個都是非常小而且不需要耗費太多資源的,也省去了安裝很多依賴的問題

隨著安裝步驟的逐漸進行,前面已經提到的比較詳細的簡單步驟和操作技巧將一一被簡化,相信你在閱讀本文時也會漸漸適應這樣的一種風格,簡化後省去了你不必要的閱讀量。

(1)安裝依賴
和上面paddles需要的依賴是一樣的,我們已經安裝過了,這裡不需要任何操作了。

(2)建立使用者,並切換到對應的使用者環境

useradd -m pulpito -g root -G root
echo pulpito:1q2w3e | chpasswd
su - pulpito

(3)克隆相應原始碼

git clone https://github.com/ceph/pulpito.git

(4)建立沙盒

virtualenv ./virtualenv

(5)編輯檔案

cp config.py.in prod.py
vi prod.py
# 修改監聽的地址和paddles的地址

server = {
    'port': '8081',
    'host': '172.16.38.101'
}

paddles_address = 'http://172.16.38.101:8080'

# 同時,我們需要關閉掉pulpito的debug模式
'debug': False,

(6)啟動沙盒並安裝依賴

source ./virtualenv/bin/activate
pip install -r requirements.txt

(7)啟動pulpito
這個和上面的paddles一樣,也分為兩種情況。

  1. 為測試
   # 直接在沙盒內
   python run.py

然後開啟瀏覽器,輸入剛剛配置的監聽地址:http://172.16.38.101:8081/
這個時候你應該能看到和http://pulpito.ceph.com/ 類似的介面,這說明你的pulpito也安裝成功了。
2. 正式使用
正式使用把pulpito的執行執行緒交託給supervisord管理,下一章節講解。

(8)關於開啟介面非常慢,甚至卡住的情況
也就是前面特殊說明(1)提到的問題,這是由於該專案訪問了谷歌的API的緣故,有經驗的朋友直接檢視本小節頭給出的連線即可明白並解決問題了。
如果你沒有處理過類似的情況,可直接將以下內容儲存為:force_install_for_windows.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist]
"1"="paopmncpffekhhffcndhnmjincfplbma;https://github.com/jiacai2050/gooreplacer4chrome/raw/master/updates.xml"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium\ExtensionInstallForcelist]
"1"="paopmncpffekhhffcndhnmjincfplbma;https://github.com/jiacai2050/gooreplacer4chrome/raw/master/updates.xml"

然後直接執行即可,本指令碼也是來自於特殊說明(1)中的網址。

supervisor的安裝配置

(1)安裝supervisor

這個和paddles還有pulpito都在一臺機器上,其實我們前面安裝依賴的時候,已經安裝了supervisor了,如果你沒有安裝,再安裝一次也可以。

# apt方式
apt-get install supervisor
# Python模組安裝方式
pip install supervisor

(2)配置主檔案

vi /etc/supervisor/supervisord.conf

# 該檔案一般不需要配置,這裡只是告訴你一下有這個檔案,有什麼疑問都可以去檢視該檔案

# 該檔案規定了許多全域性的配置,比如supervisord守護程序如何與supervisorctl控制檯進行通訊,如何將程序管理的UI通過HTTP釋出等等。

# 如果你有一些特殊的需求,可以自行搜尋百度supervisor,教程很多

(3)配置任務檔案
正如主檔案的預設的最後一行所說,它包含了一些其它的配置檔案,我們稱之為任務檔案,它是用來描述一個任務的,也即supervisor應該監控哪些程序,執行哪些操作,都是在這些任務檔案裡面規定的。
這些檔案都應該被放在supervisor預設規定的/etc/supervisor/conf.d目錄下,想更改路徑的話,可以在主配置檔案中修改。
我們的兩個任務檔案分別被命名為:paddles.conf 和 pulpito.conf

paddles任務檔案:

cat /etc/supervisor/conf.d/paddles.conf
[program:paddles]
user=paddles
environment=HOME="/home/paddles",USER="paddles"
directory=/home/paddles/paddles
command=/home/paddles/paddles/virtualenv/bin/gunicorn_pecan -c gunicorn_config.py config.py
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile = /home/paddles/paddles.out.log
stderr_logfile = /home/paddles/paddles.err.log

pulpito任務檔案:

cat /etc/supervisor/conf.d/pulpito.conf
[program:pulpito]
user=pulpito
directory=/home/pulpito/pulpito
command=/home/pulpito/pulpito/virtualenv/bin/python run.py
environment=HOME="/home/pulpito",USER="pulpito"
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile = /home/pulpito/pulpito.out.log
stderr_logfile = /home/pulpito/pulpito.err.log

兩個配置檔案都比較簡單,其中的command選項即我們跑這個守護執行緒時,守護執行緒需要乾的事情,我們看到,其實我們配置的這兩個守護執行緒無非也就是用我們剛才建立的沙盒環境來執行特定的命令而已,只不過我們剛才是手工做,現在交給supervisor來做。

(3)使用supervisor啟動任務

# 通過supervisorctl控制檯啟動
supervisorctl start all
# 你也可以通過supervisord本身啟動
# supervisord -c /etc/supervisor/supervisord.conf

# 啟動之後你可以檢視下這兩個程序的狀態
supervisorctl status

# 應該看到以下結果
root@client1:/etc/supervisor/conf.d# supervisorctl status
paddles                 RUNNING    pid 4872, uptime 2 days, 22:10:20
pulpito                 RUNNING    pid 4873, uptime 2 days, 22:10:20

到這裡你已經成功使用supervisor來管理你的paddles和pulpito,你不用再擔心因為重啟而引發paddles或者pulpito不可用,supervisor會隨時監測這兩個執行緒的狀態,一旦重現問題,它就會嘗試重啟它們。

gitbuilder的搭建和使用

gitbuilder也可以說就是個apt-get的源,請參看:
http://gitbuilder.ceph.com/
這是ceph官方搭建好的gitbuilder。
gitbuilder相對來說沒什麼好搭建的,只是講講怎麼使用它。
首先找一臺效能比較好的機器,單獨的用來做gitbuilder,物理機或者虛擬機器都可以,但是效能請儘量好一點,不然你每編譯一次,可能就要你一下午的時間。

(1)克隆專案原始碼

git clone https://github.com/ceph/gitbuilder.git
# 同樣的,你需要做許多的更改以適應編譯你自己的ceph
# 你可以克隆我們更改過的,這樣你只需要稍作修改即可
# git clone https://github.com/H3C/gitbuilder.git
# 當然,我們還是會全面的講一下修改的地方

(2)獲取我們需要編譯的程式碼
其實這個gitbuilder可以用於編譯任何專案的,是個通用的框架。我們這裡用它來編譯ceph,所以我們需要獲取我們的ceph程式碼

# 進入到目錄中,gitbuilder只負責編譯目錄為build下的那些程式碼
# 所以我們把我們的ceph程式碼克隆到build資料夾下
cd gitbuilder
git clone https://github.com/H3C/ceph.git build

(3)修改分支指令碼,只編譯我們想要編譯的分支
gitbuilder中有一個指令碼檔案是用來控制你需要編譯的分支的,名為:branches.sh
我們可以對它稍加修改,只關注我們自己的分支,我這裡使用的是比較粗暴的方法

# 在執行任何git指令之前,強行輸出我想編譯的那幾個分支,然後直接退出
# 比如我只想編譯分支“master”
echo "master"
exit 0
.
.
.
# 其實branches.sh裡本身就提供了分支控制的語句
 if [ -x ../branches-local ]; then      
     exec ../branches-local "$@"   
 fi
# 這裡它執行的這句話就是如果存在這個指令碼就直接執行了,你也可以將你想要編譯的分支寫到這個腳本里。
方法很多,這些更改其實都是在autobuilder.sh中有呼叫到。

(4)修改build.sh

cp build.sh.example build.sh
vi build.sh
# 其實裡面預設的那些語句對編譯ceph都沒什麼用,可直接刪除或註釋
# 將build.sh的內容改為:
cp ../make-debs.sh .
chmod 777 make-debs.sh
./make-debs.sh /ceph_tmp/release

(5)建立make-debs.sh
上面我們拷貝了一份make-debs.sh到我們的ceph目錄下並進行執行,那麼這個make-debs.sh從哪裡來呢,該檔案存於ceph專案的根目錄中。

# 我們可以直接用ceph自身提供的make-debs.sh來進行編譯
# 該指令碼位於ceph專案的根目錄
# 你可以到ceph中去拷貝一份,然後稍作修改即可

這裡我使用github的展現方式來表明要修改的地方,主要修改也就是增加了編譯時的執行緒,去除打包到debian中的程式碼,以及新增一個version檔案。

diff --git a/make-debs.sh b/make-debs.sh
index b8d3e46..529af65 100755
--- a/make-debs.sh
+++ b/make-debs.sh
@@ -58,8 +58,8 @@ tar -C $releasedir -zxf $releasedir/ceph_$vers.orig.tar.gz
 #
 cp -a debian $releasedir/ceph-$vers/debian
 cd $releasedir
-perl -ni -e 'print if(!(/^Package: .*-dbg$/../^$/))' ceph-$vers/debian/control
-perl -pi -e 's/--dbg-package.*//' ceph-$vers/debian/rules
+#perl -ni -e 'print if(!(/^Package: .*-dbg$/../^$/))' ceph-$vers/debian/control
+#perl -pi -e 's/--dbg-package.*//' ceph-$vers/debian/rules
 #
 # always set the debian version to 1 which is ok because the debian
 # directory is included in the sources and the upstream version will
@@ -80,11 +80,7 @@ fi
 # b) do not sign the packages
 # c) use half of the available processors
 #
-: ${NPROC:=$(($(nproc) / 2))}
-if test $NPROC -gt 1 ; then
-    j=-j${NPROC}
-fi
-PATH=/usr/lib/ccache:$PATH dpkg-buildpackage $j -uc -us
+PATH=/usr/lib/ccache:$PATH dpkg-buildpackage -j120 -uc -us
 cd ../..
 mkdir -p $codename/conf
 cat > $codename/conf/distributions <<EOF
@@ -94,6 +90,7 @@ Components: main
 Architectures: i386 amd64 source
 EOF
 ln -s $codename/conf conf
+echo $dvers > version
 reprepro --basedir $(pwd) include $codename WORKDIR/*.changes
 #
 # teuthology needs the version in the version file

(6)修改autobuilder.sh
這個指令碼檔案才是整個builder真正的入口,前面的一切準備工作,最後都是被指令碼所呼叫,稍有shell基礎的朋友看下這個指令碼就能明白整個專案的運作方式了。

我們這裡對這個指令碼稍作修改,以便它能夠正確的將我們的編譯好的deb包,放到正確的目錄,方便我們後續通過web伺服器將它釋出出去。
同樣使用github的風格展示

+++ autobuilder.sh      2015-07-02 10:59:09.588364316 +0800
@@ -54,6 +54,12 @@
                trap "echo 'Killing (SIGINT)';  kill -TERM -$XPID; exit 1" SIGINT
                trap "echo 'Killing (SIGTERM)'; kill -TERM -$XPID; exit 1" SIGTERM
                wait; wait
+               mkdir -p /ceph_repos/ceph-deb-trusty-x86_64-basic/ref/${branch#*/}
+               cp -r --preserve=links /ceph_tmp/release/Ubuntu/{conf,db,dists,pool,trusty,version} /ceph_repos/ceph-deb-trusty-x86_64-basic/ref/${branch#*/}
+               echo $ref > /ceph_repos/ceph-deb-trusty-x86_64-basic/ref/${branch#*/}/sha1
+
+               mkdir -p /ceph_repos/ceph-deb-trusty-x86_64-basic/sha1/ 
+               ln -s /ceph_repos/ceph-deb-trusty-x86_64-basic/ref/${branch#*/} /ceph_repos/ceph-deb-trusty-x86_64-basic/sha1/$ref
+               rm -rf /ceph_tmp/release/*
        done

(7)執行
所有準備都完成了之後,我們要開始編譯我們的專案了,直接執行

./start

其實該指令碼就是運行了autobuilder.sh和一個檔案鎖操作

(8)如何瞭解直接的編譯結果
所有的編譯結果都會輸出到當前目錄的out資料夾下,這裡面輸出的其實是cgi檔案,可以理解為較為高階、通用的網頁檔案,既然是網頁檔案,這個時候你就需要一個伺服器來展示這些網頁檔案了。
建議你使用apache2。這個伺服器安裝極其方便,安裝後通過簡單的配置即可使其支援cgi檔案。

1)安裝apache2伺服器

apt-get install apache2

2) 建立一個配置檔案以支援cgi程式

vi /etc/apache2/mods-enabled/cgi.load

LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
AddHandler cgi-script .cgi .pl .py .sh

<Directory /var/www/html/gitbuilder>
Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
AllowOverride None
Order allow,deny
allow from all
</Directory>

3)連結檔案到/var/www/html下
apache2伺服器預設的服務地址是/var/www/html資料夾下,為了更好使其能夠展示我們的編譯結果,我們做一個軟連線到該目錄下

ln -s "out資料夾對應的地址"/out /var/www/html/gitbuilder

4)解決許可權問題
將out檔案所在的目錄以及父目錄都賦權,比如我的存在家目錄下~/repo

chmod 777 ~/repo -R
# 如果你不想以後都有這個麻煩,直接將家目錄更改下許可權
# chmod 777 ~ -R
# 都是內網環境,也不存在明顯的安全問題

5)啟動伺服器並驗證

service apache2 restart

開啟瀏覽器,輸入相應的地址:
http://gitbuilder-host-IP/gitbuilder
即可看到本次編譯完成的情況
其實感覺根本沒必要這麼看,因為在編譯的時候,是會輸出到螢幕的,大概就能知道哪些成功或者失敗了,或者從最後打包的情況,也能看出來。

6)做成apt-get源
這一步才是我們真正的目的,編譯完成了之後,結果是一大堆的deb包和很多的包資訊檔案,我們現在要做的就是將其釋出到網上。
我們這裡選擇的伺服器是nginx,這是為了方便我們以後做反向代理,多臺機器進行編譯時,釋出地址可能不在一臺伺服器上,所以我個人感覺nginx是最好的選擇,當然,這只是建議,具體什麼伺服器,由你自己選擇,本文對如何使用nginx來完成這一任務,做一定的描述。

根據前面我們的配置,所有的deb包最後都拷貝到了/ceph_repos下
所以我們要做的事情很簡單,就是將/ceph_repos這個目錄釋出出去,釋出的時候帶有目錄結構方便在網路上檢視。

以下前兩個步驟,如果你直接使用apt-get install nginx的話就不需要了,可直接跳過檢視如何配置nginx

1) 下載nginx原始碼

# 下載的話直接搜尋下nginx download就有了
# 解壓nginx包,本文使用的是1.80
tar xzvf nginx-1.8.0.tar.gz
# 安裝nginx依賴
apt-get install libpcre3 libpcre3-dev zlibc openssl libssl-dev libssl0.9.8

2)編譯並安裝nginx

./configure
make && make install 

然後你需要配置一下環境變數

vi ~/.bashrc

# 新增一行
export PATH=$PATH:/usr/local/nginx/sbin

# 然後使更改立刻生效
source ~/.bashrc
  • 配置nginx.conf
    這是nginx的配置檔案,如果是apt-get的方式安裝的話,好像在/etc/nginx下,如果是原始碼安裝的話則在/usr/local/nginx/conf下
vi /usr/local/nginx/conf/nginx.conf

主要改兩個地方:
- 配置nginx使其預設的檔案型別為text/plain
這樣就不會碰到沒有型別的檔案就直接下載了

default_type  text/plain;
  • 配置nginx伺服器的根路徑
    使使用者直接訪問本機IP時,可以跳轉到/ceph_repos下。
    location / {
        # 開啟目錄控制,使我們的頁面能以目錄方式呈現給使用者
        autoindex on;
        root   /ceph_repos;
    }

3)啟動nginx並驗證

# 啟動nginx
nginx
# 停止nginx 
nginx -s stop
# apt-get的方式
service nginx start|restart|stop

NTP伺服器安裝配置

這個非常的簡單,按照本文的風格,類似的小元件,我們只是簡單的介紹一兩個,由於這些小元件都十分的通用,大家在看到的時候可直接通過網路搜尋教程即可。

apt-get install ntp

vi /etc/ntp.conf

# 規定哪些IP能訪問本伺服器
restrict 172.16.100.0 mask 255.255.0.0 nomodify
server 127.127.1.0
fudge 127.127.1.0 stratum 10

順利完成0,重啟下NTP就好,十分的方便

service ntp restart

teuthology任務執行節點的安裝

在本文中,一直稱之為slave節點,這比較類似於Hadoop中的分級,master節點負責管理資訊,然後佈置任務給slave節點,slave節點負責完成這些任務,然後把結果資訊反饋給master節點。

teuthology的slave節點,也稱之為任務資源,其實就是一臺臺的裝有Ubuntu系統的虛擬機器,當然也可以是物理機,但是我們不建議那麼做。

1)安裝一臺虛擬機器
我們安裝的是Ubuntu14.0LTS,也建議你使用該系統
2)配置可遠端ssh登入
相信你前面的機器也是通過類似CRT,Xshell的工具登入並操作的,那麼應該也已經知道如何配置了,這裡再重提一下。

vi /etc/ssh/sshd_config
# 更改為下面行
PermitRootLogin yes
service ssh restart

3)安裝ansible

apt-get install ansible

4)安裝配置NTP

apt-get install ntp
# 並修改配置檔案使其執行前面配置的NTP server
vi /etc/ntp.conf
# 註釋掉那些原有的server,新增我們自己的
server "前面配置的NTP Server地址"

5)新增名為’ubuntu’的使用者
此處只能新增名字為ubuntu的使用者,新增其它名字都是不行,這也是teuthology這個平臺不夠完善的表現。

useradd ubuntu –m –G root –g root -s /bin/bash
echo ubuntu:1q2w3e | chpasswd

6)配置免密使用sudo命令

vi /etc/sudoers
# 新增行
ubuntu   ALL=(ALL)         NOPASSWD: ALL

7)情況apt-get源

mv /etc/apt/sources.list  /etc/apt/sources.list.bak
touch /etc/apt/sources.list

8)安裝ceph相關依賴
該問題較為複雜,你可以通過嘗試使用之前我們搭建的gitbuilder作為apt-get源,然後試著安裝一下ceph,系統就會告訴你缺少哪些依賴,然後你需要去把這些依賴都下載下來並安裝上,如果你連線著網路,這些依賴都可以通過apt-get的方式來安裝,還是比較方便的

9)hostname和hosts匹配
由於ansible是一個去中心化工具,所以所有slave節點都可能要互相互動,所以但是teuthology傳遞給他們的是一個hostname而不是具體的IP,所以hosts檔案就起到了轉換這些hostname的作用,兩個點注意。

  • 自己的hostname,請與127.0.1.1相對應
  • 其它人的hostname,所有節點請保持統一

10)防止pgp認證錯誤
apt-get pgp error,如果完全不瞭解的話可以先搜尋下前面的關鍵字。

將你搭建的gitbuilder作為源,然後apt-get update,如果出現了apt-get pgp error錯誤的話則需要你手工處理一下。

處理方式也很簡單,報錯時它會提示給你一串數字,將這串數字註冊一下就好。

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 6EAEAE2203C3951A

到此一個teuthology的slave節點就安裝完畢了,然後你就可以通過虛擬機器的各種克隆技術瘋狂的克隆了,克隆30臺左右就好,當然如果你是物理機的話那就沒辦法了,這也是我們不建議你使用物理機的原因之一。

teuthology管理節點的部署

我們先講teuthology主體的安裝,而不先說git server等元件的安裝時因為在安裝完前面的元件之後,已經能夠支撐teuthology執行一定的任務,所以我先講如何安裝teuthology,讓大家快速的部署好環境並嘗試著執行一些任務。

我們建議安裝teuthology的機器應該是磁碟容量較大的,至少請在500G以上,當然20G的也可以執行,但是teuthology跑一次任務產生的日誌檔案大小可能就有20G,磁碟空間滿了之後,你的任務將無法繼續進行。

前面我們已經說過,隨著安裝的進行,我們對於一些小細節的描述將省去,比如這裡安裝各類依賴,勢必要先配置好apt-get的源,經過前面的磨練,這樣的步驟你已經非常熟練,這裡就不再重複寫出來浪費文章篇幅了。

系統環境配置

1)安裝系統依賴

apt-get -y install git python-dev python-pip python-virtualenv libevent-dev python-libvirt beanstalkd

其中beanstalkd為teuthology所使用的任務佇列元件,大家可以自行搜尋下。

2)為排程者和執行者建立賬號
不清楚排程者和執行者區別請參見install(1)

useradd -m teuthology -g root -G root
echo teuthology:1q2w3e | chpasswd

useradd -m teuthworker -g root -G root
echo teuthworker:1q2w3e | chpasswd

3)分別給兩個賬號授予passwordless sudo access許可權

vi /etc/sudoers

# 新增下面兩行

teuthology   ALL=(ALL)         NOPASSWD: ALL
teuthworker  ALL=(ALL)         NOPASSWD: ALL

4)建立配置檔案

vi /etc/teuthology.yaml

# 內容如下(部分請自行修改):

# paddles所在伺服器
lock_server: 'http://172.16.38.101:8080'
# paddles所在伺服器
results_server: 'http://172.16.38.101:8080'
# 域名,建立slave節點時有用到
lab_domain: 'h3c-ceph.com'
# beanstalkd佇列伺服器,第一步安裝的,就在我們本地,預設埠是11300
queue_host: 127.0.0.1
queue_port: 11300
# 本地歸檔,直接放在執行者的家目錄下
archive_base: /home/teuthworker/archive
verify_host_keys: false
# 官方的是:http://github.com/ceph/,就是我們下載各種需要的元件原始碼的路徑
# 這裡暫時使用github上的,之後我們將搭建一個完整的git伺服器替代它
ceph_git_base_url: http://github.com/H3C/
# 就是前面搭的gitbuilder的地址
gitbuilder_host: '172.16.38.102'
reserve_machines: 1
# 歸檔目錄,直接寫本機的地址加/teuthology即可
archive_server: http://172.16.38.103/teuthology/
max_job_time: 86400

5)安裝其它依賴
這些依賴並不是在系統級別上使用,而是各個使用者在執行命令時需要使用到

apt-get -y install git python-dev python-pip python-virtualenv libevent-dev python-libvirt beanstalkd

開發相關依賴

apt-get -y install  libssl-dev libmysqlclient-dev libffi-dev libyaml-dev

安裝排程者

我們已經為排程者建立了一個使用者teuthology,接下來的操作都在teuthology中進行。

su - teuthology

1)克隆程式碼並初始化環境

mkdir ~/src

# 你也克隆我們的,做了一些修改,比如可以關閉每次都去網上拉取這樣的特性
# 更多的資訊你可以通過檢視我們的github地址來尋找
# git clone https://github.com/H3C/teuthology.git src/teuthology_master
git clone https://github.com/ceph/teuthology.git src/teuthology_master

# 進入到克隆好目錄下並執行指令碼 bootstrap
./bootstrap

# 該指令碼為初始化各類環境的指令碼,它會從網上去下載很多元件和指令碼
# 一般來說,這個指令碼是不會出錯的

2)建立slave節點
這裡的意思其實就是將一些我們已經安裝好的slave節點的資訊採集起來,然後傳輸給paddles,這樣我們就知道一共有多少臺可以利用的資源了,跑任務的時候就可以去用這些資源。

收集這些節點資訊並最終存到資料庫,對我們來說只要做一件事就好,那就是編輯create_nodes.py這個指令碼,改動非常的小。

首先要做的就是獲取這個指令碼:

wget https://raw.githubusercontent.com/ceph/teuthology/master/docs/_static/create_nodes.py 

因為這完全就是一個網路指令碼,為了防止它不斷的變化而導致本文的可用性,這裡提供一下當時我們使用的指令碼,如果沒有更新話,你應該下載到和我一樣的一個指令碼。
我們將需要更改的地方也在文中標明瞭,只需要更改前面幾行即可。

#!/usr/bin/env python
# A sample script that can be used while setting up a new teuthology lab
# This script will connect to the machines in your lab, and populate a
# paddles instance with their information.
#
# You WILL need to modify it.

import traceback
import logging
import sys
from teuthology.orchestra.remote import Remote
from teuthology.lock import update_inventory

# 這裡改為你的paddles地址,這是本文一直使用的paddles地址
paddles_address = 'http://172.16.38.101:8080'

# 你想建立的機器型別,也就是為你的slave節點分個類
# 什麼型別名字其實無所謂,但等會你執行任務時預設為plana
# 指定為plana型別,執行任務時可以省去指定機器型別語句
# 建議你以plana, buripa, miraas作為型別名,方便和官方統一
machine_type = 'plana'
# 前面我們配置/etc/teuthology.yaml檔案時已經指定了域名,相同就行
lab_domain = 'h3c-ceph.com'
# Don't change the user. It won't work at this time.
user = 'ubuntu'
# We are populating 'typica003' -> 'typica192'
# 這裡更改一下編號,從哪一號到哪一號
# 這是需要修改的最後一行,後面都不需要修改了
machine_index_range = range(17, 22)

log = logging.getLogger(sys.argv[0])
logging.getLogger("requests.packages.urllib3.connectionpool").setLevel(
    logging.WARNING)


def get_shortname(machine_type, index):
    """
    Given a number, return a hostname. Example:
        get_shortname('magna', 3) = 'magna003'

    Modify to suit your needs.
    """
    return machine_type + str(index).rjust(3, '0')


def get_info(user, fqdn):
    remote = Remote('@'.join((user, fqdn)))
    return remote.inventory_info


def main():
    shortnames = [get_shortname(machine_type, i) for i in machine_index_range]
    fqdns = ['.'.join((name, lab_domain)) for name in shortnames]
    for fqdn in fqdns:
        log.info("Creating %s", fqdn)
        base_info = dict(
            name=fqdn,
            locked=True,
            locked_by='admin@setup',
            machine_type=machine_type,
            description="Initial node creation",
        )
        try:
            info = get_info(user, fqdn)
            #log.error("no error happened")
            base_info.update(info)
            base_info['up'] = True
        except Exception as exc:
            log.error("{fqdn} is down".format(fqdn=fqdn))
            #log.error("some error: {0}".format(exc.strerror))
            log.error("the traceback is")
            s=traceback.format_exc()
            log.error(s)
            log.error("the error is ")
            log.error(exc)
            base_info['up'] = False
            base_info['description'] = repr(exc)
        update_inventory(base_info)
if __name__ == '__main__':
    main()

修改完成之後,把這個檔案放到我們克隆的~/src/teuthology_master中,或者你剛才wget時直接放到該路徑下也可以,之後執行以下該指令碼即可。

python create_nodes.py

你一定很好奇,這些名字既然是隨便取的,那麼如何定位這些機器的IP呢,這其實是需要你在/etc/hosts檔案中指定的,這也是teuthology平臺的特性,都只是給出hostname,具體IP都是由hosts檔案給出。

前面配置之後,產生的hostname的組成結構是:

machine_type + 3位數字 + '.' + lab_domain

比如我的機器型別為’plana’,正好是叢集中的第3臺機器,我的域名規定為h3c-ceph.com,那麼最終產生的hostname是:

plana003.h3c-ceph.com

這時我就需要在/etc/hosts檔案中為其指定對應的IP

plana003.h3c-ceph.com  172.16.38.143

3)驗證是否已成功上傳了slave節點資訊
檢驗方式很簡單,登入我們之前搭建的pulpito介面,點選右上方的node,選擇ALL,即可檢視我們當前擁有的所有的資源節點,如果有的話則代表你已經成功推送slave節點資訊到資料庫中了。

簡單的看下各個節點的資訊,你會發現所有節點都是處於鎖住狀態的,你可以通過類似於:

teuthology-lock --owner caibo --unlock plana003

的命令來進行解鎖,在install(3)中,我們將學習更多的命令來幫助管理者這些資源節點,排程任務,管理執行者,檢視任務佇列等。

當然,執行該命令的前提是teuthology的執行目錄已經被你載入到環境變數中了

echo 'PATH="$HOME/src/teuthology_master/virtualenv/bin:$PATH"' >> ~/.profile
# 即刻生效
source ~/.profile

安裝執行者

執行者的安裝相對簡單

切換到teuthworker使用者下

1)克隆原始碼並初始化環境

mkdir ~/src
git clone https://github.com/H3C/teuthology.git src/teuthology_master
cd ~/src/teuthology_master
./bootstrap

2)初始化執行環境

mkdir ~/bin
# 從網上下載該指令碼
wget -O ~/bin/worker_start https://raw.githubusercontent.com/ceph/teuthology/master/docs/_static/worker_start.sh

出於同樣的目的,我們還是向大家展示下我們獲取到的指令碼,以免指令碼更新引起的誤會


#!/bin/bash

# A simple script used by Red Hat to start teuthology-worker processes.

ARCHIVE=$HOME/archive
WORKER_LOGS=$ARCHIVE/worker_logs

function start_workers_for_tube {
    echo "Starting $2 workers for $1"
    for i in `seq 1 $2`
    do
        teuthology-worker -v --archive-dir $ARCHIVE --tube $1 --log-dir $WORKER_LOGS &
    done
}

function start_all {
    start_workers_for_tube plana 50
    start_workers_for_tube mira 50
    start_workers_for_tube vps 80
    start_workers_for_tube burnupi 10
    start_workers_for_tube tala 5
    start_workers_for_tube saya 10
    start_workers_for_tube multi 100
}

function main {
    echo "$@"
    if [[ -z "$@" ]]
    then
        start_all
    elif [ ! -z "$2" ] && [ "$2" -gt "0" ]
    then
        start_workers_for_tube $1 $2
    else
        echo "usage: $0 [tube_name number_of_workers]" >&2
        exit 1
    fi
}

main $@

這個指令碼比較簡單,就是呼叫了teuthology-worker而已。

3)配置環境變數


            
           

相關推薦

teuthology安裝部署2

Tags: teuthology ceph 自動化測試 ceph自動化測試環境teuthology的安裝部署具體步驟 再次強調,本文所述均建立在Ubuntu14.0LTS系統之上,這是一個非常普通的系統,也是ceph官方推薦使用的。 本文中所克隆的源,有c

CM部署2:CM環境配置及安裝

一、機器分配 172.16.0.147 server(主節點)/agent mysql、namenode、resource manager、master、zookeeper、hiveserver、flume、SecondaryNamenode 172.16.0.115

jenkins實戰之jenkins安裝部署

自動化運維 上一小節介紹了Jenkins安裝(Linux/uninx平臺),這節我們講講Jenkins界面操作(包括系統設置,工具安裝,插件管理,系統升級,安全設置等等操作); 登錄jenkins首頁,分別有以下選項欄,從左側看起,點擊Jenkins系統管理我們會看到右側list欄,內

zabbix系列之服務端的安裝部署

zabbix zabbix_server zabbix1、zabbix的定義zabbix是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。zabbix

Centos7 zabbix3.4.6的安裝部署

pos gpo 監控服務器 技術分享 color conf blog sys nbsp 接著安裝zabbix客戶端 直接安裝在服務器上 監控服務器 ip 192.168.161.25 yum -y install zabbix-agent #通過Yum安裝zabbix

xtrabackup安裝部署

最新 生成 完全 操作 amp 是否 net end mkdir 在官網中,復制相關鏈接下載最新版本(建議使用當前發布版本前6個月左右的穩定版本) https://www.percona.com/downloads/XtraBackup/LATEST/ 1、下載和安裝

Hadoop安裝雜記2

hadoop 安裝 分布式模型 基礎一、分布式模型 1、環境準備 準備4個節點,master1為主控節點(NameNode、SecondaryNameNode、ResourceManager),master2-4作為數據節點(DataNode、NodeManager)。並做好ntp時間同步 1.1 每個節點配

阿裏雲 centos7 64位搭建JAVA環境-----安裝JDK2

命令 是什麽 vim 文件 解壓縮 inf exp ima 發現 mysql安裝好以後,把jdk環境配置一下。 首先下載jdk 8,在官網下載。 找到鏈接 http://download.oracle.com/otn-pub/java/jdk/8u171-b11/51

Supervisor的安裝部署Centos7

pip安裝 serve enable tmp proc clu etc res viso Supervisor(http://supervisord.org/)是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持W

zabbix安裝部署

for cti spa soc x86 cor ges symlink web 一、zabbix安裝 1.系統環境 [root@zabbix ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)

zabbix安裝部署

ext 動作 img 發現 模板 roc sha size ddb 二、zabbix自動發現並添加到主機群組 1.創建主機群組並選擇模板 2.添加後查看群組 3.創建自動發現規則 4.創建自動發現動作 5.啟用相應的自動發現規則和動作 6.查看自動發現的設備zabbi

linux RedHat7LNMP構架搭建論壇之源碼安裝Nginx2

conf 開機啟動 分享圖片 位置 install source vim 壓縮 軟件 一、提供Perl語言兼容的正則表達式庫的軟件包pcre,Nginx服務程序用於實現偽靜態功能的依賴包進入目錄解壓文件#cd /usr/local/src#tar xzvf pcre-8.3

Redis學習01_redis安裝部署centos Redis學習:CentOS下redis安裝部署

原文: http://www.cnblogs.com/herblog/p/9305668.html Redis學習(一):CentOS下redis安裝和部署   1.基礎知識  redis是用C語言開發的一個開源的高效能鍵值對(key-value)資料庫。它通過提

Nginx 之一 伺服器的安裝部署: LInux 環境下 Nginx 伺服器的安裝和基本配置

一、編譯和安裝前的準備工作 本部落格依賴環境: Linux Ubuntu 16.04 1.1 足夠的磁碟空間 能夠裝得下 Nginx 的軟體包和安裝檔案, 這個基本都能滿足。 1.2 需要的工具 為了編譯 Nginx 原始碼, 需要安裝標準的 GCC 編譯器。

docke+jenkins+git自動打包部署2--jenkins網頁配置

上篇將jenkins在伺服器上跑起來了,這篇主要是將jenkins的外掛安裝和系統配置設定一下 瀏覽器輸入10.17.191.211:8080(上篇中跑jenkins的伺服器) 一、這裡的pas

Docker——安裝部署

一、測試是否已安裝docker [[email protected] ~]# docker -bash: docker: command not found [[email protected] ~]# docker version -bash: do

[轉帖]VMware Vsphere 6.0安裝部署 vCenter Server安裝

  VMware Vsphere 6.0安裝部署 (三) vCenter Server安裝 2016年08月29日 14:59:14 dAng1r0Us 閱讀數:72942  

[轉帖]VMware Vsphere 6.0安裝部署 總體部署架構

(一)總體部署架構本教程用於學習目的,力求詳盡的介紹安裝部署過程和各元件之間的關係,部署過程從最簡單的模型開始,系列文章按時間順序依次展開,每篇介紹一個元件。 開始階段,按照一臺物理伺服器,部署所有VMware元件的模型進行,這也是為了貼近大部分初學者在沒有就職於商業機構,缺乏實際測試,生產環境的情形下,利

安裝部署 Kafka叢集安裝部署以及Producer和Consumer的JAVA程式碼測試

Kafka叢集安裝部署以及Producer和Consumer的JAVA程式碼測試 kafka scala2.11_0.10.0.0 ubuntu 14.04.04 x64 hadoop 2.7.2spark 2.0.0 scala 2.11.8 jdk 1.8.0_101

分享知識-快樂自己:mongodb 安裝部署linux

1):下載 mongodb 包  [[email protected] tools]# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 2):解壓到指定目錄 [[email