Docker Swarm搭建Gitlab

在云端搭建自己的代碼倉庫,本地Push代碼俐芯,持續(xù)集成后自動發(fā)布篮绰。新版的Gitlab很好地支持這個需求,雖然只是自己使用镇眷,但目標還是利用三臺云主機搭建一個高可用模式的Gitlab服務(wù)咬最。

active-active-gitlab

本文首先實現(xiàn)用Swarm管理集群,部署單主機模式的Gitlab欠动。云主機是收集學生優(yōu)惠卷1元買來的永乌,單核,1G內(nèi)存具伍。一開始運行起gitlab翅雏,整個系統(tǒng)卡頓了,顯然的資源不足人芽。到官網(wǎng)上查看gitlab安裝需求才知道現(xiàn)在的資源狀況只能實現(xiàn)最不值得推薦的配置:

1 core supports up to 100 users but the application can be a bit slower due to having all workers and background jobs running on the same core
1GB RAM + 3GB of swap is the absolute minimum but we strongly advise against this amount of memory. See the unicorn worker section below for more advice.

查看主機交換區(qū)大小發(fā)現(xiàn)默認交換區(qū)大小為0望几,因此需要手動增加交換區(qū)大小。

增加交換區(qū)

生成4G大小的文件在/home目錄下文件為swapflie:

$ sudo dd if=/dev/zero of=/home/swapflie bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 36.7799 s, 117 MB/s

把這個文件轉(zhuǎn)換成swap分區(qū)

$ sudo /sbin/mkswap /home/swapflie

使分區(qū)生效

$ sudo /sbin/swapon /home/swapfile

查看分區(qū)是否分配成功,(省略了其他指標參數(shù))

$ free -h
             total       used       free     
Swap:         4.0G         0B       4.0G

搭建Gitlab

準備Swarm集群

在資源有限的情況下管理容器集群萤厅,Swarm是一個比較好的選擇橄抹,相比于之前生產(chǎn)環(huán)境用的Kubernetes,Swarm操作簡單惕味,資源開銷小害碾,適合內(nèi)部環(huán)境使用。

如果已經(jīng)安裝了最新版本的docker(目前是1.12.5)赦拘,docker engine 已經(jīng)集成了swarm慌随。
可以用下面的命令安裝最新發(fā)布版本的docker,安裝完需要將當前用戶加入docker用戶組,并重新登錄生效阁猜。

curl -fsSL https://get.docker.com/ | sh

閱讀官方文檔丸逸,理想情況下用Swarm配合Docker Compose以及Docker Machine可以很方便地構(gòu)建docker集群。但Docker Machine創(chuàng)建docker環(huán)境相當于在云主機上創(chuàng)建另外的虛擬機(如virtual box剃袍,默認單核黄刚,1G內(nèi)存),所以只能手動在云主機上安裝相同docker環(huán)境,而不使用 Docker Machine民效。
另外Docker Compose配合Swarm憔维,文檔中有比較詳細的使用方法,一開始根據(jù)這個文檔部署環(huán)境畏邢,結(jié)果遇到很多坑业扒,查錯的過程中才知道目前這種模式仍在試驗階段,需要安裝試驗版本(docker 1.13)或者啟動試驗模式舒萎。使用Docker Compose + Swarm模式的方式需要其他方法程储,一種方式是將docker-compose.yml文件轉(zhuǎn)換成swarm服務(wù)的啟動方式,有個臨時的實現(xiàn)方法臂寝,可以試用章鲤。

這里沒有使用上面的方法,而是全部用命令行方式構(gòu)建Swarm集群:

初始化集群

Swarm的思想主要是將多臺主機抽象成一臺manager服務(wù)器咆贬,通過Swarm來啟動docker容器(service),像直接運行容器一樣败徊,不同的是容器會被負載均衡到不同主機。而對于容器的管理則可只在manager機器上進行掏缎。Swarm的架構(gòu)如圖:


swarm-arch

這里首先實現(xiàn)兩臺主機的service部署皱蹦,managers上運行Swarm集群可視化工具,slave主機上運行g(shù)itlab.

登錄manager主機,初始化Swarm manage

docker swarm init --advertise-addr 192.168.10.11

命令返回slave節(jié)點加入集群的命令御毅,如:

To add a worker to this swarm, run the following command:
 docker swarm join \
 --token SWMTKN-1-5bgo3ocj3mqezig2v3j9mge4aknehgbcueovivzu6mz9supqzg-8igbqrbqhsh0z9l62qrrs0zi0 \
 192.168.10.11:2377

該信息在集群創(chuàng)建成功后也可以在manage主機通過下面命令獲得。

docker swarm join-token worker

登錄到slave主機怜珍,加入集群

通過manage返回的token信息端蛆,加入集群

 docker swarm join \
 --token SWMTKN-1-5bgo3ocj3mqezig2v3j9mge4aknehgbcueovivzu6mz9supqzg-8igbqrbqhsh0z9l62qrrs0zi0 \
192.168.10.11:2377

注意我這里的兩個主機都是云主機,而且兩臺主機不在同一個局域網(wǎng)網(wǎng)段酥泛,因此需要將manage的內(nèi)網(wǎng)地址192.168.10.11換成對應(yīng)的公網(wǎng)IP今豆,才能成功注冊。如果兩臺主機在同一局域網(wǎng)柔袁,則可直接添加到集群呆躲。

給slave主機添加標簽,使manage可以通過標簽限定具體slave node捶索,后面可以看到:

docker node  update --add-lable type=gitlab-node1

這里給slave機器添加type=gitlab-node1的標簽插掂。

啟動Swarm可視化服務(wù)

返回到manage主機,通過docker node ls命令查看集群節(jié)點狀態(tài),一切正常后辅甥,啟動Swarm可視化服務(wù)酝润。官方并沒有提供可視化服務(wù),在這里(docker-swarm-visualizer)有一個很好的開源實現(xiàn),可以直接使用該鏡像構(gòu)建服務(wù)璃弄。

$ docker service create   --name=swarm_visual   --publish=5001:8080/tcp   --constraint=node.role==manager   --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock   manomarks/visualizer

服務(wù)啟動通過 --constraint=node.role==manager 限定該服務(wù)在manage主機運行要销。并通過將web端口映射到云主機的5001端口∠目椋可以通過(公網(wǎng)IP:5001)的方式訪問疏咐。

創(chuàng)建gitlab數(shù)據(jù)vloumes

為了方便容器數(shù)據(jù)的共享,以及后面數(shù)據(jù)的遷移脐供,選擇創(chuàng)建volumes來在本地持久化gitlab容器數(shù)據(jù)浑塞,而不是映射到本地路徑。
登錄到slave主機患民,為gitlab創(chuàng)建volumes缩举,volumes的使用可以從后面看到:

$ docker volume create --name gitlab_config
$ docker volume create --name gitlab_logs
$ docker volume create --name gitlab_data

這里創(chuàng)建了三個volumes,分別存儲gitlab的配置文件、日志和用戶數(shù)據(jù)匹颤。

啟動Gitlab服務(wù)

在manage主機上可以直接啟動gitlab服務(wù)仅孩,并限定服務(wù)在slave主機運行。系統(tǒng)自動會到gitlub上pull相應(yīng)鏡像印蓖,并在本地運行辽慕。

sudo docker service create \
    --name swarm_gitlab\
    --publish 5002:443 --publish 5003:80 --publish 5004:22 \
    --replicas 1 \
    --mount type=volume,source=gitlab_config,destination=/etc/gitlab \
    --mount type=volume,source=gitlab_logs,destination=/var/log/gitlab \
    --mount type=volume,source=gitlab_data,destination=/var/opt/gitlab \
    --constraint 'node.labels.type == gitlab-node1' \
    gitlab/gitlab-ce:latest

命令中指定服務(wù)名為swarm_gitlab,以及http服務(wù)(443赦肃,80)和ssh服務(wù)(22)端口溅蛉,分別映射到宿主機;指定備份服務(wù)數(shù)為1他宛,映射本地路徑到容器相應(yīng)路徑船侧,這里使用volums的方式;限定在標簽type= gitlab-node1的主機上啟動服務(wù)厅各。

測試

登錄到manage主機镜撩,查看節(jié)點查看服務(wù)狀態(tài):

$ docker service ls
ID            NAME          REPLICAS  IMAGE                    COMMAND
79c0rvct38j1  swarm_visual  1/1       manomarks/visualizer
dbygi9gx1318  swarm_gitlab  1/1       gitlab/gitlab-ce:latest

$ docker service ps swarm_gitlab
ID                         NAME            IMAGE                    NODE               DESIRED STATE  CURRENT STATE        ERROR
3haqups6rzf8ugobqzyescl21  swarm_gitlab.1  gitlab/gitlab-ce:latest  VM**  Running        Running 9 hours ago

訪問manage主機的5001端口,可以看到Swarm集群的狀態(tài):

docker-swarm-visulizer

通過docker node的相關(guān)命令同樣也可以查看集群節(jié)點信息队塘。

訪問slave主機的5003端口袁梗,看到熟悉的Gitlab登錄界面,創(chuàng)建初試用戶和密碼憔古,創(chuàng)建用戶組遮怜,和測試Project:


gitlab

小結(jié)

本文主要實現(xiàn)在有限云主機資源下搭建gitlab服務(wù),這里并沒有涉及gitlab的具體配置鸿市。這里只是簡單構(gòu)建一個可用的服務(wù)锯梁,后面再去看gitlab的管理方法即碗,以及服務(wù)的穩(wěn)定性和數(shù)據(jù)的備份與恢復。此外涝桅,第一次使用Swarm拜姿,由于資源限制,并沒有采用最佳的方式來部署服務(wù)冯遂。

原創(chuàng)文章蕊肥,轉(zhuǎn)載請注明出處,點擊到我的博客蛤肌。

更多關(guān)注公眾號:


wechat
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壁却,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子裸准,更是在濱河造成了極大的恐慌展东,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炒俱,死亡現(xiàn)場離奇詭異盐肃,居然都是意外死亡,警方通過查閱死者的電腦和手機权悟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門砸王,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峦阁,你說我怎么就攤上這事谦铃⊙勐耍” “怎么了慈参?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵茸炒,是天一觀的道長摄凡。 經(jīng)常有香客問我,道長遍尺,這世上最難降的妖魔是什么侥衬? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任诲侮,我火速辦了婚禮诵肛,結(jié)果婚禮上屹培,老公的妹妹穿的比我還像新娘。我一直安慰自己曾掂,他們只是感情好惫谤,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布壁顶。 她就那樣靜靜地躺著珠洗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪若专。 梳的紋絲不亂的頭發(fā)上许蓖,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音,去河邊找鬼膊爪。 笑死自阱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的米酬。 我是一名探鬼主播沛豌,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赃额!你這毒婦竟也來了加派?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤跳芳,失蹤者是張志新(化名)和其女友劉穎芍锦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飞盆,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡娄琉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吓歇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孽水。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖照瘾,靈堂內(nèi)的尸體忽然破棺而出匈棘,到底是詐尸還是另有隱情,我是刑警寧澤析命,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布主卫,位于F島的核電站,受9級特大地震影響鹃愤,放射性物質(zhì)發(fā)生泄漏簇搅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一软吐、第九天 我趴在偏房一處隱蔽的房頂上張望瘩将。 院中可真熱鬧,春花似錦凹耙、人聲如沸姿现。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽备典。三九已至,卻和暖如春意述,著一層夾襖步出監(jiān)牢的瞬間提佣,已是汗流浹背吮蛹。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拌屏,地道東北人潮针。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像倚喂,于是被迫代替她去往敵國和親每篷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 前兩篇東西端圈,我們分別介紹了Mesos和Dockers的安裝和使用雳攘。在《Mesos實戰(zhàn)》這篇的結(jié)尾,我說過將會介紹如...
    燕京博士閱讀 1,316評論 0 2
  • 目錄 Swarm簡介 Swarm架構(gòu) Swarm命令 總結(jié) 1. Swarm簡介 Docker自誕生以來枫笛,其容器特...
    garyond閱讀 1,314評論 1 9
  • 每日健步迎朝陽吨灭,吐故納新精神爽。 胸懷若谷容萬物刑巧,廣闊天地放眼量喧兄。 世事紛擾勿彷徨,讀書學習不能忘啊楚。 交朋結(jié)友互勉...
    YSL言書樂閱讀 270評論 0 5
  • 田葉閱讀 228評論 0 0
  • “也許我們都是月亮型的人吠冤,無論再怎么燃燒自己也無法溫暖別人,所以要珍惜身邊的太陽恭理≌蓿” 這是當年我從朋友的QQ空間看...
    吳宇仁閱讀 512評論 2 4