作者:徐鹏、深圳好上好信息(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. 几乎纯css实现弹出框

    今天需要做一个弹出框,右下角提示的那种 ,看了一两个jquery的插件 总是不太满意 .一方面js内容太多,另一方面 不太好配合已经存在的样式使用.所以 就自己用css直接实现了下 效果还可以 . 上 ...

  2. [COCI2013-2014#6] KRUŽNICE 题解

    前言 题目链接:洛谷. 题目分析 显然,手模样例发现答案分为以下几个贡献: 所有圆外面的那个大平面,贡献为 \(1\). 每个圆至少被分成一部分,贡献为 \(n\). 如果有一个圆被"拦腰截 ...

  3. [学习笔记] 阶 & 原根 - 数论

    较为冷门(?)的数论知识,但在解决一些特殊问题上有着重要的作用. 整数的阶 根据欧拉定理有正整数 \(n\) 和一个与 \(n\) 互素的整数 \(a\),那么有 $a^{\phi(n)} \equi ...

  4. Linux嵌入式所有知识点-思维导图-【一口君吐血奉献】

    一.前言 很多粉丝问我,我的Linux和嵌入式当初是如何学习的? 其实彭老师在最初学习的过程中,走了相当多的弯路: 有些可以不学的花了太多的时间去啃 有些作为基础必须优先学习的,却忽略了, 结果工作中 ...

  5. Linux内核信号SIGIO使用实例讲解

    一.信号 1. 基本概念 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上, ...

  6. P4823 [TJOI2013] 拯救小矮人

    感觉这个题的操作很新奇,做个记录. P4823 [TJOI2013] 拯救小矮人 大概题面: 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决 定搭一个人梯.即:一个小矮人站在另一小矮人 ...

  7. 廉价平替esphome水浸 雨水传感器diy

    2024年7月27日 改进了手头的所有8266 都加了红外和dht11 干了一件非常抽象的事情 调试的时候给dht11 插到5v了 单薄的它好像要融化了 binary_sensor: # 水浸 雨水 ...

  8. 什么是API?(详解)

    编程资料时经常会看到API这个名词,网上各种高大上的解释估计放倒了一批初学者.初学者看到下面这一段话可能就有点头痛了. API(Application Programming Interface,应用 ...

  9. C#自定义控件—流动管道

    C#用户控件之流动管道 如何绘制一个动态的流动管道(FlowPipe)? 分两步绘制 定义属性: 画布重绘: 主要技能: 管道的绘制(渐变色矩形) /// <summary> /// 画渐 ...

  10. ICMAN触摸滑条滚轮方案

    ICMAN触摸滑条滚轮调光是一种利用触摸技术实现的调光控制方式,是一种更简单.直观且节能的调光方式,有效改善了用户的照明体验,并在智能家居和节能照明领域发挥着重要作用. 基于厦门晶尊微电子(ICMAN ...