好上好信息 API 微服务集群在 KubeSphere 的部署实践
作者:徐鹏、深圳好上好信息(001298)、技术副总监、负责云服务器团队的架构设计及业务开发,拥抱云原生,乐于分享,终生学习。
公司简介
好上好信息(001298)是中国大陆一家致力于为中国智造提供全面支持的综合服务商。总部位于深圳,员工 500 多人,旗下拥有北高智、天午、大豆、蜜连和泰舸等子公司。主营业务包括电子元器件分销、物联网产品设计及芯片定制业务。好上好信息采用“集团大平台+子公司业务自主”的运营模式,各个子公司在业务层面独立经营和管理,在仓储物流、资金信贷、IT 信息系统、方案设计等后台资源方面全面共享。
其子公司大豆电子致力于互联网智能家居的整体解决方案,为物联网生态提供蓝牙模组、WIFI 模组等定制化组件,蜜连科技提供物联网整体方案开发,主要为共享产品赋能,如共享单车、共享充电宝、共享纸巾机、共享咖啡机、环保塑料袋取袋机等。
背景介绍
各子公司引入物联网业务初期,分为两个团队,独立开发各自业务,资源分配上也是以满足当前业务需求为主,要求能快速开发功能,快速上线,人员投入相对较多,因项目开发较早,技术选型相互独立,系统架构独立设计,大豆电子以 Spring boot 为主,蜜连科技以 Python Flask 为主,搭配 Golang 做中间件消息处理,随着业务交叉重合增多,旧的体系架构存在如下弊端:
- 各子公司独立开发,业务直接部署在 ECS 运行;
- 数据层相互独立部署在单独的 ECS 中使用
- 子公司间相关联业务调用,通过第三方云云接口交互;
- 部署需人工打包,上线,无 CI/CD;
- 增加新的 ECS 提供服务时,部署操作复杂;
- 资源无法动态分配利用;
- 监控引入 Prometheus,各部分功能自行配置实现。
旧业务架构如下:
选型说明
为解决当前架构中存在的业务中存在的问题,引入 K8s + Docker 对现有容器进行改造,同时进行新业务扩展。
在进行 K8s 调研及使用时,学习一众 K8s 相关技术,并搭建出一整套的 K8s 集群进行测试对比,K8s 官方提供的管理平台,操作方式繁杂,搭建过程比较复杂,在研究 K8s 的过程中,通过网络分享了解到 KubeSphere 平台。
经对比后发现:
- KubeSphere 是 Kubernetes 之上构建的面向云原生应用的分布式操作系统,包含了 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 开发,届时会使用的网关的无侵入功能。
本文由博客一文多发平台 OpenWrite 发布!
好上好信息 API 微服务集群在 KubeSphere 的部署实践的更多相关文章
- springCloud搭建微服务集群+Zuul服务器端负载均衡
概述 最近研究了一下springCloud的微服务集群,主要用到了SpringCloud的服务发现和服务器端负载均衡,所有的项目都是用的springboot,可以和springCloud无缝对接. 技 ...
- Spring Cloud Turbine微服务集群实时监控
本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...
- Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...
- Eclipse启动SpringCloud微服务集群的方法
1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...
- 关于Redis 分布式 微服务 集群Cluster
一:Redis 1,redis是一个高性能的键值对存储方式的数据库,同时还提供list,set,zset,hash等数据结构的存储. 2,Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集 ...
- SpringCloud微服务实战——搭建企业级开发框架(三十四):SpringCloud + Docker + k8s实现微服务集群打包部署-Maven打包配置
SpringCloud微服务包含多个SpringBoot可运行的应用程序,在单应用程序下,版本发布时的打包部署还相对简单,当有多个应用程序的微服务发布部署时,原先的单应用程序部署方式就会显得复杂且 ...
- SpringCloud微服务实战——搭建企业级开发框架(三十五):SpringCloud + Docker + k8s实现微服务集群打包部署-集群环境部署
一.集群环境规划配置 生产环境不要使用一主多从,要使用多主多从.这里使用三台主机进行测试一台Master(172.16.20.111),两台Node(172.16.20.112和172.16.20.1 ...
- 雪花算法及微服务集群唯一ID解决方案
雪花算法(SnowFlake) 简介 现在的服务基本是分布式.微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性. 对于 MySQL 而言,一个表中的主键 ...
- SpringCloud微服务(04):Turbine组件,实现微服务集群监控
本文源码:GitHub·点这里 || GitEE·点这里 写在前面,阅读本文前,你需要了解熔断器相关内容 SpringCloud微服务:Hystrix组件,实现服务熔断 一.聚合监控简介 1.Dash ...
- 微服务开发平台 Spring Cloud Blade 部署实践
本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台.Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot ...
随机推荐
- 一直让 PHP 程序员懵逼的同步阻塞异步非阻塞,终于搞明白了
大家好,我是码农先森. 经常听到身边写 Java.Go 的朋友提到程序异步.非阻塞.线程.协程,让系统性能提高到百万.千万并发,使我甚是惊讶属实羡慕.对于常年写 PHP 的我来说,最初听到这几个词时, ...
- 学习使用docker-compose搭建Redis哨兵集群
搭建的记录 Redis的容器部署后,redis-server的默认安装目录为 /usr/local/bin. docker volumes 映射的文件与本地的文件共享,修改本地文件后,需要重启dock ...
- 18-canvas绘制饼状图
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- AtCoder Beginner Contest 312
AtCoder Beginner Contest 312 A - Chord (atcoder.jp) #include <bits/stdc++.h> #define endl '\n' ...
- 【1】Kaggle赛题解读:RSNA 2024 Lumbar Spine Degenerative Classification
赛题名称:RSNA 2024 Lumbar Spine Degenerative Classification 中文:腰椎退行性病变分类 kaggle官网赛题链接:https://www.kaggle ...
- Windows中Powershell中的 rm -rf 等效命令
Remove-Item -Recurse -Force <要删除的目录> 可以简写为: rm -r -fo <要删除目录>
- Graphics2D绘图方法总结
一.简介 在开发中可能会遇到这样一类场景,业务复杂度不算太高,技术难度不算太深,但是做起来就很容易把人整破防,伤害很高侮辱性很强的:绘图. 绘图最怕有人挑刺:这里变形,那里不对,全图失真. 最近在处理 ...
- C 语言头文件作用的简单理解
C 语言是一种先声明后使用的语言. 举个例子: 如果你要在 main() 函数里调用一个你的函数 foo(),那么你有两种写法: 将 foo() 的定义写在 main() 之前.此时 foo() 的声 ...
- YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
前言 今天大姚给大家分享一款基于.NET8开源.免费(MIT License)功能强大的权限管理及快速开发框架,支持前后端分离,项目架构易于扩展,是中小企业的首选:YuebonNetCore. 核心设 ...
- 基于GitLab+Jenkin-CICD方案实践
前言 笔录于2022- 官网:https://about.gitlab.com/ 参考文档:https://docs.gitlab.com/ee/ci/ 清华源:清华大学开源软件镜像站 | Tsing ...