蜘点云原生之 KubeSphere 落地实践过程

作者:池晓东,蜘点商业网络服务有限公司技术总监,从事软件开发设计 10 多年,喜欢研究各类新技术,分享技术。 来源:本文由 11 月 25 日广州站 meetup 中讲师池晓东整理,整理于该活动中池老师所分享的同名议题内容。

公司平台介绍

蜘点成立于 2016 年 4 月,致力于打造社区电商业务(解决最后 3 公里的配送问题)。当初通过自建直营渠道、自建仓库、自建大型社区仓、和采用加盟仓的方式,实现在社区的电商业务的发展,配送本地化。最多的时候在全国各个省都有分公司及下属子公司,在每个省都有省仓,在南北的主要城市都建有大型仓。

后面随着电商行业的落幕,公司又转型做企业数字化整体解决方案(产业互联网方向)。整体发展如下图:

平台背景介绍

公司通过购买服务器组建了一个内部云,托管在 IDC 机房中,一直使用 VMware 的虚拟化技术,来实现虚拟机的管理。随着业务增加,项目从单体架构向分布式架构演进,虚拟机数量也随着增加,给开发与运维管理来了不少问题,随着微服务技术的发展,采用容器化架构成为了解决公司底层架构的问题。

  • 业务快速发展,不新增虚拟主机,环境搭建复杂,早期通过虚拟机模板解决;
  • 各个项目组之间的业务调用,都是通过 HTTP 接口交互,效率不高;
  • 部署靠人工编译打包上传,测试/上线,无 CI/CD,开发效率低;
  • 运维压力大,运维资源缺乏,各个服务、中间件的监控不到位,虽有 Zabbix,但管理不过来,缺少统一的监控面板;
  • 虚拟机的资源难以动态分配利用,资源被固定化;
  • 缺少专业的运维人员,环境安装、监控不够完善,资源使用情况难可视化(运维人员就一个);
  • 前端组也想采用容器化部署,不要在本地打包,通过 FTP 上传静态文件的方式;
  • 运维人员想减少虚拟机数量,新上线业务不需要创建很多虚拟机,只需要增加少量节点就可以。

平台选型

业务痛点

从前面的介绍,在从单体架向分布式架构的演变过程中,伴随着业务的快速发现,与快速响应,基础模块及业务模块越来越多,团队都忙在打包部署的过程中。

  • 修 Bug 打包部署。
  • 上线打包部署。
  • 每次上线全团队 StayBy, 折腾至深夜。
  • 效率低下,版本延迟。

引入 Jenkins 半自动化部署

为解决团队的效率问题,首先引入 Jenkins,通过 Jenkins 解决大部分部署问题。

引入 Kubernetes(K8s)

Jenkins 的引入,已经能很大的提高效率,但还是存在一些问题:

  • 服务太多,每次部署要排队。
  • 虚拟机太多,维护 Shell 脚本成本高。
  • 资源利用率低,没有用到点上。

自建 K8s 集群,可以解决繁锁的 Shell 脚本问题,结合 Jenkins 的 K8s 的插件,通过 Dockerfile + yaml 的方式进行部署。

自建 K8s 维护痛点:

  • 运维集群困难,缺乏简单方便的可视化工具,团队大多是开发人员,运维经验有限。
  • 操作 K8s 都是纯脚本形式,维护比较困难,由于缺乏可视化工具,应用部署与配置修改全是依靠命令脚本手动执行。
  • 还是达不到回收服务器权限的目的,排查问题还是要上 K8s,缺少资源监控与调度。

选择 KubeSphere 原由

在 K8s 可视化管理工具的调研过程中,发现 KubeSphere 比较适合公司,对比国外开源的 Kubernetes Dashboard、Rancher,KubeSphere 还是比较适合国内的使用。

  • 可视化的 K8s 管理工具,包含了所有 K8s 的功能。
  • 一体化的 DevOps,降低部署复杂度,应用生命周期。
  • 多租户管理,满足不同子公司的业务隔离需求。
  • 集成角色权限管理功能,满足对不同人员分配不同权限的需求。
  • 在线日志查看功能,降低对服务器用户的管理。
  • 集群可视化管理,监控可视化。
  • 平台中的所有功能都是可插拔与松耦合,可以根据业务场景可选安装所需功能组件。

落地实践、效果

平台微服务架构部署

KubeSphere 生产环境规划与安装

生产环的配置规划是: 3 个 Master Node:8C 16G 100G 磁盘, 10+ Worker Node(初期),20+ Worker Node(后续增加)。

部署 SpringCloud 的微服务套件,包括 Eureka,Redis, 电商平台的微服务,如商品、订单、会员等。ToB 微服务,企业数字化 10+ 项目。

KubeSphere 的使用规则

团队及项目划分
  • 按子公司及不同的端建立不同的企业空间 -- 企业空间。
  • 在项目管理中按不同的业务线,建立不同的项目组合。
  • 创建的用户,按 platform-regular 的角色。
  • 在企业空间、项目管理、流水线中添加成员。

节点管理及部署
  • 节点标签,为每个节点配置标签,和 yml 配合使用。
  • 不使用主机网络模式。
  • 重要数据文件采用挂载宿主机目录。
  • 对外服务需提供 NodePort 配置。

KubeSphere 集群

KubeSphere 应用部署与流水线

KubeSphere 使用效果

  • 全流程的 DevOps,释放开发频繁打包部署的工作,专注于研发。
  • 可视化的资源监控,配合告警等措施,提升运维的能力。
  • 多租户,多空间,项目的隔离,使用者权限的分管,让跨业务团队的管理更精准。
  • 缩减原来的虚拟主机(4C 8G),组成资源更大的节点,资源利用率提升。
  • 支持在线化的动态扩容,操作方便,想增加或减少实例,操作一下就搞定。
  • 前端也实现容器化部署,释放手动打包上传的工作量。

存在问题及解决方法

当时官方提供的 Maven 版本不是 3.6 的版本,如何解决?

解决:自己制作了一个 3.6 的 Maven 基础镜像,然后在 Clusterconfiguration,找到 Maven 的 image,修改即可。

自建了 nexus,如何修改 maven setting.xml?

解决:在 CRDs 筛选 kubesphere-devops-system,找到 ks-install,修改里面的 maven setting.xml 即可,修改后,要登录 Jenkins,重新 reload 配置。

如何访问 Jenkins?

解决:Master 的 ip + 30180,登录账号密码和 KubeSphere 的管理员。可以参考文件:https://juejin.cn/post/7124589639536476190

在容器中如何访问共享文件?

解决:通过挂载 NFS 系统来访问。

容器中的文件随着容器销毁而消失,想要保存更长时间文件?

解决:通过挂载宿主机的文件/或磁盘。

容器在滚动部署过程中会被销毁,其他服务调用还是走旧 IP 访问,404?

解决:通过在 Kubernetes 的 Service 来调用(SVC)。

DevOps 与自建 Gitlab 搭配怎么触发构建?

解决:进入 Jenkins 在流水线上使用通用钩子触发。

未来规划

通过引入 KubeSphere 中间件管理平台,极大地提交了整体的交付效率,节省在部署环节的时间支付,通过工具更好的实现了 CI/CD;提供了可视化的资源界面,能更清楚地知道各个服务器的资源使用情况,做到很好的监控。

随着平台的使用成熟,越来越多的业务将迁入平台,包括前端、.net、或者其他子公司的业务。KubeSphere 的更多功能,将为业务的发展提供很好的基础。

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/233601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm login报错:Public registration is not allowed

npm login报错:Public registration is not allowed 1.出现场景2.解决 1.出现场景 npm login登录时,出现 2.解决 将自己的npm镜像源改为npm的https://registry.npmjs.org/这个,解决!

Android Studio 显示前进后退按钮

在写代码的过程中我们经常需要快速定位到先前或者往后的代码位置,可以使用Alt左右箭头 但是新安装的Android Studio工具栏上是没有显示左右箭头的工具按钮的,需要我们设置将Toolbar显示出来 View-Appearance-Toolbar 勾选即可 显示后

关于反射机制的简单理解

1、反射的简单认识 1.1 定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到,那么我…

el-form与el-upload结合上传带附件的表单数据(后端篇)

1.写在之前 本文采用Spring Boot MinIO MySQLMybatis Plus技术栈,参考ruoyi-vue-pro项目。 前端实现请看本篇文章el-form与el-upload结合上传带附件的表单数据(前端篇)-CSDN博客。 2.需求描述 在OA办公系统中,流程表单申请人…

【图的应用一:最小生成树】- 用 C 语言实现普里姆算法和克鲁斯卡尔算法

目录 一、最小生成树 二、普里姆算法的构造过程 三、普里姆算法的实现 四、克鲁斯卡尔算法的构造过程 五、克鲁斯卡尔算法的实现 一、最小生成树 假设要在 n 个城市之间建立通信联络网,则连通 n 个城市只需要 n - 1 条线路。这时,自然会考虑这样…

Android的组件、布局学习

介绍 公司组织架构调整,项目组需要承接其他项目组的android项目,负责维护和开发新需求,故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否,是与F:\androidProject\android_lear…

功能点估算的常规流程

功能点估算流程在软件项目管理中起着重要的作用,它可以帮助项目团队更好地理解项目的需求和目标,从而提高项目的成功率和效率。如果功能点估算未按流程进行,可能会导致项目估算不准确,估算时间超出预期等问题。 因此功能点估算的常…

设计测试用例(万能思路 + 六种设计用例方法)(详细 + 图解 + 实例)

一、设计测试用例的万能思路 针对某个物品/功能进行测试。 万能思路:功能测设 界面测试 性能测试 兼容性测试 易用性测试 安全测试。 总结: 功能测试: 水杯:装水、喝水... 注册场景:注册 登录 想象日常使用…

西南科技大学数字电子技术实验五(用计数器设计简单秒表)FPGA部分

一、实验目的 1.进一步理解用中规模集成计数器构成任意进制计数器的原理。 2.了解计数器的简单应用。 3.进一步学习与非门和译码显示器的使用方法。 4.学会用FPGA实现本实验内容。 二、实验原理 简单秒表 可暂停、复位秒表 三、程序清单(每条语句必须包括注释或在开发…

[Linux] LVS+Keepalived高可用集群部署

一、Keepalived实现原理 1.1 高可用方案 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色…

Jenkins+Docker+Gitee搭建自动化部署平台

目录 服务器准备 Docker安装 yum 包更新到最新 设置yum源 安装docker 启动和开机启动 验证安装是否成功 Jenkins安装 拉取镜像 创建映射目录 运行镜像 运行出错 修正权限 重新运行镜像 新建安全组,放通8080端口 激活Jenkins Jenkins插件 Jenkins全…

【论文解读】Comparing VVC, HEVC and AV1 using Objective and Subjective Assessments

时间:2020 级别:IEEE 机构: IEEE 组织 摘要: 对3种最新的视频编码标准HEVC (High Efficiency video Coding)测试模型HM (High Efficiency video Coding)、amedia video 1 (AV1)和Versatile video Coding测试模型 (VTM)进行了客观和…

UE5 水材质注意要点

1、两个法线反向交替流动,可以去观感假的现象 2、水面延边的透明度低 3、增加水面延边的浪花 4、增加折射 折射要整体质量至少在High才有效果 改为半透明材质没有法线信息? 5、处理反射效果 勾选为true 找到这个放在水域 勾为false,即可有非…

欺骗技术:网络反情报的艺术

网络攻击变得越来越普遍和复杂。例如,2022 年,数据泄露的平均成本高达 445 万美元,显示了这些威胁的严重影响。 这清楚地表明对先进安全方法的需求与日俱增。迅速流行的技术之一是欺骗技术。 与直接阻止或识别威胁的标准安全方法不同&…

VBA之Word应用:利用代码统计文档中的书签个数

《VBA之Word应用》(版权10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实…

在 Kubernetes 上部署 Python 3.7、Chrome 和 Chromedriver(版本 114.0.5735.90)的完整指南

一、构建基础镜像 docker build -f /u01/isi/DockerFile . -t thinking_code.com/xhh/crawler_base_image:v1.0.2docker push thinking_code.com/xhh/crawler_base_image:v1.0.2 二、K8s运行Pod 三、DockerFile文件 # 基于镜像基础 FROM python:3.7# 设置代码文件夹工作目录…

Axure中继器的使用实现表格的增删改查的自定义文件

目录 一.认识中继器 1.1.什么中继器 1.2. 中继器的组成 1.3.中继器的使用场景 二.中继器进行增删改查 三.十例表格增删改查 还有Axure这个东西许多东西需要我们去发现,我们需要去细心的研究,我们一起加油吧!!!今…

ASP.NET Core MVC依赖注入理解(极简个人版)

依赖注入 文献来源:《Pro ASP.NET Core MVC》 Adam Freeman 第18章 依赖注入 1 依赖注入原理 所有可能变化的地方都用接口在使用接口的地方用什么实体类通过在ConfigureService中注册解决注册的实体类需要指定在何种生命周期中有效 TransientScopedSingleton 2…

SQL 入门指南:从零开始学习 SQL

当今时代,数据已经成为了我们生活中不可或缺的一部分。无论是企业的经营决策,还是个人的日常消费习惯,都需要通过对数据的收集、分析和应用来实现更好的结果。 而关系型数据库系统,作为最常见的数据存储和管理方式,SQ…

13 v-show指令

概述 v-show用于实现组件的显示和隐藏,和v-if单独使用的时候有点类似。不同的是,v-if会直接移除dom元素,而v-show只是让dom元素隐藏,而不会移除。 在实际开发中,v-show也经常被用到,需要重点掌握。 基本…