某制造企业基于 KubeSphere 的云原生实践
背景介绍
随着业务升级改造与软件产品专案的增多,常规的物理机和虚拟机方式逐渐暴露出一些问题:
- 大量服务部署在虚拟机上,资源预估和硬件浪费较大;
- 大量服务部署在虚拟机上,部署时间和难度较大,自动化程度较低;
- 开发人员和运维人员,由于开发和部署服务环境不同,服务不稳定经常报错,产生的隔阂问题较多,效率较低;
- 排查问题原因不便利,开发没权限上生产环境,服务日志和服务监控状态无法定位。
在竞争日益激烈和不断变化的市场环境下,公司需要在产品上不停的迭代开发,来满足业务的需求,快速进行响应变化,所以解决上述问题变得愈发迫切。
选型说明
我们调研了两款开源产品。经过综合评估和比较,我们最终选择了 KubeSphere。KubeSphere 的定位是以应用为中心的容器平台,提供了简单易用的操作界面,一定程度上降低了学习成本,同时集成了原生 Istio 等功能,更加符合开发的使用习惯。
实践过程
加快开发对应用需求的响应,快速交付价值,快速响应变化。敏捷开发是用短的迭代周期来适应更快的变化,而且保持增量的持续改进的过程,Kubernetes + Docker 是 Dev 和 Ops 融合的一个桥梁,反过来说,敏捷开发与自动化运维,推动企业 DevOps 落地,提供端对端的从需求分析到部署监控的全流程开发运维一体化。

基础设施与部署架构
KubeSphere 的搭建也非常简单,通过 KubeAdmin 安装 Kubernetes,然后用 KubeSphere 官网推荐的方式安装 KubeSphere。私有内部云平台环境来搭建 Kubernetes 与 KubeSphere。基础服务器采用的是 Linux Centos 7,内核版本是 5.6。
在搭建 Kubernetes 集群时,我们选择使用 Keepalived 和 HAproxy 创建高可用 Kubernetes 集群 master,其中包括负载均衡入口。
部署参考图:


存储与网络
目前我们主要对接的是 Ceph 的分布式存储,服务于各种持久化服务,比如我们会做一些 Harbor 的镜像,主要是 Rabbitmq、Redis、MySQL 等,生产环境主要是一些无状态的开发的服务,比如 Springboot、SpringCloud 开发的微服务,还有 Python 服务。Python 服务主要是用来做 AI 模型的简单分析。

同时也用 NFS 存储做一些有状态的数据备份和日志备份文件的存储。
网络选择了 Calico 这种纯三层的 BGP 的网络。
平台和应用的日志、监控、APM
我们采用了 ELK 采集各种基础服务和业务服务的 log,并进行日志报警监控。

我们使用 Prometheus+grafana,进行 OS、K8s 系统组件和 Pod 服务的采集和监控。


同时,我们使用 SkyWalking 来监控服务的 API 全链路性能。
CI/CD
我们使用的 KubeSphere 的 DevOps模块,里面集成了 Jenkins,流水线的构建,实现了项目从拉取代码,质量检查到项目部署一键化的流程,在 DevOps 模块中用的是自定义 GitLab 仓库。
参考图形如下:


有状态服务管理
我们目前管理了 Redis、RabbitMQ 和 Elasticsearch 等集群。
- 唯一性——对于包含 N 个副本的 StatefulSet,每个 pod 会被分配一个
[0,N)范围内的唯一序号。 - 顺序性——StatefulSet 中 pod 的启动、更新、销毁默认都是按顺序进行的。
- 稳定的网络身份标识——pod 的主机名、DNS 地址不会随着 pod 被重新调度而发生变化。
- 稳定的持久化存储——当 pod 被重新调度后,仍然能挂载原有的 PersistentVolume,保证了数据的完整性和一致性。
使用效果
KubeSphere 是一个非常流行的容器编排工具,它可以帮助用户管理和部署容器化应用程序。使用 KubeSphere 可以提高应用程序的可靠性、可扩展性和安全性。
- 开发人员几乎不用耗费时间在软件的部署和监控上,不需要关心过多的底层部署细节,节省约 30% 时间,产品迭代速度更快。
- 按角色管理权限,开发人员排查服务的错误更加方便,直接在平台上查看 log、指标数据、监控报表都很快捷,节省约 20% 的时间。
- 优化了资源利用率,降低了成本,在以前我们都是在 VM 上进行部署,服务器资源浪费比较大,经常也会进行资源利用率的检讨,上 KubeSphere 之后,资源利用率提高了 30% 以上。
未来规划
在未来,我们计划进一步发展和改进我们的基础设施环境和 DevOps 全流程效率,覆盖自动化测试流程。我们将继续关注新的技术趋势(服务网格,服务治理等)和最佳实践,并根据业务需求进行相应的升级和优化。我们也将继续加强团队的培训和技术能力,以更好地支持公司的业务发展。
本文由博客一文多发平台 OpenWrite 发布!
相关文章:
某制造企业基于 KubeSphere 的云原生实践
背景介绍 随着业务升级改造与软件产品专案的增多,常规的物理机和虚拟机方式逐渐暴露出一些问题: 大量服务部署在虚拟机上,资源预估和硬件浪费较大;大量服务部署在虚拟机上,部署时间和难度较大,自动化程度…...
Electron 学习_BrowserWindow
BrowserWindow创建并控制浏览器窗口(主进程) 条件:在 app 模块 emitted ready 事件之前,您不能使用此模块。 1.在加载页面时,渲染进程第一次完成绘制时,如果窗口还没有被显示,渲染进程会发出 ready-to-show 事件 。 在…...
Docker学习笔记,包含docker安装、常用命令、dockerfile、docker-compose等等
😀😀😀创作不易,各位看官点赞收藏. 文章目录 Docker 学习笔记1、容器2、Docker 安装3、Docker 常用命令4、Docker 镜像5、自定义镜像5.1、镜像推送到阿里云5.2、镜像私有库 6、数据卷7、Docker 软件安装8、Docker File8.1、常见保…...
解决 “Module build failed (from ./node_modules/babel-loader/lib/index.js)“ 错误的方法
系列文章目录 文章目录 系列文章目录前言一、错误原因:二、解决方法:三、注意事项:总结 前言 在前端项目开发中,如果使用了 Babel 来转译 ES6 语法,有时会遇到错误信息 “Module build failed (from ./node_modules/b…...
go学习 6、方法
6、方法 面向对象编程(OOP),封装、组合。 6.1 方法声明 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 …...
MySQL Windows版本下载及安装时默认路径的修改
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、MySQL 下载二、默认路径修改1、安装前准备【非常重要】2、启动安装程序总结1、MySQL下载2、MySQL默认路径修改前言 MySQL 被Oracle收购后,各种操作规范及约束也相应的跟着来了,这不,只…...
第3章 配置与服务
1 CoreCms.Net.Configuration.AppSettingsHelper using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; namespace CoreCms.Net.Configuration { /// <summary> /// 【应用设置助手--类】 /// <remarks> /// 摘要&#x…...
Arcgis之 KML/KMZ文件转shp
一般我们在Goole Earth上勾画的区域导出后都为KML或者KMZ格式的,但无法在arcgis等软件上直接应用,故需进行一定的转换 1.打开ArcMap,选择ArcToolbox->Conversion Tools->From KML->KML To Layer 得到如下结果(由于本KML…...
python绘制3D条形图
文章目录 数据导入三维条形图bar3d 数据导入 尽管在matplotlib支持在一个坐标系中绘制多组条形图,效果如下 其中,蓝色表示中国,橘色表示美国,绿色表示欧盟。从这个图就可以非常直观地看出,三者自2018到2022年的GDP变化…...
计算从曲线的起点到param指定的点的曲线段的长度
以下方法只能用于继承于AcDbCurve的类型 主要使用两个接口 派生类中此函数的实现应返回, 并将endParam设置为曲线端点的参数。 如果成功则返回Acad::eOk。 默认情况下, 该函数返回Acad::eNotImplemented。 virtual Acad::ErrorStatus getEndParam(double&endParam) cons…...
POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 数据压缩和打包处理与数据更新
开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…...
linux----源码安装如何加入到系统服务中(systemclt)
将自己源码安装的软件加入到系统服务中。例如nginx,mysql 就以nginx为例,源码安装,加入到系统服务中 使用yum安装nginx,自动会加入到系统服务 16-Linux系统服务 - 刘清政 - 博客园 (cnblogs.com) 第一步: 源码安装好nginx之后࿰…...
Unity 使用UnityWebRequest 读取存档 (IOS只能这样做)
打IOS包的时候发现的,不能使用正常的IO流读取,不然会读取不到数据,只能使用UnityWebRequest 读取 代码如下 public IEnumerator ReadArchive(Action<bool, string> ac, string filepath ""){UnityWebRequest request Unit…...
Caused by: org.springframework.beans.factory.
问题解决:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name IUserRepository defined in app.test4.OpportunityMatching.IUserRepository defined in EnableJpaRepositories declared on JpaRepositoriesRegistrar.Enable…...
【docker 安装】 与【docker-compose 安装】
不同的操作系统需要不同的docker安装文件:具体下载位置: Docker: https://download.docker.com/linux/static/stable/ docekr-compose:https://github.com/docker/compose/releases 1. 验证客户机器是否有docker 和docker-compose docker -…...
意外:WPS编程新工具,不用编程,excel用户:可以不用VBA啦
来来来,拓宽一下视野! 别总以为excel和WPS只能用VBA编程,也别总是想着ACCESS这些老生常谈的工具。其实对于电子表格高级用户来讲,不会VBA,不用ACCESS,也一样可以解决复杂问题或者高级应用。 尤其是WPS用户…...
GAMES101 笔记 Lecture12 Geometry3
目录 Mesh Operations: Geometry ProcessingMesh Subdivision (曲面细分)Mesh Simplification(曲面简化)Mesh Regularization(曲面正则化) Subdivision(细分)Loop Subdivision(Loop细分)如何来调整顶点位置呢?Loop Subdivision Result (Loop细分的结果) Catmull-Cla…...
Java的内部类
内部类的概念 在 Java 中,内部类是定义在另一个类或者方法的内部的类。内部类可以访问外部类的所有成员和方法,同时可以被外部类和其他类所访问。内部类可以分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 静态内部类 静…...
电赛培训(高频电路类赛题)学习总结
此篇文章基于全国电子设计大赛培训网的官网的高频电路类赛题总结的知识点。 高频电路赛题的相关理论知识点 (1)高频电路的单位 a.1kHz1000Hz不等于1KHz(大写的K是错误的) b.S是西门子,电导的单位,s是秒&…...
Rust ESP32C3开发
Rust ESP32C3开发 系统开发逐步使用Rust语言,在嵌入式领域Rust也逐步完善,本着学习Rust和ESP32的目的,搭建了ESP32C3的环境,过程中遇到了不少问题,予以记录。 ESP-IDF开发ESP32 这一部分可跳过,是使用C开…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
