花生好车基于 KubeSphere 的微服务架构实践
公司简介
花生好车成立于 2015 年 6 月,致力于打造下沉市场汽车出行解决方案第一品牌。通过自建直营渠道,瞄准下沉市场,现形成以直租、批售、回租、新能源汽车零售,四大业务为核心驱动力的汽车新零售平台,目前拥有门店 600 余家,覆盖 400 余座城市,共设有 25 个中心仓库。目前已为超 40 万以上用户提供优质的用车服务,凭借全渠道优势和产品丰富度成功领跑行业第一梯队。
背景介绍
公司在自建 IDC 机房的物理服务器使用 kvm 作为底层虚拟机管理,随着业务增加,导致系统存在一些问题,故有了此次底层基础架构改造实践。
如:
- 利用率不饱和:各类服务器的 CPU 利用率普遍不饱和,闲时利用率低下,且忙闲不均;
- 耗能大:服务器需求量大,机柜、网络、服务器等利用率低;
- 基础资源庞杂:底层标准化不一,无法传承;
- 资源共享不足:烟筒式建设模式,资源相互隔离且固定投资成本高,为满足业务峰值,需采购大量数据扩容服务器产品等;
- 存储容量不断上升,逻辑存储设备增加,管理复杂和强度增大;
- 业务网缺乏总体发展规划,部分系统或平台的功能定位不清晰,跨部门、跨区域、跨系统的流程界面模糊;
- 系统开发和上线周期长,后期维护和问题定位开销大,平台的独立建设多为烟筒式建设和孤岛化解决方案;
- 业务流程,平台结构和接口缺乏统一规范和要求。
平台选型
作为 DevOps 运维团队,我们需要提供自助化的综合运维平台。在开源平台选型时,公司最终选择了 KubeSphere:
- 完全开源,无收费,可进行二次开发;
- 功能丰富,安装简单,支持一键升级和扩容,完善的 DevOps 工具链;
- 支持多集群管理,用户可以使用直接连接或间接连接导入 Kubernetes 集群;
- 集成可观测性,可按需添加想要监控的指标以及告警,以及日志查询;
- 自定义角色和审计功能,便于后续数据分析。
相比其他平台,KubeSphere 更好地规避了 Kubernetes 本身的复杂性,也减少了集成各类开源工具的工作量。这使得我们可以更专注于运维自动化与自助化平台建设,而不需要单独管理底层基础架构与服务。提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。因此 KubeSphere 成为我们满足公司需求的最佳选择。
实践过程
基础设施建设与规划
Kubernetes 集群
因业务需要,我们将测试、生产两套环境独立开,避免相互影响。生产如上图所示是三个 Matsre 节点,目前为十三个 Node 节点,这里 Master 节点标注污点使其 Pod 不可调度,避免主节点负载过高等情况发生。
生产环境使用了官方推荐的 Keepalived 和 HAproxy 创建高可用 Kubernetes 集群
高可用 Kubernetes 集群能够确保应用程序在运行时不会出现服务中断,这也是生产的需求之一。

上图为官方文档,详细介绍可参考。
发版工作流示意图:


底层存储环境
底层存储环境,我们并未采用容器化的方式进行部署,而是以传统的方式部署。这样做也是为了高效,而且在互联网业务中,存储服务都有一定的性能要求来应对高并发场景。因此将其部署在裸机服务器上是最佳的选择。
MySQL、Redis、NFS 均做了高可用,避免了单点问题,Ceph 是作为 KubeSphere StorageClass 存储类通过 cephfs 挂载,目前大部分为无状态应用,后续部署有状态应用会对存储进一步优化。
监控平台
为日常高效使用 KubeSphere,我们将集成的监控告警进行配置,目前大部分可满足使用,至于 node 节点,通过单独的 PMM 监控来查看日常问题。
告警示例:

监控示例:


使用效果
引入 KubeSphere 很大程度的减轻了公司研发持续集成、持续部署的负担,极大提升了整个研发团队生产里项目交付效率。研发团队只需自行在本地实现 function 修复 Bug,之后 Commit 提交代码至 git,然后基于 Jenkins 发布测试环境/生产环境的工程,此时整套 CI/CD 持续集成交付的工作流程就彻底完成了,剩余的联调工作就交给研发。
基于 KubeSphere 实现 DevOps,给我们带来了最大的效率亮点如下:
平台一体化管理:在服务功能迭代方面,只需要登录 KubeSphere 平台,点击各自所负责的项目即可,极大的减轻了部署工作量,可以通过 Jenkins 结合 KubeSphere,同样能实现项目交付工作,但整套流程相对繁琐,既要关注 Jenkins 平台的构建情况,同时也要关注 KubeSphere 交付结果;造成了诸多不便,也背离了我们交付的初衷,后续我们可能通过 KubeSphere 自带的自定义流水线来统一管理。
资源利用率显著提高:KubeSphere 和 Kubernetes 相结合,进一步优化了系统资源利用率,降低了使用成本,最大限度增加了 DevOps 资源利用率。
未来规划(改进)
目前通过这次生产项目中引入 KubeSphere 云原生平台实践,发现确实给我们解决了微服务部署和管理的问题,基于 KubeSphere 平台的能力进行云原生架构的迁移,极大的提高我们的便捷性。负载均衡、应用路由、自动扩缩容、DevOps 等
在平台助力下,我们的研发和运维效率显著提升。我们相信运用 KubeSphere 的云原生平台,服务网格治理、金丝雀、灰度发布、链路追踪必将为公司下一步业务增长提供坚实基础。
本文由博客一文多发平台 OpenWrite 发布!
花生好车基于 KubeSphere 的微服务架构实践的更多相关文章
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 基于netty的微服务架构
基于netty的微服务架构 微服务一篇好文章 http://san-yun.iteye.com/blog/1693759 教程 http://udn.yyuap.com/doc/essential-n ...
- 基于 Spring Cloud 的微服务架构实践指南(下)
show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringCloud 我是布尔bl,你的支持是我分享的动力! 一.引入 上回 基于 S ...
- 微服务架构实践 - 你只懂docker与spring boot就够了吗?
微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...
- 基于.net的微服务架构的开发测试环境运维实践
眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...
- iUAP云运维平台v3.0全面支持基于K8s的微服务架构
什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...
- 基于.net的微服务架构下的开发测试环境运维实践
眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...
- 基于容器与微服务架构的Web应用示例eShopOnContainers
简介 微软官方提供了一个基于Docker和微服务的示例应用eShopOnContainers:它使用了面向服务的架构并且从服务端到客户端都是跨平台的:该架构使用通过http作为客户端与服务端直接的通信 ...
- 用友iuap云运维平台支持基于K8s的微服务架构
什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...
- 基于OpenResty和Node.js的微服务架构实践
什么是微服务? 传统的单体服务架构是单独服务包,共享代码与数据,开发成本较高,可维护性.伸缩性较差,技术转型.跨语言配合相对困难.而微服务架构强调一个服务负责一项业务,服务可以单独部署,独立进行技术选 ...
随机推荐
- Accurately computing running variance —— 已知两个数列各自的均值和方差,如何快速求出两个数列拼合后的均值和方差(续)
原内容来自: https://www.johndcook.com/blog/standard_deviation/ 计算公式: 该种计算方式可以只保存历史数据的平方和,与历史数据的和. 相关前文: 已 ...
- PyTorch显存机制分析——显存碎片问题
参考前文: https://www.cnblogs.com/devilmaycry812839668/p/15578068.html ================================= ...
- pytorch不像TensorFlow那样有专用的文件存储格式真的是不足吗?pytorch该如何处理大量小文件的读取呢?
偶然发现前文: [转载] PyTorch下训练数据小文件转大文件读写(附有各种存储格式对比) 在谈论pytorch的文件读取问题,因为以前是搞TensorFlow的,后来由于编写效率和生态环境问题转为 ...
- 在vscode中通过修改launch.json文件为项目添加启动参数——在launch.json文件中修改args变量
以前一直在使用pycharm,不管怎么说毕竟国内外的Python编程者大部分都更支持pycharm,并且认为pycharm是Python语言编程中最好用的编辑器,但是随着国内编程人员一茬一茬的兴起很多 ...
- 恭喜社区迎来新PMC成员!
恭喜Apache SeaTunnel社区又迎来一位PMC Member@liugddx!在社区持续活跃的两年间,大家经常看到这位开源爱好者出现在社区的各种活动中,为项目和社区发展添砖加瓦.如今成为项目 ...
- 曝光!Apache SeaTunnel Catalog 功能设计为何能大大简化用户启用步骤?
Catalog(目录)提供了关于数据库.表格和访问数据所需的信息的元数据,以及统一的 API 来管理元数据,验证连接,让元数据对 Sources(数据源).Sinks(数据汇)和 Web 可访问. C ...
- 让你的C程序,可以自动更新版本信息
一.软件管理 稍微上点规模的软件开发往往周期都非常长, 中间会产生很多临时版本, 这些临时版本往往会有各种各样的bug, 由于项目参与的人员众多.水平参差不齐, 软件分支众多.功能复杂, 经常会有各种 ...
- 记一次解决OTA死机重启bug,如何分析与解决措施?!
背景: 平台:stm32mp151平台 什么是OTA? 说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上. 我们不仅可以通过网络下载OTA升级包,也可以通 ...
- redis-cli命令行工具使用
redis 6.2.8 1.连接 ./redis-cli -h 127.0.0.1 -p 6379 -a admin@2020 -h redis主机地址 -a redis密码 -p redis端口 2 ...
- 直播机--蓝松绿幕抠图SDK功能表