云原生业务全流程DevOps配置预研与实践

背景

我在一个二线城市(山东济南),相对与北上广深杭这些IT业发达的城市来说,济南IT业对于业内新技术的接受度是有点慢的,国内很多一线大厂早先几年前就开始实践使用的技术,我们这边也是近两年才开始慢慢兴起。
我本人是在21年开始正式接触云原生。我们当时的CTO是一个比较有超前意识(相对而言),且是一个敢于尝试的领导。当时公司的平台系统,平时虽然运行的挺好,但每年的那几个关键集中业务期,因并发量大,总会崩溃几十分钟。客户对此非常不瞒,公司上下从业务部门到研发部门都面临着巨大的压力。
解决问题的方法无非就那么几种:

  • 优化服务性能,提升业务并发,治标治本。但是要能做,也不至于拖了这么长时间了
  • 扩容集群,用预算换并发,治标不治本。超额预算对高层无法交代
  • 引入新技术,多方位对问题进行缓解或解决

然后经过种种决策,我们决定上马K8S+Istio,来解决我们所面临的“难题”。
过程中我们肯定会遇到很多新的难题,比如:

  • 新知识的学习与应用,每个团队成员都需要更新自己的知识体系
  • 新框架的使用与老框架之间转换的时间成本把控
  • 团队成员对新体系的接纳
  • 新体系的初体验是否会给团队带来效率问题等等。

为了使团队能够更快的接受,并且不给团队带来因为新体系而造成的额外问题。我们的CTO提出了一系列要求:

  • 提升产品交付质量!但是,需要整体组织协作起来,并且有技术指导及平台支撑
  • 提高产研效率和价值产出!但是,希望避免无效的加班加点和无效的工作产出
  • 尽量不要增加个体的工作复杂和繁重度,如果能简化、便利化就更好

基于以上要求,作为先头部队,我开始了一系列的预研工作。本篇我将讲一讲基于DevOps的自动化流水线的实践工作

预研

如何减轻团队负担、提升效率?

自动化!让重复性的工作全部自动化,让流程性的东西自动化,让不需要主观判断的东西自动化!

如何全流程自动化?

流水线!从开发到上线,中间需要经历检测、构建、测试、部署等等多个步骤,使用流水按将这些步骤串联起来,通过各种条件判断,完全可以解放出更多的人力。

整个自动化流水线需要哪些工具?下面我们来聊一聊。

配置

CI/CD平台

要跑流水线,我们首先得有一个CI/CD平台,那我们平时会用到哪些CI/CD工具呢?

  • Jenkins

老牌流水线平台,做软件的大部分人应该都知道

部署方式:宿主机直接部署、容器化部署、K8S部署都可以

优点很多,社区强大、插件丰富等等。但是缺点页比较明显,只能单master部署,虽然可以通过slave扩展,但是一旦master挂掉,队列就失败了。

参考地址:https://www.jenkins.io/zh/

  • Jenkins X

Jenkins X是基于Kubernetes的持续集成、持续部署平台。也是Jenkins的子项目。Jenkins X旨在使程序员在研发过程中能够轻松遵循DevOps原理和最佳实践。

Jenkins X 基于松耦合架构的 DevOps 模型,被设计用来支持在多个团队间,部署大量可重复、可管理的分布式微服务。在Jenkins X的设计中,整合了Tekton,Helm,Draft,GitOps,以及Nexus,Chartmuseum,Monocular,Skaffold等诸多系统和工具,从而实现自动构建编译环境,生成容器镜像,流水线,自动化部署,并通过简单的Review实现不同环境间的自动发布

参考地址:https://www.jenkins.io/zh/projects/jenkins-x/

在这里插入图片描述

  • Tekton

Tekton 是一个基于 Kubernetes 的云原生 CI/CD 开源框架,属于 CD 基金会的项目之一。Tekton 通过定义 CRD 的方式,让用户以灵活的自定义流水线以满足自身 CI/CD 需求。

Tekton 引入了几个新的 CRD,包括 Task、Pipeline、TaskRun 和 PipelineRun

参考地址:https://tekton.dev/

  • ArgoCD

ArgoCD从名字就能看出它是一个CD工具,不具备CI能力。Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序。

Argo CD 是通过一个 Kubernetes 控制器来实现的,它持续 watch 正在运行的应用程序并将当前的实时状态与所需的目标状态( Git 存储库中指定的)进行比较。已经部署的应用程序的实际状态与目标状态有差异,则被认为是异常状态,Argo CD 会报告显示这些差异,同时提供工具来自动或手动将状态同步到期望的目标状态。在 Git 仓库中对期望目标状态所做的任何修改都可以自动应用反馈到指定的目标环境中去。

参考地址:https://argo-cd.readthedocs.io/en/stable/

在这里插入图片描述

关于他们的详细对比,知乎上有一篇文章:https://zhuanlan.zhihu.com/p/613527858 供大家参考,此处就不再赘述了。

代码检测

代码检测可以初步判断研发人员提交的代码是否符合相关规范,比如bug数、单元测试覆盖率等等,满足编码规范才能进入下一流程,如果连团队制定的编码规范都无法满足,则直接终止流水线继续进行。

常用的工具有sonarqube,因为他有社区版,免费。社区版缺点是某些语言不支持,需要自己找第三方的插件包。商业版的收费比较贵。
参考地址:https://www.sonarsource.com/

详细介绍文档:https://zhuanlan.zhihu.com/p/617789712

自动化测试

现在比较成熟的自动化测试一般是指API测试,前端的UI虽然也有自动化测试,但是没有特别成熟和方便的工具,这里推荐国内飞致云开发的开源持续测试平台MeterSphere。

MeterSphere 是一站式的开源持续测试平台,遵循 GPL v3 开源许可协议,涵盖测试管理、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试,加速高质量的软件交付。

在这里插入图片描述
参考地址:https://metersphere.io/

它虽然带有UI测试,但那是企业版功能,收费。metersphere带有jenkins插件,可以对接jenkins,完成流水线自动化测试。

开源地址:https://github.com/metersphere

结果通知

流水线的运行结果需要通过有效途径及时通知责任人,现在大众的办公软件都有基于webhook或者自开发应用的通知方式,比如飞书、钉钉、企业微信等,如果没有自开发应用机器人的经验,可以直接使用这些工具的群机器人,自带webhook,将流程相关人员集合到一个群里,不通的流程@不同的责任人即可。详情请参考各工具官方开发文档。
企业微信:https://open.work.weixin.qq.com/
钉钉:https://open.dingtalk.com/
飞书:https://open.feishu.cn/

版本管理

首选还是gitlab,功能齐全,方便实用。但是这个根据各公司具体规定执行,不做讨论。

sql版本管理

sql的版本管理是各难点,项目上经常会因为sql与代码关系的管理出现问题,最好是能有一个sql版本管理工具,比较推荐的是国外的一款开源工具Liquibase,这款工具支持多款数据库,大家有兴趣的可以去了解一下。
相关介绍:https://zhuanlan.zhihu.com/p/660238054
开源地址:https://github.com/liquibase/liquibase

多集群功能架构图示例

根据以上工具,大概绘制了一个多集群下的功能架构图
在这里插入图片描述
这里是在大业务量,预算充足或者对性能要求较高的情况下,做的一个规划,在预算不足的情况下,可以将一些集群功能合并,比如将构建集群放到开发或者测试集群里。

自动化的核心就是构建集群,CI/CD的所有功能都集中在这个集群上。这个集群的构建需要有以下几个关键点:

  1. 选定合适的CI/CD工具,这个是基座。之前写过一篇文章,介绍如何使用Jenkins对接K8S的,有兴趣的可以参考一下:https://blog.csdn.net/Mrheiiow/article/details/131421444
    其他CI/CD工具网上都有相关教程,我在后边也会慢慢整理相关部署过程。
  2. 各功能平台对接CI/CD工具。这个网上或者官方也有相应的教程,可以惨开,我们当时主要实践的是Jenkins,所以后期我也会整理一份各种工具对接Jenkins的流程文档
  3. 如果有条件,最好是基于部署好的这一套,开发一个前端控制界面,并做好权限划分,最主要的是针对流水线的的控制的,不是针对这些工具使用的,这样方便对整个发版流程进行控制,经验之谈。

在云原生领域,还有一个更受大家倾向的GitOps,他倡导IaC(Infrastructure as Code):基础设施即代码,我个人觉得他比传统的部署方式更方便,之前写过一篇博文:https://blog.csdn.net/Mrheiiow/article/details/130106620,有兴趣的可以看一下

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

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

相关文章

如何计算模型的复杂度(参数量,FLOPs)

参考 如何计算神经网络模型的复杂度 深度学习卷积、全连接层、深度可分离层参数量和FLOPs计算公式 概念 Params:模型的参数量。(空间复杂度)FLOPs:FLoating point Operations,前向推理的计算量。(时间复…

open与json细节篇

open open函数 流程: 1.打开文件 2.操作文件 3.关闭文件 模式: #二进制 rb读取二进制,比如图片 wb写入二进制 返回bytes,字节 r只读,文件不存在会报错 w只写,文件不存在会创建,存在则覆盖原始内容 x只写,文…

C++函数分文件编写之VScode版

VScode实现函数的分文件编写 1.下载插件创建项目2.分文件编写内容3.修改主函数文件名 我在分享内容时经常用的软件是VScode,相信有些内存敏感或需要VScode便利性的小伙伴也是更愿意使用VScode。那么接下来我们就盘一盘怎样使用VScode实现分文件编写。 1.下载插件创建…

函数大聚会(c++题解)

题目描述 输入一个整数n。 1、判断它是否为素数,是输出“Y,不是输出“N”. 2、输出这个数的各位数字之和。 3、求出这个数所有约数的和。 4、求出1到n的和。 5、输出这个数的倒序数(不包含前导0)。 输入格式 一行一个整数。 输出格式 五…

2024 Flutter 重大更新,Dart 宏(Macros)编程开始支持,JSON 序列化有救

说起宏编程可能大家并不陌生,但是这对于 Flutter 和 Dart 开发者来说它一直是一个「遗憾」,这个「遗憾」体现在编辑过程的代码修改支持上,其中最典型的莫过于 Dart 的 JSON 序列化。 举个例子,目前 Dart 语言的 JSON 序列化高度依…

使用Java实现最少活跃数负载均衡算法

引言 在分布式系统中,负载均衡是一项关键技术,它能够确保各个服务器之间的负载相对均衡,提高系统性能和可靠性。本文将介绍一个简单而实用的最少活跃数负载均衡算法的Java实现。该算法通过选择当前活跃数最小的服务提供者,以确保…

来看看Tomcat和Web应用的目录结构

在前面两篇大致了解了Tomcat的架构和运行流程,以及Tomcat应用中的web.xml。 聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点-CSDN博客 来吧,好好理解一下Tomcat下的web.xml-CSDN博客 那接下来,再看看Tomcat的目录,…

vue-3d-model

vue-3d-model - npm GitHub - hujiulong/vue-3d-model: 📷 vue.js 3D model viewer component 通过该插件降低Threejs的使用难度 vue项目加载三维模型,我把模型放在了服务器的tomcat里面,需要对tomcat的fbx项目文件夹设置跨域,如…

踩坑STM32CubeMX生成Makefile工程无法使用printf(“%f“)

过去一年偶有接触STM32开发时都是使用STM32CubeMX生成Makefile的工程,具体开发环境见配置Clion用于STM32开发(Makefile),但没想到今天在使用printf打印输出浮点数时无法正常输出,不仅printf无法使用,其他涉…

详解Skywalking 采集springboot 应用日志的方法(内附源码)

大家都知道Skywalking 的链路追踪功能非常强大,可以帮助用户深入了解应用程序中各个组件之间的依赖关系。在实际应用中,往往需要将链路追踪数据与日志数据结合起来进行综合分析。Skywalking 提供了 Trace Log 结合插件,可以帮助用户快速定位问…

1. OpenAI⼤模型⽣态

OpenAI⼤模型⽣态并不只有⼀个模型,⽽是提供了涵盖⽂本、代码、对话、语⾳、图像领域的⼀系列模型。 基本介绍 语⾔类⼤模型:GPT-3、GPT-3.5、GPT-4系列模型。并且,OpenAI在训练GPT-3的同时,训练了参数不同、复杂度各不相同的A、…

【Vue】指令之显示切换,属性绑定

Vue指令【2】 显示切换与属性绑定v-show指令v-if指令v-bind指令 显示切换与属性绑定 v-show指令 作用&#xff1a;根据真假切换元素的显示状态 指令后的内容最终都会解析为布尔值数据改变之后&#xff0c;对应元素的显示状态会同步更新 语法&#xff1a; <div id"…

[NOIP2013 提高组] 货车运输

[NOIP2013 提高组] 货车运输 题目背景 NOIP2013 提高组 D1T3 题目描述 A 国有 n n n 座城市&#xff0c;编号从 1 1 1 到 n n n&#xff0c;城市之间有 m m m 条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。 现在有 q q q 辆货车在运输货物&#x…

c++ STL less 的视角

c less 函数在不同的地方感觉所起的作用是不一样的&#xff0c; 这中间原因是 less 的视角不一样&#xff0c; 下面尝试给出解释下&#xff0c; 方便记忆 1、 左右视角 符合 排序sort less(value, element&#xff09; less 表示一种 “符合关系“&#xff0c; 表示sort 后…

关于Ubuntu下docker-mysql:ERROR 2002报错

报错场景&#xff1a; mysql容器创建好后登录mysql时即使密码正确也是报出下方提示&#xff1a; 原因是在创建mysql容器在创建时本地目录缺失&#xff0c; 先去自建一个目录&#xff0c;例如&#xff1a; /opt/my_sql 正确完整目录如下&#xff1a; docker run --namemys…

一个升级迁移11g到19c使用xtts遇到的小问题

oracle11.2.0.4到19.21 1.系统权限和对象权限&#xff0c;由于大小写对象名问题&#xff0c;如果使用expdp方式迁移可能存在丢失 迁移后需比对对象、权限&#xff0c;避免遗漏 set pagesize 0 set long 90000 set feedback off set echo off spool ddl.sql select dbms_meta…

2024数学建模美赛F题思路代码分享

非法的野生动物贸易会对我们的环境产生负面影响&#xff0c;并威胁到全球的生物多样性。据估 计&#xff0c;它每年涉及高达265亿美元&#xff0c;被认为是全球第四大非法交易。[1]你将开发一个由数 据驱动的5年项目&#xff0c;旨在显著减少非法野生动物贸易。你的目标是说服一…

【misc | CTF】攻防世界 2017_Dating_in_Singapore

天命&#xff1a;这次终于碰到了算是真正的misc题目了 下载附件&#xff0c;打开是PDF&#xff0c;我一开始以为是flag隐写在PDF里面了 虽然也不奇怪&#xff0c;应该是可以的&#xff0c;毕竟PDF有xss漏洞也是可以的 言归正传&#xff0c;打开PDF 看着新加坡的日历&#xff…

ubuntu 上安装和配置Apache2+Subversion

目录 一、安装Apache2和SVN 二、Apache2设置 三、subversion配置 四、创建仓库和设置权限 五、仓库备份和恢复 系统环境 Ubuntu Linux (20.04) apache2 Subversion(1.13.0) 一、安装Apache2和SVN 通过命令在线安装apache2和subversion apt-get install apache2 libap…

2023-12蓝桥杯STEMA考试 C++ 中高级试卷解析

蓝桥杯STEMA考试 C++ 中高级试卷(12月) 一、选择题 第一题 定义字符串 string a = "Hello C++",下列选项可以获取到字符 C 的是(B)。 A、a[7] B、a[6] C、a[5] D、a[4] 第二题 下列选项中数值与其它项不同的是( C)。 A、 B、 C、 D、 第三题 定义变量 int i =…