利用 Zadig 多云周部署千次,持續(xù)交付全球業(yè)務(wù)
iMile 是一家跨境電商物流初創(chuàng)公司,提供中東和拉美等新興市場(chǎng)的物流服務(wù),通過(guò)自建快遞團(tuán)隊(duì)、精細(xì)化運(yùn)營(yíng)和互聯(lián)網(wǎng)技術(shù)手段,致力于完善跨境物流的末端一公里。iMile 已成長(zhǎng)為中東 Top 3 的跨境電商物流服務(wù)公司,同時(shí)也是當(dāng)?shù)匦袠I(yè)內(nèi)發(fā)展速度 Top 2 的技術(shù)效益豐碩的物流公司。
痛點(diǎn)分析
在以往的業(yè)務(wù)研發(fā)過(guò)程,我們遇到如下的痛點(diǎn):
- 環(huán)境治理復(fù)雜:dev、fat、lpt、uat、prod 等多套環(huán)境分布在不同地區(qū)的數(shù)據(jù)中心,使用 Jenkins 流水線部署交付需要大量人工干預(yù)。
- 研發(fā)效率低:研發(fā)團(tuán)隊(duì)程序調(diào)試、聯(lián)調(diào)測(cè)試環(huán)境不夠友好,經(jīng)常需要在多個(gè)環(huán)境的不同版本里來(lái)回切換協(xié)助測(cè)試、前后端排查問(wèn)題,研發(fā)時(shí)間被占用。
- 測(cè)試資源不足:排期項(xiàng)目與日常迭代經(jīng)常混合在同一套測(cè)試環(huán)境里測(cè)試,大量代碼變動(dòng)時(shí)部署并行效率不高,影響測(cè)試進(jìn)度。
- 維護(hù)成本高:服務(wù)部署使用 Jenkinsfile + YAML 的方式,每個(gè)工程需要維護(hù)一套配置和腳本,當(dāng)工程越來(lái)越多時(shí),維護(hù)成本會(huì)越來(lái)越重。
Zadig 之旅
在選型 Zadig 之前,我們有多套 K8s 集群,分別部署在了多個(gè)不同的數(shù)據(jù)中心,使用 Kubeboard 進(jìn)行多集群統(tǒng)一管控,對(duì)集群統(tǒng)管暫無(wú)其他特殊需求。
偶遇 Zadig
無(wú)意中在 B 站看到了 KodeRover Workathon 的線上分享(如下圖),就開(kāi)始同團(tuán)隊(duì)成員一起研究KodeRover(Zadig)這個(gè)產(chǎn)品。發(fā)現(xiàn)它與云原生能夠非常完美的結(jié)合,多集群服務(wù)可統(tǒng)一納管,多流水線并發(fā)構(gòu)建,容器服務(wù)可視化交付,面向研發(fā)交互友好。
恰巧當(dāng)時(shí)我們研發(fā)團(tuán)隊(duì)立項(xiàng)一個(gè)重構(gòu)的項(xiàng)目,需要一套獨(dú)立的測(cè)試環(huán)境來(lái)滿足聯(lián)調(diào)測(cè)試任務(wù)。我們抱著新鮮的態(tài)度就部署了一套 Zadig 集群,計(jì)劃通過(guò)它來(lái)解決這個(gè)項(xiàng)目重構(gòu)的測(cè)試環(huán)境需求。通過(guò) 3 天時(shí)間的摸索溝通交流,我們很快在 Zadig 上部署了前后端工程服務(wù)到 K8s 集群。
網(wǎng)絡(luò)改造
我們當(dāng)時(shí)網(wǎng)絡(luò)狀況是這樣的:辦公內(nèi)網(wǎng)與云端的開(kāi)發(fā)、測(cè)試環(huán)境內(nèi)網(wǎng)是連通的,但到 K8s 的 Service 和容器網(wǎng)絡(luò)層并未打通。
重構(gòu)項(xiàng)目小組開(kāi)始使用 Zadig 進(jìn)行項(xiàng)目測(cè)試了,但后端研發(fā)同學(xué)找到我們提了一個(gè)需求“我想 debug 這個(gè)服務(wù)打斷點(diǎn)”。若要實(shí)現(xiàn),則必須將 K8s 內(nèi)網(wǎng)與辦公網(wǎng)全面打通,我們著手對(duì)網(wǎng)絡(luò)進(jìn)行改造,這樣很快研發(fā)即可在自己的 IDEA IDE 隨時(shí)調(diào)用、debug 自己的某一個(gè)服務(wù)。
全面擁抱 Zadig
全面擁抱云原生屬于運(yùn)維體系的進(jìn)化,那么全面擁抱 Zadig 則是研發(fā)體系的進(jìn)化。
一個(gè)月后重構(gòu)項(xiàng)目順利上線,整個(gè)項(xiàng)目測(cè)試未與原有測(cè)試環(huán)境使用 NS 隔離,未對(duì)日常迭代和其他需求的測(cè)試環(huán)境造成任何干擾,項(xiàng)目部署變得非常容易,可以邊調(diào)試邊查看某個(gè)容器日志,對(duì)研發(fā)同學(xué)的操作體驗(yàn)有了質(zhì)的提升,已經(jīng)完全拋棄了原先使用 Kubelet 進(jìn)入容器的種種麻煩。
有了這個(gè)正向的反饋,我們隨即做了一個(gè)決定,將開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境等全面接入 Zadig。
經(jīng)過(guò) 4 個(gè)月的磨合,我們將所有開(kāi)發(fā)和測(cè)試環(huán)境的 K8s 集群接入了 Zadig。代碼工程通過(guò) YAML 標(biāo)準(zhǔn)模板導(dǎo)入即可創(chuàng)建部署自己需要的服務(wù)。
經(jīng)過(guò)近半年的努力,我們的研發(fā)、測(cè)試、運(yùn)維團(tuán)隊(duì)已經(jīng)將所有服務(wù)全面接入 Zadig。接入 Zadig 的服務(wù)近 400個(gè),一周部署平均近千次,較大的提升了研發(fā)效率,讓研發(fā)專注代碼業(yè)務(wù)實(shí)現(xiàn),測(cè)試團(tuán)隊(duì)專注質(zhì)量提升。測(cè)試或者驗(yàn)證過(guò)程可以在幾分鐘內(nèi)隨時(shí)拉起一套環(huán)境,供研發(fā)和測(cè)試使用,減輕了運(yùn)維工作量和成本。
簡(jiǎn)單回顧了一下幾個(gè)非常重要的需求細(xì)節(jié),我們?cè)谶@幾個(gè)功能完善之后,將所有集群全部接入了 Zadig。
- 因我們屬于多地域跨云部署,Zadig 默認(rèn)只有一個(gè)鏡像倉(cāng)庫(kù),我們?nèi)绻褂猛粋€(gè)倉(cāng)庫(kù)的話,不同集群的鏡像拉取和推送都是通過(guò)公網(wǎng)進(jìn)行,拉取速度受到帶寬制約,且消耗流量非常多。
- IM 工具消息提示推送文案優(yōu)化。
- 項(xiàng)目權(quán)限管理的顆粒化控制。
整體收益
Zadig 通過(guò)“工作流”整體串聯(lián)了 K8s 的各個(gè)組件,也串聯(lián)起了我們整個(gè)研發(fā)團(tuán)隊(duì),極大的減輕了腳本的維護(hù)、環(huán)境治理,同時(shí)上手也非常簡(jiǎn)單高效。在項(xiàng)目迭代和交付中起到了極大的幫助,節(jié)約了大量的時(shí)間成本,讓專業(yè)的人做“專業(yè)”的事兒,讓項(xiàng)目研發(fā)高效并行,減少團(tuán)隊(duì)間的溝通 Gap,給我們的研發(fā)交付幫助極大。
總結(jié)就是簡(jiǎn)單,高效!