DevOps是一种思维方式,同时也是一组工作实践。
成功的DevOps是将人、过程和工具相互融合。
DevOps并不是简单的理解为自动化工具。
DevOps 一词是由“开发”和“运营”这两个词组合而成的,是一种文化转变,在开发团队与运维团队架起了桥梁(一般开发团队与运维团队形成孤岛、隐形的墙)。
Devops基础
DevOps方法论是我们在进行DevOps实践时必须掌握的原则类知识。
传统应用发布模式
目的: 找到传统发布存在的问题,如何改进。
一般一个开发团队中都会存在多个角色:开发、测试、运维。当时我们的应用发布模式可以能是这样的:
问题:
手动操作很多、出现的问题很多。上面看似很流畅的过程,其实每次构建或发布都可能会出现问题。未对每次提交验证、构建环境不一致:开发人员本地测试成功后提交代码,运维同学下载代码进行编译却出现了错误。
开发人员频繁(—天内多次)合并和提交代码到分支。
Cl是合并开发人员正在开发编写的所有代码的一种做法。
目标:在初始阶段检测到任何集成错误,以便可以迅速修复。
理想状态:每次提交代码会触发持续集成流程和反馈。
注意:以前有个争议?有必要每次提交代码都要触发持续集成流程和反馈吗? -->推荐:一组代码提交!
在CI的基础上自动化的将软件部署到各种环境中;
理想状态:每次变更自动部署到生产环境;(CI和CD是一条流水线)
CI流程
更快的反馈有助于检查代码的质量问题;
尽快的发现问题,避免代码集成冲突;
CD流程
某条流水线并不是都适合每个公司团队的:
首先,要标准化他们的开发方式,开发模式。
然后,你再去设计这个流水线。
CI/CD常见的问题
CI遇到的问题比较多;
走出这个误区:有时候jenkins报错并不一定是jenkins本身有问题,有可能是研发的代码有问题。之前有个案例,研发本地代码编译没问题,但用jenkins打包出现了问题!最后排查后发现是研发本地有缓存,但生产环境里没缓存导致的!
CD遇到最多的一个问题就是环境不一致的问题:例如环境的配置不一致,最终导致我们的部署失败;
构建阶段:
maven、go 构建(单元测试) --》
jar包–>配置中心:nexus
docker镜像–>镜像仓库:harbor
仓库,配置中心:nexus 3制品库, (nacos,阿波罗, eurak)
制品库就是为了解决重复编译的问题。
制品类型: 制品(jar包 war包 二进制程序 )
测试阶段:
手动测试
自动化测试:写测试用例,接口测试;
//其实这种单元测试写起来还是非常费时间的;单元测试的代码基本都是重复的,都是可以直接去用;性能测试;压力测试;
//压力测试:可能要熬夜哈哈。想用jenkins去解决这个问题,比如说定时,晚上自动去压。当时试了一下,还是可以的,但是还是有人要在限去值守的;
全链路测试;
基础测试:代码质量,你的项目能不能编译成功,单元测试用例能不能都跑过?
会扫描他们的代码:都是把这些工具集成到流水线里面。
有没有硬编码,有没有一些违规的东西;
harbor自己就有一个容器镜像扫描;
DevSecOps将安全工具和流程嵌入到DevOps工作流程中,并自动执行核心安全任务。
代码分析,识别安全漏洞;
变更分析,确定变更的影响;
合规性检查;
悬镜安全
ChatOps
钉钉机器人
飞书机器人
企业微信
TEAMS
消息通知机器人/交互式机器人 需要自己去开发一个机器人!
ChatOps是一种现代工作方式,它将人员,工具和聊天结合在一起,以提高生产力并帮助企业更快地发展。
ChatOps奖励组织提高效率,自动化和创新的能力,更高的可靠性,更快的事件响应时间。
ChatOps-MasterMost/钉钉
借助GitOps,团队可以自动化基础架构的配置过程。
使用声明文件将基础架构编写为代码 (laC) 。
存储在Git存储库中,就像存储应用程序开发代码一样。
编写Terraform配置文件创建VM/K8s集群;
编写Yaml配置文件部署K8s应用;
GitOps的火热程度基本上是要超过devops了;
GitOps更偏向于底层的基础架构。
1.vm
2.非vm:k8s环境
1.k8s基础环境:tf写一个模板,我就可以调用云厂商的api,来创建一套k8s环境。--这个是收费的!
2.k8s上层的应用:
yaml文件也存到git上去,然后我们发布的时候在git里面修改yaml的配置就好。
所以:git里面存了一个是基础架构的代码,一个是k8s环境里应用配置代码;
Gitops一种云原生的持续交付模型
避免无序交付:手动确认仍然至关重要。避免将代码直接推送到生产中时用户可能会遇到的错误。
对DevOps误解:认为DevOps工程师的目标是解决与DevOps相关的所有问题。
速度胜于质量:急于在较短的时间内完成并完成尽可能多的DevOps项目,以保持其在竞争激烈的市场中的地位。
组建一支专门的DevOps团队:最好由QA,OPS和DEV的新团队成员和现有员工组成。
企业,商业化的软件,例如云霄,蓝鲸。
大型公司:商业付费软件
小型公司:开源软件
ci工具:
jenkins:它有一个单独的系统 (优先学习这个)(jenkins使用shell和grooy来写,稍微有些难度)
GitLabCI:它是GitALab里面的一个功能模块。(GitlabCI全部使用shell来写)
tekton + argocd
⚠️ 问题:这些ci工具,如何才能无缝迁移?
我们可以写个python脚本去做发布流程,python–>jenkins(.sh),gitlab-ci(script) 你可以把jenkins、gitlab-ci等都可以当做成一个流程工具,具体的代码实现,你可以自己去写。
我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!
各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:
个人微信二维码:x2675263825 (舍得), qq:2675263825。
个人微信公众号:云原生架构师实战
个人博客地址:www.onlyonexl.cn
个人csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
个人已开源干货
名称 | 链接 |
---|---|
常见云笔记优缺点 & 定制宇宙中最美的typora皮肤 & 玩转vscode(已开源) | https://www.jianguoyun.com/p/DXS6qiIQvPWVCRiS0qoE |
好了,关于Devops理论与基础就到这里了,感谢大家阅读,最后贴上我女神的photo,祝大家生活快乐,每天都过的有意义哦,我们下期见!