最近項(xiàng)目在開始往helm來轉(zhuǎn)變窄坦。鑒于歷史上眾多yaml,編寫helm的chart并不是一件容易的事情凳寺。
我們目前的項(xiàng)目中有用到ansible鸭津,go等用于自動(dòng)部署我們的企業(yè)級(jí)應(yīng)用。選擇它們以及要往helm上轉(zhuǎn)的好處是:
- 堅(jiān)持一切版本化肠缨,一切自動(dòng)化的原則逆趋;
- Helm在聲明式思維方面相對(duì)其它工具更友好;
- 方便配置與制品分離晒奕。
當(dāng)然你要是說為了使用闻书,誰又會(huì)拒絕一個(gè)好看的頁面呢。(比如rancher脑慧,openshift惠窄,kubeSphere)
記得第一次接觸helm,當(dāng)時(shí)的版本還是v2漾橙,還要部署tiller杆融。這個(gè)tiller用起來就很難過。還好v3的時(shí)候helm把它給移走了霜运。v3社區(qū)的反應(yīng)還是不錯(cuò)的脾歇,當(dāng)然文檔也相對(duì)健全了些蒋腮。于是我們著手開始編寫自己的chart。
自行版本化chart
maven藕各、npm等構(gòu)建工具的包會(huì)有一個(gè)唯一的官方源池摧,但是,Helm的chart包似乎沒有激况,你會(huì)遇到很多不同的源作彤。這對(duì)chart的版本控制非常不利,因?yàn)槟悴恢滥奶煳谥穑h(yuǎn)端的源就不見了竭讳。所以,最好的做法浙踢,使用helm pull命令將chart下載本地绢慢,然后指定一個(gè)版本上傳制品庫Nexus/artifactory的Helm倉庫中。chart 一般不會(huì)特別大洛波,所以不用像image那樣過于擔(dān)心他的體積胰舆,需要定時(shí)清理一些長久不使用不維護(hù)或者臨時(shí)的制品以達(dá)到釋放空間,資源的目的蹬挤。但是chart需要一個(gè)好的維護(hù)管理標(biāo)記缚窿,比如chart的目的功能,版本等焰扳。
使用upgrade —install子命令部署應(yīng)用
剛開始學(xué)習(xí)Helm時(shí)倦零,我們通常使用helm install來安裝chart。但是蓝翰,第二次執(zhí)行helm install光绕,就會(huì)報(bào)錯(cuò)女嘲,因?yàn)镵8s中已經(jīng)存在了該chart的release了畜份。這個(gè)過程對(duì)流水線是不友好的,所以欣尼,在流水線爆雹,我們使用的是helm upgrade —install xx ./xx.tgz來部署°倒模或者我們還可以通過namespace的方式钙态,來達(dá)到資源的隔離。
盡早標(biāo)準(zhǔn)化應(yīng)用菇晃,標(biāo)準(zhǔn)化chart
如果存在服務(wù)很多册倒,我們是不是需要每個(gè)服務(wù)都需要?jiǎng)?chuàng)建chart呢?我覺得需要的磺送。本著小步快走的目的驻子,先行替換部分方式位chart灿意,然后再逐漸改變剩下的。helm歸根到底只是一個(gè)輔助工具崇呵。所以我們會(huì)優(yōu)先改變那些比較容易實(shí)現(xiàn)的服務(wù)轉(zhuǎn)為chart方式缤剧。(當(dāng)然,還有個(gè)考量因素是deliver 給客戶的制品域慷。業(yè)務(wù)需要哪些服務(wù)需要一起給客戶荒辕,那么它們之間就存在了業(yè)務(wù)上的耦合)我們會(huì)優(yōu)先把公共的基礎(chǔ)服務(wù)先期轉(zhuǎn)為chart,比如:rabbitmq犹褒,redis抵窒,數(shù)據(jù)庫等。然后轉(zhuǎn)變相對(duì)獨(dú)立的業(yè)務(wù)模塊化漆,比如身份認(rèn)證等估脆。在最后再轉(zhuǎn)變核心的模塊。有個(gè)好處就是座云,先期轉(zhuǎn)變的服務(wù)模塊疙赠,也在各種環(huán)境中得到了驗(yàn)證,確保這些服務(wù)是能正常work的朦拖,且沒有引入新的regression圃阳。那么在轉(zhuǎn)變核心塊的時(shí)候我們是很有底氣來判斷是核心除了問題。與他關(guān)聯(lián)的服務(wù)組件都沒有嫌疑璧帝。當(dāng)然在寫的時(shí)候也是由易到難捍岳。制定標(biāo)準(zhǔn)寫法,哪里需要暴露出來等最好先期定義一下睬隶。方便以后運(yùn)用的時(shí)候能夠很好的達(dá)成目的锣夹。所謂標(biāo)準(zhǔn)化,比如那些pod對(duì)外提供服務(wù)的端口號(hào)苏潜、優(yōu)雅停機(jī)银萍、設(shè)置環(huán)境變量的方法等等這些通用的領(lǐng)域的配置都應(yīng)該是統(tǒng)一的。
盡量少使用if-else判斷
以chart中恤左,我們應(yīng)該盡量少使用if-else判斷贴唇。有時(shí),寧愿多寫幾個(gè)YAML也不要在同一個(gè)文件嵌套if-else飞袋。因?yàn)橐M可能的讓chart本身所見即所得戳气。過于復(fù)雜的邏輯反而讓chart顯得過于臃腫。
待續(xù)巧鸭。瓶您。。