作者:徐鵬,深圳好上好信息,技術(shù)副總監(jiān),負(fù)責(zé)云服務(wù)器團(tuán)隊(duì)的架構(gòu)設(shè)計(jì)及業(yè)務(wù)開發(fā),擁抱云原生,樂于分享,終生學(xué)習(xí)。
公司簡(jiǎn)介
好上好信息是中國(guó)大陸一家致力于為中國(guó)智造提供全面支持的綜合服務(wù)商。總部位于深圳,員工 500 多人,旗下?lián)碛斜备咧恰⑻煳纭⒋蠖?、蜜連和泰舸等子公司。主營(yíng)業(yè)務(wù)包括電子元器件分銷、物聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)及芯片定制業(yè)務(wù)。好上好信息采用“集團(tuán)大平臺(tái)+子公司業(yè)務(wù)自主”的運(yùn)營(yíng)模式,各個(gè)子公司在業(yè)務(wù)層面獨(dú)立經(jīng)營(yíng)和管理,在倉(cāng)儲(chǔ)物流、資金信貸、IT 信息系統(tǒng)、方案設(shè)計(jì)等后臺(tái)資源方面全面共享。
其子公司大豆電子致力于互聯(lián)網(wǎng)智能家居的整體解決方案,為物聯(lián)網(wǎng)生態(tài)提供藍(lán)牙模組、WIFI 模組等定制化組件,蜜連科技提供物聯(lián)網(wǎng)整體方案開發(fā),主要為共享產(chǎn)品賦能,如共享單車、共享充電寶、共享紙巾機(jī)、共享咖啡機(jī)、環(huán)保塑料袋取袋機(jī)等。
背景介紹
各子公司引入物聯(lián)網(wǎng)業(yè)務(wù)初期,分為兩個(gè)團(tuán)隊(duì),獨(dú)立開發(fā)各自業(yè)務(wù),資源分配上也是以滿足當(dāng)前業(yè)務(wù)需求為主,要求能快速開發(fā)功能,快速上線,人員投入相對(duì)較多,因項(xiàng)目開發(fā)較早,技術(shù)選型相互獨(dú)立,系統(tǒng)架構(gòu)獨(dú)立設(shè)計(jì),大豆電子以 Spring boot 為主,蜜連科技以 Python Flask 為主,搭配 Golang 做中間件消息處理,隨著業(yè)務(wù)交叉重合增多,舊的體系架構(gòu)存在如下弊端:
1、各子公司獨(dú)立開發(fā),業(yè)務(wù)直接部署在 ECS 運(yùn)行;
2、數(shù)據(jù)層相互獨(dú)立部署在單獨(dú)的 ECS 中使用;
3、子公司間相關(guān)聯(lián)業(yè)務(wù)調(diào)用,通過第三方云云接口交互;
4、部署需人工打包,上線,無 CI/CD;
5、增加新的 ECS 提供服務(wù)時(shí),部署操作復(fù)雜;
6、資源無法動(dòng)態(tài)分配利用;
7、監(jiān)控引入 Prometheus,各部分功能自行配置實(shí)現(xiàn)。
舊業(yè)務(wù)架構(gòu)如下:
選型說明
為解決當(dāng)前架構(gòu)中存在的業(yè)務(wù)中存在的問題,引入 K8s + Docker 對(duì)現(xiàn)有容器進(jìn)行改造,同時(shí)進(jìn)行新業(yè)務(wù)擴(kuò)展。
在進(jìn)行 K8s 調(diào)研及使用時(shí),學(xué)習(xí)一眾 K8s 相關(guān)技術(shù),并搭建出一整套的 K8s 集群進(jìn)行測(cè)試對(duì)比,K8s 官方提供的管理平臺(tái),操作方式繁雜,搭建過程比較復(fù)雜,在研究 K8s 的過程中,通過網(wǎng)絡(luò)分享了解到青云科技推出的 KubeSphere 平臺(tái)。
經(jīng)對(duì)比后發(fā)現(xiàn):
KubeSphere 是 K8s 之上構(gòu)建的面向云原生應(yīng)用的分布式操作系統(tǒng),包含了 K8s 所能實(shí)現(xiàn)的所有功能;
KubeSphere 在 K8s 的基礎(chǔ)上,提倡開箱即用,內(nèi)置多種可配置插件,為使用者提供相對(duì)最優(yōu)解決方案;
KubeSphere 提供多租戶管理,監(jiān)控告警等各種監(jiān)看功能;
KubeSphere 管理界面對(duì)比 K8s 簡(jiǎn)潔明了,操作方便;
KubeSphere 提供 KubeKey 快速集群搭建,只需要簡(jiǎn)單的幾個(gè)配置修改,便可完成 K8s 集群,KubeSphere 管理頁面等眾多復(fù)雜的安裝部署工作;
KubeSphere 為國(guó)內(nèi)開源項(xiàng)目,提供豐富的示例文檔、視頻教程、開源社區(qū)等,出現(xiàn)問題時(shí)更快速的找到解決方案。
目前,我同新業(yè)務(wù)使用 SpringCloud 微服務(wù)業(yè)務(wù)進(jìn) KubeSphere 生產(chǎn)集群, KubeSphere 測(cè)試集群來滿足我司業(yè)務(wù)的開展,使用 GitLab+Harbor+KubeSphere 提供的 DevOps,實(shí)現(xiàn) CI/CD,實(shí)現(xiàn)快速部署,高效監(jiān)看。
實(shí)踐過程
硬件資源
阿里云 ECS(8C 16G) 12 臺(tái)。阿里云 SLB 1 臺(tái)。
資源分配
生產(chǎn)集群:阿里云 SLB 1 臺(tái)、阿里云 ECS 8 臺(tái)
測(cè)試集群:阿里云 ECS 3 臺(tái)
代碼及 BUG 管理:阿里云 ECS 1 臺(tái)
部署架構(gòu)
生產(chǎn)環(huán)境:為滿足 K8s 集群服務(wù)需要做到高可用,需要保證 kube-apiserver 的 HA ,使用了阿里云 SLB 的方式進(jìn)行高可用配置,具體部署結(jié)構(gòu)如圖;
測(cè)試環(huán)境:使用三臺(tái) ECS 搭建 KubeSphere 集群,其中 Master 同時(shí)做 worker 節(jié)點(diǎn)使用(不推薦);
代碼及缺陷追蹤系統(tǒng):?jiǎn)为?dú)使用一臺(tái) ECS 使用 Docker 搭建,方便遷移與維護(hù),為集團(tuán)內(nèi)所有技術(shù)開發(fā)人員提供 Git Server 及 mantis 服務(wù);
數(shù)據(jù)存儲(chǔ):數(shù)據(jù)存儲(chǔ)層使用阿里 NAS 文件系統(tǒng),方便數(shù)據(jù)快照備份及容量擴(kuò)展;
互聯(lián)網(wǎng)文件分發(fā):使用阿里云 OSS + 阿里云 CDN 進(jìn)行分發(fā)內(nèi)容。
系統(tǒng)架構(gòu)圖
采用標(biāo)準(zhǔn) Spring Boot 微服務(wù)架構(gòu),業(yè)務(wù)層、中間件層、數(shù)據(jù)層、CI/CD 均使用 KubeSphere 進(jìn)行部署,使用 K8s 標(biāo)準(zhǔn)存儲(chǔ)類進(jìn)行數(shù)據(jù)存儲(chǔ),中間件及數(shù)據(jù)層的配置數(shù)據(jù)及加密數(shù)據(jù),則使用 K8s 配置字典和保密字典。
數(shù)據(jù)存儲(chǔ)類
平臺(tái)存儲(chǔ)部分使用 KubeSphere 安裝時(shí)提供的 OpenEBS,業(yè)務(wù)及中間件數(shù)據(jù)均采用阿里 NAS 使用,方便業(yè)務(wù)數(shù)據(jù)備份。
云平臺(tái) CI/CD 實(shí)踐
CI/CD 流程圖:
CI/CD 簡(jiǎn)述:
開發(fā)人員提交代碼;
Gitlab 觸發(fā)推送事件;
GitLab 調(diào)用回調(diào)鉤子觸發(fā) Jenkins 構(gòu)建任務(wù);
Jenkins 根據(jù)構(gòu)建任務(wù)中流水線腳本進(jìn)行任務(wù)執(zhí)行,拉取代碼、Maven 編譯、Docker 構(gòu)建、Docker 推送 Harbor、執(zhí)行部署腳本、企業(yè)微信通知。
CI/CD 工作流:
API 微服務(wù)部署
工作負(fù)載部署
服務(wù)部署
保密詞典
中間件配置
日志系統(tǒng)
一部分,集群運(yùn)行日志及容器運(yùn)行日志,采用 KubeSphere 默認(rèn)提供的 ES 進(jìn)行收集存儲(chǔ);
API 業(yè)務(wù)部分日志采用 logstash + ElasticSearch 進(jìn)行收集落盤,采用 kibana 進(jìn)行日志讀取及查看。
Q&A
1. 使用 Aliyun Docker 倉(cāng)庫(kù),CI/CD 耗時(shí)很久。
解決:從應(yīng)用商店安裝 Harbor,倉(cāng)庫(kù)由 Aliyun Docker 轉(zhuǎn)為 Harbor。
2. Jekins 經(jīng)常重啟。
解決:kubesphere-devops-system 中 devops-jenkins 開啟了內(nèi)存限制 2G,修改為 4G。
3. Devops 與自建 Gitlab 搭配不知道怎么觸發(fā)。
解決:進(jìn)入 Jenkins 在流水線上使用通用鉤子觸發(fā)。
使用效果
目前在使用 KubeSphere 的體驗(yàn):
安裝 KubeSphere 環(huán)境非常便捷,基本上屬于開箱即用;
CI/CD 大大簡(jiǎn)化了開發(fā)部署成本;
KubeSphere 內(nèi)置的多種穩(wěn)定高效組件,保證集群的穩(wěn)定運(yùn)行;
KubeSphere 可以使用第三方 Helm 倉(cāng)庫(kù),方便安裝 Helm 應(yīng)用,在安裝中間件上,簡(jiǎn)化了原有的編寫 yml 文件的過程。
未來規(guī)劃
目前公司新業(yè)務(wù)運(yùn)行在 KubeSphere 集群,未來規(guī)劃將舊業(yè)務(wù)平滑遷移進(jìn) KubeSphere 集群;
目前微服務(wù) Spring Cloud,治理采用 sentinel,更多新業(yè)務(wù)有可能選用 Golang 開發(fā),屆時(shí)會(huì)使用的網(wǎng)關(guān)的無侵入功能。