DevOps 理解整理

传统的软件开发流程

image.png

  存在的问题:

1、 资源获取和环境准备效率低,缺少标准化化、自主的化的服务能力

2、 从代码开发到环境运行的流程不顺畅,开发人员不清楚最终的软件会如何部署和运行,测试人员不了解软件测试的重点和风险点在什么地方,运维人员不清楚软件架构的高可用设计是如何实现的,部门之间基本靠非常零碎、极易过时的文档或者口头沟通来交换信息

在产品研发的起始阶段,忙于需求分析、架构设计、代码实现,以上两个问题被大多数人认为比较容易处理。等到快上线的时候,出现上线失败或者临时方案上线

DevOps

DevOps理念: 提倡开发、测试、IT运维之间的高度协同,从而完成高频率部署的同时,提高生产环境的可靠性、稳定性、弹性、安全性

开发与IT运维:产品的价值在于业务(定义需求)和客户(交付价值)之间

DevOPs本身不能完全被工具和软件来简单的定义和量化,但工具和软件是实现DevOps的一个重要组成部分 

解决的问题:

1、 一些关于产品改善和创新的想法很难落地,设计到一些遗留系统的配合:调整、部署、扩展。新的服务或者应用构建、很难快速上线,被卡在了生产环境部署阶段

2、 不同种类的应用、服务的部署方式和流程不一致,运维团队很难为大量不同技术栈的团队提供快速响应。

3、 微服务的兴起,交付团队难以做到快速集成和部署。运维团队对微服务的部署方式不理解,不能适配新架构下的交付模式,开发团队大多关注代码和架构,对于产品如何在能在生产环境稳定运行、需要考虑哪些安全性和可持续性的因素并不是很了解。开发阶段,系统的架构和依赖环境都是开发者决定,对生产环境的关注度不高。部署、发布阶段,运维人员会考虑如何构建一套稳定的基础设施,又如何去部署和运维开发的产品。

持续集成

持续集成是一种软件项目管理方法,依据资产库(源码、类库)等的变更自动完成编译、测试、部署和反馈。持续集成已经广泛用于现代软件开发流程中,能够带来的好处:快速发现错误和促进代码分支的集成。

带来的价值:

   1、提高软件质量:每天或者每周进行多次集成,并进行测试,有利于发现软件缺陷,最终提高软件质量

   2、减少重复劳动:自动化工具编译代码、打包、上传、部署、测试,无需太多人工干预,让开发者更多精力专注于软件逻辑实现

   3、增强项目的预见性:每次操作会记录详细的输入输出结果,为后续产品缺陷是否收敛提供数据支撑。通过这些数据分析增加项目的预见性。

  4、增强团队对产品的信息

如何做到产品的持续集成

1、 统一代码库

2、 自动构建工具

3、 自动测试脚本

4、 开发向代码库主干提交代码

5、 自动触发构建工具

6、 高速构建服务器、快速完成构建作业

7、 上传软件到测试环境触发自动测试脚本

8、 执行结果分析与展示

9、 自动部署到演练环境

image.png

                                                                                                  持续集成流程

持续交付

持续交付是指周期性地将新版本软件交给质量运营团队或者用户,测试与评审。如果代码通过评审,代码进入生产阶段,持续交付的核心是不管有多少更新,软件始终可以交付价值

1、 快速发布产品特性:缩短编码、测试、上线、交付的迭代周期,使每个步骤出现的问题得到快速响应,在产品上的体现就是缩短软件功能发布周期,从而可以更好的应对业务需求的变化

2、 高质量的软件发布标准:软件交付过程实现标准化,整个交付过程可重复,过程进度可视化

3、 提供团队协作效率

image.png

                                                                                               持续交付流程

灰度发布

1、负载均衡

2、升级回滚

灰度发布本质是选取部分用户或者区域发布产品新特性。A/B测试安一定的策略选定一部分用户继续用A,而另一部分用户开始用B,产品可以通过使用B的用户反馈决策是否扩大发布范围,最终达到产品新特性向所有用户全量发布

应用编排

应用通常有多个组件或者模块,基于Kubernetes 部署应用

DevOps流水线

avatar
avatar

DevOps与Kubernetes

Kubernetes对DevOps的影响

DevOps并不是一个新概念,前期是没有好的工具来辅助DevOps的发展,虚拟机、IAAS管理不能解决应用管理的多样化需求。

应用管理的需求:

1、 应用运行环境、应用版本功能的不确定性,导致运维需要适配不同的运行环境,定制多种应用编译部署脚本,容器的出现解决了这个问题

2、 基于容器的应用不断增多,产生了对容器集群管理的需求—Kubernetes

3、应用升级回滚对容器集群管理的需求—Kubernetes

  4、应用的生命周期管理可以完全由Kubernetes管理,用户将更多精力放到代码开发

持续集成工具Jenkis与Kubernetes

 Jenkins与Kubernetes结合:基于Kubernetes部署Jenkins Master。在Jenkins Master 安装Kubernetes Plugin,并下载Jenkins Slave 镜像。Jenkins的任务通过Jenkins Plugin 转化为Kubernetes Pod 模板,Kubernetes 根据Pod 模板自动拉起Slave容器,Slave容器会自动加入Jenkins 集群。Jenkins 执行任务时,自动调度Job到某个Slave容器,任务结束后,Jenkins自动删除相关街道,并销毁对应容器,实现资源释放。