1.什么是DevOps?
DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠.
2.DevOps概念提出
我们知道,一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护。最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。
后来,码农的队伍扩大,工种增加。除了软件开发工程师之外,又有了软件测试工程师,软件运维工程师。开发,测试,布署成为 软件开发的三个阶段。
早期所采用的软件交付模型,称之为“瀑布(Waterfall)模型”。
单体架构+瀑布模式
这个时候服务监控也简单,服务出了问题,直接去线上看一下运行日志,为了解放双手监控服务,开发者会写一些脚本分析日志,服务器少,部署简单,通常开发就可以完成运维的工作,不需要专门的运维来做部署,所以开发模式很简答,直接按照瀑布流方式开发就可。
分布式架构+敏捷开发模式
敏捷开发的核心理念就是既然我们无法充分了解用户的真实需求是怎样的,将一个大的目标不断拆解,把它变成一个个可交付的小目标,然后通过不断迭代,以小步快跑的方式持续开发。
公司业务一大,像大公司的动不动就是几千台服务器,就需要专门的运维介入了,但是这个时候也不是 DEVOPS,而是 DEV+OPS,这时 Ops 的主要职责就是:硬件维护、网络设备维护、DBA 、基础服务维护、数据监控等,运维们擅长写各种部署,监控脚本,减少机械的重复工作,开发模式变成了敏捷开发模式。
加入运维,就要协调人员配合,运维的宿命就是维稳,他们是很讨厌变动的;开发的天职确是不断地推代码上线,进行代码变动,更替迭代,这两个工种天生就是对立的。
因为矛盾的产生,devops出现了。
微服务架构+DEVOPS
在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议,开发也是运维。
devops平台搭建工具
项目管理(PM)
:jira。运营可以上去提问题,可以看到各个问题的完整的工作流,待解决未解决等;
代码管理
:gitlab。jenkins或者K8S都可以集成gitlab,进行代码管理,上线,回滚等;
持续集成CI(Continuous Integration)
:gitlab ci。开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
持续交付CD(Continuous Delivery)
:gitlab cd。完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
镜像仓库
:VMware Harbor,私服nexus。
容器
:Docker。
编排
:K8S。
服务治理
:Consul。
脚本语言
:Python。
日志管理
:Cat+Sentry,还有种常用的是ELK。
系统监控
:Prometheus。
负载均衡
:Nginx。
网关
:Kong,zuul。
链路追踪
:Zipkin。
产品和UI图
:蓝湖。
公司内部文档
:Confluence。
报警
:推送到工作群。
以上资料来自于
https://www.zhihu.com/question/58702398/answer/1755254160