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