作為一家面向互聯(lián)網(wǎng)在線模版網(wǎng)站的素材資源供應(yīng)商,圖菱科技為客戶提供模版輸出以及系統(tǒng)化解決方案。幫助客戶輸出規(guī)范化的設(shè)計產(chǎn)品。
遷移平臺的云原生之路
早在 2020 年之前,圖菱科技 IT 團隊規(guī)模比較小,開發(fā)還要兼職運維測試。發(fā)展初期,基本上由業(yè)務(wù)驅(qū)動開發(fā)?;谫Y源方面因素,所以在系統(tǒng)架構(gòu)上首先是滿足功能使用,快速開發(fā)推出產(chǎn)品,系統(tǒng)架構(gòu)建設(shè)也是基于某大廠云一步步從單體到多模塊,再到微服務(wù)做演進(jìn)。
圖菱科技初期業(yè)務(wù)方向是印刷類商品的私人訂制,滿足個性化的輸出的移動端應(yīng)用,配套生產(chǎn)的供應(yīng)的訂單管理系統(tǒng),同時涉及到旅行行業(yè),為旅行社提供定制線路設(shè)計的 SaaS 系統(tǒng),模板海報的輸出系統(tǒng),以及圖庫等旅行社所需要的素材資源。
業(yè)務(wù)系統(tǒng)服務(wù) 增多,亟需開發(fā)流程優(yōu)化
經(jīng)過幾年發(fā)展,業(yè)務(wù)系統(tǒng)服務(wù)開始增多,基礎(chǔ)技術(shù)架構(gòu)難以應(yīng)付業(yè)務(wù)的快速變化,研發(fā)團隊也亟需合理的開發(fā)流程來支持后續(xù)管理。
通過將主要面臨困難進(jìn)行了梳理,大致有以下幾點:
第一,開發(fā)環(huán)境和生產(chǎn)環(huán)境不一致:在項目迭代過程中,有時出現(xiàn)開發(fā)環(huán)境和生產(chǎn)環(huán)境配置不一致的問題,導(dǎo)致生產(chǎn)系統(tǒng)和業(yè)務(wù)問題不一致。
第二,無統(tǒng)一發(fā)布管理系統(tǒng):初期由于各方面管理粗獷,缺乏自動化構(gòu)建系統(tǒng),版本功能完后,開發(fā)需要專門手動編譯,打包上線發(fā)布,過程復(fù)雜還不好管理。
第三,資源協(xié)調(diào):雖然業(yè)務(wù)系統(tǒng)已經(jīng)采用 SpringCloud 整體微服務(wù)化,但各個服務(wù)資源的分配卻無法協(xié)調(diào)。印刷服務(wù)在生成印刷文件時需要占用系統(tǒng)資源比普通業(yè)務(wù)系統(tǒng)高幾倍,但又不是實時需要。之前都是專門用一臺機器來做,但其實這種不太靈活。所以亟需能自動擴縮容的方案。
開啟容器化改造之旅,選中 K ube Sp here
基于上述的痛點,結(jié)合自身業(yè)務(wù)系統(tǒng),圖菱科技準(zhǔn)備進(jìn)行容器化改造。
最開始接觸 Kubernetes 時了解到官方提供的管理平臺,通過調(diào)研和嘗試了下后發(fā)現(xiàn)它只是管理 Kubernetes 容器的基本信息,并不是簡單將業(yè)務(wù)放上去就能開箱即用,而涉及業(yè)務(wù)上的日志平臺,監(jiān)控系統(tǒng),鏈路最終等基礎(chǔ)運維體系還需自己去引入管理。
最后嘗試使用一些集成的平臺解決方案,其中有青云科技(qingcloud.com,股票代碼:688316)推出的開源容器平臺KubeSphere,也有Rancher。
經(jīng)過體驗后決定采用 KubeSphere,主要基于以下幾點:
第一,Kubernetes 這塊全新的知識體系要掌握達(dá)到生產(chǎn)落地學(xué)習(xí)時間成本較高,對于我們應(yīng)用性企業(yè)需要的是能簡單上手的產(chǎn)品。
第二,Rancher 側(cè)重于運維管理,學(xué)習(xí)成本相對較高;KubeSphere 偏向業(yè)務(wù)應(yīng)用為中心,更符合圖菱科技情況。
第三,Rancher 需要自己部署 Jenkins 等插件;KubeSphere 在一些組件整合上做的較好,比如 DevOps 能做到開箱即用。而發(fā)布部署是圖菱科技目前最迫切需要的。
最后,KubeSphere 是由國內(nèi)青云科技推出的產(chǎn)品,使用更符合國人習(xí)慣,而且完全開源。
具體改造實踐落地
針對已有硬件資源管理,目前圖菱科技整個業(yè)務(wù)基礎(chǔ)設(shè)施構(gòu)建在某大廠云上,包括 ECS、數(shù)據(jù)庫和 OSS 存儲等。
6 臺 ECS 分布如下:ECS-1 ~ ECS-4:業(yè)務(wù)服務(wù)。ECS-5:測試機器。ECS-6:圖菱科技內(nèi)部項目管理,包括 Bug 管理,Git 等。
主要實施步驟如下幾步:
首先,搭建鏡像倉庫在 ECS-6 上,搭建 Harbor 倉庫。提供圖菱科技業(yè)務(wù)容器應(yīng)用的私有鏡像管理工具。
其次,構(gòu)建業(yè)務(wù)系統(tǒng)鏡像 對每個業(yè)務(wù)服務(wù)添加相應(yīng)配置文件 Dockerfile, 用于平臺流水線發(fā)布時構(gòu)建鏡像。
第三,準(zhǔn)備系統(tǒng)環(huán)境。系統(tǒng)環(huán)境主要是 Kubernetes 搭建,這里主要考慮存儲和網(wǎng)絡(luò)選型。
存儲層面,最開始考慮使用 Ceph,搭建 demo 使用后發(fā)現(xiàn),如果和 Kubernetes 搭建于同一集群環(huán)境,對資源還是有一定消耗?;谀壳皹I(yè)務(wù)設(shè)計(基本上沒有有狀態(tài)服務(wù)需要涉及)、以及當(dāng)前業(yè)務(wù)體量,最終采用相對輕量的 NFS 共享盤方式。
網(wǎng)絡(luò)層面,Kubernetes 主流的網(wǎng)絡(luò)插件目前主要有 Calico 和 Flannel,我們參考社區(qū)的經(jīng)驗,最終選擇了 Calico。
安裝層面,KubeSphere 平臺是按照官網(wǎng)提供的文檔基于 Kubernetes 搭建的。
圖菱科技先最小化搭建,然后在使用的過程中再根據(jù)需要開啟一些所需組件。
KubeSphere 平臺在插件安裝這塊的體驗比較好,只需要對配置文件相應(yīng)做調(diào)整就能很容易實現(xiàn)。比如日志平臺默認(rèn)由 Elasticsearch 做存儲,但我們已經(jīng)自建有 Elasticsearch 集群,只需要調(diào)整 ks-installer 配置。
整個過程有可能會遇到一些問題,但基本上 KubeSphere 社區(qū)上都能找到解決方案。
CI/CD 發(fā)布流程也是這次改造的重點。DevOps 項目是 KubeSphere 中的一個可插拔組件,提供了基于 Jenkins 的 CI/CD 流水線,支持自動化工作流,包括 Binary-to-Image (B2I) 和 Source-to-Image (S2I) 等。
KubeSphere DevOps 提供了開箱即用的 CI/CD 流水線,并通過圖形化方式降低了學(xué)習(xí)門檻,我們就直接對官網(wǎng)的示例進(jìn)行改造,采用配置文件基于流水線 Pipleline 構(gòu)建和發(fā)布。
日志采集這塊,KubeSphere 平臺提供了 FluentBit Operator,在集群所有節(jié)點以 DaemonSet 運行,并統(tǒng)一部署配置了 Fluent Bit,同時查詢方式能滿足現(xiàn)有業(yè)務(wù)。
容器化 改造完成, 開發(fā)流程顯著改善
歷時差不多一個月時間完成基本業(yè)務(wù)系統(tǒng)容器化。圖菱科技通過 KubeSphere 不同企業(yè)空間下的項目(Namespace)來進(jìn)行開發(fā)、測試與生產(chǎn)環(huán)境的隔離以及通過不同角色賦予不同企業(yè)空間的權(quán)限,做到細(xì)粒度的權(quán)限管理。
版本上線基于 Kubernetes 的副本以及探針來控制,基本上能在不影響業(yè)務(wù)情況下做到隨時發(fā)布。圖菱科技基本架構(gòu)走向自動流程化。
目前,圖菱科技在服務(wù)網(wǎng)格這塊還在探索階段,服務(wù)治理(比如:監(jiān)控指標(biāo),微服務(wù)流控)還是處于試用體驗階段。后續(xù)隨著業(yè)務(wù)復(fù)雜度提升后,圖菱科技將加快在 KubeSphere 平臺中實現(xiàn)服務(wù)治理,做到業(yè)務(wù)與技術(shù)分離。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!