前兩篇講到了服務(wù)如何適配容器化我們?cè)诜?wù)里做的一系列改造,服務(wù)可以很優(yōu)雅的適配容器化環(huán)境了,但是有一個(gè)前提是服務(wù)得容器化,也就是說(shuō)如何打包成鏡像。自己手動(dòng)構(gòu)建推送鏡像可不可以?當(dāng)然可以,不過(guò)老話說(shuō)得好,一個(gè)月幾百塊,你玩兒什命啊。你天天手動(dòng),手不累么?肩膀不酸嗎?身體受得了嗎?別再自己用手了,通過(guò)Gitlab CI來(lái)解放你的手,用你的手去做些更快樂(lè)的事情。
首先聊聊我們面對(duì)的問(wèn)題
針對(duì)上述幾個(gè)問(wèn)題,我們構(gòu)建出了一個(gè)場(chǎng)景
開(kāi)發(fā)同學(xué)開(kāi)發(fā)完成后先在開(kāi)發(fā)環(huán)境里測(cè)試完成后自動(dòng)部署至測(cè)試環(huán)境,測(cè)試同學(xué)進(jìn)行多輪測(cè)試后標(biāo)記可發(fā)布的服務(wù)版本,同時(shí)可能存在同一個(gè)服務(wù)根據(jù)不同的需求在多分支上的開(kāi)發(fā)和測(cè)試問(wèn)題。而生產(chǎn)環(huán)境部署時(shí)只能選擇測(cè)試確認(rèn)的服務(wù)版本進(jìn)行發(fā)布上線,并且對(duì)于服務(wù)的資源配置要提供參考。線上運(yùn)行過(guò)程中遇見(jiàn)的問(wèn)題能追溯到發(fā)布版本和代碼版本。
結(jié)合問(wèn)題、場(chǎng)景、容器化技術(shù)我們得出了以下的結(jié)論:
為什么我們選擇用gitlab ci?網(wǎng)上一搜索就有很多在講優(yōu)勢(shì)劣勢(shì),這里說(shuō)說(shuō)我們看中的幾個(gè)原因:
1.輕量:內(nèi)置在Gitlab平臺(tái)中,和代碼管理天然融合一體,而且上線的服務(wù)只用記錄commit號(hào)在后續(xù)回溯代碼時(shí)很方便
2.易于配置:配置使用YAML文件進(jìn)行定義,具有直觀的語(yǔ)法。這使得構(gòu)建、測(cè)試和部署流程可以以代碼的方式進(jìn)行管理,易于維護(hù)和版本控制
3.擴(kuò)展性強(qiáng):如果標(biāo)準(zhǔn)任務(wù)不足以滿(mǎn)足特定需求,可以無(wú)需侵入gitlab本身的代碼,就能定制構(gòu)建和部署流程
總結(jié)下來(lái),gitlab提供的ci從我們的角度看,夠輕量,夠簡(jiǎn)單,擴(kuò)展性強(qiáng)。尤其是擴(kuò)展性強(qiáng)這一點(diǎn),這點(diǎn)讓我們臉都笑開(kāi)花了,可以低成本實(shí)現(xiàn)我們的想法,滿(mǎn)足我們的想象力。
先看看整體流程
圖片
整套流程涵蓋了開(kāi)發(fā)階段、線上運(yùn)行階段,首先開(kāi)發(fā)階段下,運(yùn)維同學(xué)只需要在開(kāi)發(fā)測(cè)試的k8s集群中為不同團(tuán)隊(duì)創(chuàng)建ns并做資源限制,后續(xù)的部署更新都是基于研發(fā)同學(xué)的代碼提交觸發(fā),研發(fā)人員可在提交代碼后通過(guò)gitlab pipeline查看ci構(gòu)建、部署結(jié)果。開(kāi)發(fā)環(huán)境中健康檢查通過(guò),研發(fā)測(cè)試沒(méi)有問(wèn)題后將該迭代版本的代碼合并到對(duì)應(yīng)的測(cè)試分支部署至測(cè)試ns交由測(cè)試人員進(jìn)行測(cè)試,整體測(cè)試完成后標(biāo)記服務(wù)鏡像正式版本號(hào)。而后在平臺(tái)上進(jìn)行發(fā)布操作。后續(xù)運(yùn)行過(guò)程中遇見(jiàn)的問(wèn)題通過(guò)服務(wù)鏡像號(hào)可以追溯到對(duì)應(yīng)代碼,修復(fù)后重復(fù)上述過(guò)程
首先定義namespace名稱(chēng)困難不困難?困難,而且不只是這個(gè)名字困難,涉及到命名的時(shí)候都困難,方法名、變量名,尤其是變量名,當(dāng)然如果說(shuō)都是用i,j 這些來(lái)作為變量名也算的話那就不困難,但是別人看到了。。怕是要被刀。。
所以namespace是基于gitlab組和分支規(guī)范較為方便,分支規(guī)范每家不一樣沒(méi)有對(duì)錯(cuò)之分,把握的原則只是分支與環(huán)境對(duì)應(yīng)就好。舉一個(gè)例子,分支命名dev作為開(kāi)發(fā)分支前綴,test作為測(cè)試分支前綴,master作為主分支,gitlab上有兩個(gè)組 team1,team2(team2和team1一樣的邏輯圖中就不多畫(huà)了)
圖片
這樣做了之后,可以通過(guò)在ci中解析分支命名就可以在對(duì)應(yīng)的namespace下創(chuàng)建有分支后綴的服務(wù)名了
通過(guò)k8s提供的resourcequotas限制每個(gè)namespace的資源上限,通過(guò)監(jiān)控集群資源池和namespace的資源用量,來(lái)調(diào)整集群的整體資源池,如果使用的公有云還可以通過(guò)k8s提供的CA(Cluster Autoscaler)進(jìn)行伸縮
在CI構(gòu)建打包的時(shí)候,在gitlab runner中可以通過(guò)獲取環(huán)境變量的方式來(lái)獲取本次提交的commit值并自動(dòng)添加到鏡像版本號(hào)中,這樣在后續(xù)通過(guò)鏡像版本號(hào)便能追溯到對(duì)應(yīng)的代碼版本。
這是因?yàn)閚s是一個(gè)邏輯概念,是為了考慮k8s集群出現(xiàn)災(zāi)難性故障時(shí),可以方便我們快速在一個(gè)新的k8s集群中迅速重建所有服務(wù)。同時(shí)也讓一次CI部署多套集群成為可能。
從圖中可知總共分成了4個(gè)大塊,可以根據(jù)自己的需求去實(shí)現(xiàn)。
本文鏈接:http://m.rrqrq.com/showinfo-26-5758-0.html摸魚(yú)心法——CI成就夢(mèng)想
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 錯(cuò)誤處理策略:Java開(kāi)發(fā)者的MySQL數(shù)據(jù)庫(kù)故障解決方案