DevOps 简介
DevOps 简介
什么是 DevOps
什么是 DevOps?DevOps 集文化理念、实践和工具于一身,它强调团队授权、跨团队沟通和协作以及技术自动化,其最终目标是优化质量和交付。
DevOps 理念,旨在打破开发工程师和运维工程师的壁垒,强调两个团队合而为一,在产品的整个生命周期(从开发、测试、部署再到运维、运营)内相互协作,工程师不再限于单一职能。
DevOps 始于 2007 年左右,当时的开发和运维对传统的软件开发模式提出了担忧:在这种模式下,编写代码的开发人员与负责部署的运维人员分开工作。 DevOps 一词是开发(development)和运维(operations)这两个词的组合,反映了将二者合而为一的过程。
DevOps 如何工作
DevOps 团队包括在整个产品生命周期中协同工作的开发人员和运维人员,以提高软件部署的速度和质量。这是一种新的工作方式,一种文化转变,对团队及其工作的组织具有重要意义。
在 DevOps 模型下,开发和运维团队不再“孤立”。有时,这两个团队甚至会合并为一个团队,工程师在整个应用程序生命周期中工作,需要具备从开发、测试到部署和运维的复合型能力。
DevOps 团队使用工具来自动化和优化流程,这有助于提高可靠性。 DevOps 工具链可帮助团队处理重要的 DevOps 基础知识,包括持续集成、持续交付、自动化和协作。
DevOps 价值观也适用于开发以外的团队。如果 QA、安全团队也和开发、运维团队紧密地结合在一起,贯穿产品的整个生命周期。此时,安全成为了所有 DevOps 团队成员的工作重点,此时可以称为为 “DevSecOps”。
DevOps 的生命周期
由于 DevOps 的连续性,可以使用无限循环来展示 DevOps 生命周期的各个阶段是如何相互关联的。尽管看起来是按顺序流动的,但循环象征着在整个生命周期中始终保持持续迭代。
DevOps 生命周期由六个阶段组成,分别代表开发和运维所需的流程、功能和工具。在每个阶段,团队协作和沟通以保持一致性、速度和质量。
图片来自 https://www.tasksgrid.com/devops-guide/
DevOps 的优势
- 速度:应用 DevOps 可以更频繁地发布可交付成果,并且质量和稳定性也更高。高效的迭代,可以根据客户和市场反馈进行快速响应,以适应市场变化,有效推动业务发展。
- 促进协作:DevOps 的基础是开发和运维之间的协作文化,两个团队紧密协作,共同承担诸多责任,并将各自的工作流程相互融合。这有助于减少效率低下的工作,同时节约大家的时间。
- 快速发布:提高发布的频率和速度,以便能够更快速地进行创新并完善产品。您发布新功能和修复错误的速度越快,就越能快速地响应客户需求并建立竞争优势。持续集成和持续交付是自动执行软件发布流程(从构建到部署)的两项实践经验。
- 可靠性:持续集成和持续部署等实践可检验程序变更后,功能是否正常,是否安全,从而提高软件产品的交付质量。监控和日志记录可以帮助团队实时了解服务当前的运行状态。
- 规模:大规模运行和管理您的基础设施及开发流程。自动化和一致性可在降低风险的同时,帮助您有效管理复杂或不断变化的系统。例如,基础设施即代码能够帮助您以一种可重复且更有效的方式来管理部署、测试和生产环境。
- 安全性:通过将自动实施的合规性策略、精细控制和配置管理技术集成到敏捷开发和 DevOps 工作流程中,使得产品内置了安全性。
DevOps 工具
DevOps 各生命周期阶段都有合适的工具可以作为解决方案。它们通过提高协作效率、减少上下文切换、引入自动化以及实现可监控来全方位增强 DevOps 实践。
DevOps 工具链通常遵循两种模式:完整解决方案或开放式工具链。
- 完整解决方案实现了端到端的交付,流程很完备,但是一般难以兼容、集成第三方工具。
- 开放式工具链允许使用不同的工具进行定制。
这两种方法各有利弊。
这里列举一些常见的 DevOps 工具:
- 项目管理:Jira
- 文档管理:Confluence
- 代码管理:Gitlab、Github
- CI/CD:Gitlab、Jenkins
- 容器
- Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
- Kubernetes 是谷歌开源的容器集群管理系统 是用于自动部署,扩展和管理 Docker 应用程序的开源系统,简称 K8S。
- 日志
- ELK 技术栈,通过数据采集工具 Logstack、Beats 套件、日志存储、解析服务 ElasticSearch、日志可视化工具 Kibnana,形成了一套完整的端到端日志解决方案,深受业界好评。
- 监控
- ELK 的技术栈比较成熟,应用范围也比较广,除了可用作监控系统外,还可以用作日志查询和分析。
- Prometheus 的独特之处在于它采用了拉数据的方式,对业务影响较小,同时也采用了时间序列数据库存储,而且支持独有的 PromQL 查询语言,功能强大而且简洁。
- Grafana 是流行的监控数据分析和可视化套件。
- Graphite 是基于时间序列数据库存储的监控系统,并且提供了功能强大的各种聚合函数比如 sum、average、top5 等可用于监控分析,而且对外提供了 API 也可以接入其他图形化监控系统如 Grafana。
- 链路追踪
- Zipkin:Zipkin 是 Twitter 开源的调用链分析工具,目前基于 spring-cloud-sleuth 得到了广泛的使用,特点是轻量,使用、部署简单。
- Pinpoint:是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能强大,接入端无代码侵入。
- SkyWalking:是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能较强,接入端无代码侵入。目前已加入 Apache 孵化器。
- CAT:CAT 是美团点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
- 负载均衡
- 网关
- 告警:短信、邮件、企业聊天软件、OA