作者:徐鹏、深圳好上好信息(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 的部署实践的更多相关文章

  1. springCloud搭建微服务集群+Zuul服务器端负载均衡

    概述 最近研究了一下springCloud的微服务集群,主要用到了SpringCloud的服务发现和服务器端负载均衡,所有的项目都是用的springboot,可以和springCloud无缝对接. 技 ...

  2. Spring Cloud Turbine微服务集群实时监控

    本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...

  3. Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群

    通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...

  4. Eclipse启动SpringCloud微服务集群的方法

    1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...

  5. 关于Redis 分布式 微服务 集群Cluster

    一:Redis 1,redis是一个高性能的键值对存储方式的数据库,同时还提供list,set,zset,hash等数据结构的存储. 2,Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集 ...

  6. SpringCloud微服务实战——搭建企业级开发框架(三十四):SpringCloud + Docker + k8s实现微服务集群打包部署-Maven打包配置

      SpringCloud微服务包含多个SpringBoot可运行的应用程序,在单应用程序下,版本发布时的打包部署还相对简单,当有多个应用程序的微服务发布部署时,原先的单应用程序部署方式就会显得复杂且 ...

  7. SpringCloud微服务实战——搭建企业级开发框架(三十五):SpringCloud + Docker + k8s实现微服务集群打包部署-集群环境部署

    一.集群环境规划配置 生产环境不要使用一主多从,要使用多主多从.这里使用三台主机进行测试一台Master(172.16.20.111),两台Node(172.16.20.112和172.16.20.1 ...

  8. 雪花算法及微服务集群唯一ID解决方案

    雪花算法(SnowFlake) 简介 现在的服务基本是分布式.微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性. 对于 MySQL 而言,一个表中的主键 ...

  9. SpringCloud微服务(04):Turbine组件,实现微服务集群监控

    本文源码:GitHub·点这里 || GitEE·点这里 写在前面,阅读本文前,你需要了解熔断器相关内容 SpringCloud微服务:Hystrix组件,实现服务熔断 一.聚合监控简介 1.Dash ...

  10. 微服务开发平台 Spring Cloud Blade 部署实践

    本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台.Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot ...

随机推荐

  1. 一直让 PHP 程序员懵逼的同步阻塞异步非阻塞,终于搞明白了

    大家好,我是码农先森. 经常听到身边写 Java.Go 的朋友提到程序异步.非阻塞.线程.协程,让系统性能提高到百万.千万并发,使我甚是惊讶属实羡慕.对于常年写 PHP 的我来说,最初听到这几个词时, ...

  2. 学习使用docker-compose搭建Redis哨兵集群

    搭建的记录 Redis的容器部署后,redis-server的默认安装目录为 /usr/local/bin. docker volumes 映射的文件与本地的文件共享,修改本地文件后,需要重启dock ...

  3. 18-canvas绘制饼状图

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  4. AtCoder Beginner Contest 312

    AtCoder Beginner Contest 312 A - Chord (atcoder.jp) #include <bits/stdc++.h> #define endl '\n' ...

  5. 【1】Kaggle赛题解读:RSNA 2024 Lumbar Spine Degenerative Classification

    赛题名称:RSNA 2024 Lumbar Spine Degenerative Classification 中文:腰椎退行性病变分类 kaggle官网赛题链接:https://www.kaggle ...

  6. Windows中Powershell中的 rm -rf 等效命令

    Remove-Item  -Recurse  -Force  <要删除的目录> 可以简写为: rm -r -fo  <要删除目录>

  7. Graphics2D绘图方法总结

    一.简介 在开发中可能会遇到这样一类场景,业务复杂度不算太高,技术难度不算太深,但是做起来就很容易把人整破防,伤害很高侮辱性很强的:绘图. 绘图最怕有人挑刺:这里变形,那里不对,全图失真. 最近在处理 ...

  8. C 语言头文件作用的简单理解

    C 语言是一种先声明后使用的语言. 举个例子: 如果你要在 main() 函数里调用一个你的函数 foo(),那么你有两种写法: 将 foo() 的定义写在 main() 之前.此时 foo() 的声 ...

  9. YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架

    前言 今天大姚给大家分享一款基于.NET8开源.免费(MIT License)功能强大的权限管理及快速开发框架,支持前后端分离,项目架构易于扩展,是中小企业的首选:YuebonNetCore. 核心设 ...

  10. 基于GitLab+Jenkin-CICD方案实践

    前言 笔录于2022- 官网:https://about.gitlab.com/ 参考文档:https://docs.gitlab.com/ee/ci/ 清华源:清华大学开源软件镜像站 | Tsing ...