一、文档说明
DevOps顾名思义,是让机器自动处理软件部署和运维生命周期中的重复性工作,以便操作员可以更快,更有效的实现代码更新和部署迭代,更可靠的运行他们的系统。
自2009年创造DevOps一词以来,自动化已经从开发、集成和交付工作的自动化发展到当今运维方面的前沿,在那里我们看到了自动化可观察性、可靠性和修复的新工具。
二、为什么要实现 DevOps ?
从开发人员的角度来看,DevOps 工具赋予开发团队权力并提高他们的效率。通过减少跨团队依赖性、避免手动配置发布流程,开发人员可以提高发布频率并更快地收到反馈,从而改善他们的整体体验。
从业务角度来看,DevOps 自动化缩短了部署功能的准备时间。自动化会减少由人为错误导致的问题、环境不一致引起的故障来提高平台的可靠性和可用性。此外,它消除了对大型团队的需求,最大限度地减少了来自不同开发团队的重复工作,并减少了跨团队摩擦。
自动化如何开始?
如果您正在寻找将自动化工作重点放在何处,我们建议您从最大的瓶颈所在开始。
- 事件响应的自动化
- 资源可按需提供给开发人员
- 应用程序是基于业务手段重新架构的
- 安全团队参与设计和开发
为此,建设一系列自动化阶段,解决一路上的常见问题,包括缓慢的服务供应(过于复杂或需要太多工作和跨团队协作)以及设置测试和部署管道的困难。
一旦实现了自动化,大大加快了流程中的构建速度,他们就会开始研究在维护阶段,当软件投入生产并提供业务价值时,他们可以自动化什么。
这些任务被描述为手动、重复、可自动化且缺乏持久价值。减少重复、可循环的工作可以使工程师做更有意义的工作。
如何自动化 DevOps 流程
处理好您的自动化问题后,确定现有哪些工具可以解决您的问题。
作为一般规则,使用现成的工具和标准通常比构建和维护自己的工具和标准更有效。
在向您的技术堆栈中添加新工具时,请考虑:
- 直接成本(许可和托管)
- 推广工作(初始投资)
- 维护工作(持续投资)
- 系统增加了复杂性
- 可靠性和支持要求
- 该工具还可以帮助您解决哪些其他问题
理想情况下,您正在寻找一种工具,它不仅足够灵活以解决您当前的问题,而且对未来的挑战也很有价值。您正在寻找可以在流程中代替工程师实现自动构建和部署的工具,而不会为维护或使用它的团队带来很多负担。您应该能够决定自己托管哪些工具以及更喜欢将哪些工具用作 SaaS。
CI/CD
DevOps 的原则之一是能够以一致的方式安全且可重复地将工件部署到所有环境。因此,最成熟和最流行的 DevOps 工具类别是安全一致地构建代码和部署工件所需的 CI/CD 编排器,例如Jenkins、GoCD等,也就不足为奇了。
CI/CD 工具允许您创建一个部署管道,该管道从Git或 SVN等版本控制系统中的提交开始,根据几种不同的质量检查工具(代码检查、单元测试、集成和端到端测试)对其进行评估),如果所有质量检查都通过,则将该版本部署到生产中。部署管道包括持续集成 (CI)、持续交付 (CD) 和基础设施配置,具体取决于您的架构。
功能标记工具也是该组的一部分,因为它们用于以安全和可控的方式将代码快速部署到生产中。
每个公司都应该使用 CI/CD 工具。可以让您为您的场景选择最佳工具的问题包括:
- 将工具配置和维护需要多少工作?
- 支持和维护您的管道需要付出多少工作量?
- 为开发团队创建管道是否便捷?
- 为多个团队创建共享管道模板是否便捷?
- 您的工具需要哪些安全功能?
配置和基础设施即代码工具
将所有基础设施、配置和应用程序代码存储在版本控制系统中是 DevOps 自动化的另一个重要组成部分。将基础设施和配置定义为代码的能力,允许工程师对基础设施代码进行与对应用程序代码相同的审查和审计。
有几种不同类型的工具:
- 基础设施供应:用于从代码供应基础设施组件(例如网络组件、托管服务、虚拟机)的工具。实例包括Terraform,Pulumi,CloudFormation
- 配置管理:用于配置机器内的操作系统、软件需求、包依赖和系统文件。示例包括Chef、Puppet、Ansible、Packer
- 容器技术:用于提供与供应商无关的容器编排器来运行容器化应用程序。示例包括Kubernetes、OpenShift、Nomad
- 无服务器功能:用于辅助无服务器功能的部署。示例包括serverless, chalice, CDK
成熟的 DevOps 团队使用工具组合来实现基础设施和配置即代码。工具因技术堆栈和业务需求而异。在评估工具时,确保您的团队安全、轻松地部署基础设施,同时轻松共享模板和标准。
可观察性和监控工具
监控和可观察性是一类较新的工具,不如用于 CI/CD 的工具成熟。可观察性和监控领域的工具包括应用程序日志服务,如ELK 堆栈、数据收集代理以及指标和仪表数据的可视化工具。其中一些示例包括Prometheus、Grafana、Datadog和New Relic。它还包括监控系统,用于在平台未根据指标、日志或运行状况检查(Sensu、Nagios、Dynatrace、CloudWatch)性能状态并根据自定义的规则生成告警通知到相关人员。
弹性和可靠性
从长远来看,依靠人为干预来确保可靠性(无论是识别问题还是补救)是不可持续的。有很多创新管理、事件过程管理和补救的组织事件正在实现自动化。
DevOps 经典案例
让我们考虑一个虚构的环境,其中使用 Terraform 将所有基础基础设施作为代码进行管理。
创建新应用程序时,通过使用其Jenkinsfile 中的共享库定义的,该库自动包含所有默认步骤和所需的质量检查,以及向公司通信工具(例如,钉钉、飞书)发送构建通知。应用程序存储库还包含具有一些基本配置(例如,内存和 CPU 要求以及健康检查端点)的 Terraform 文件,并使用所有应用程序共享的模块。该模块包含所需的 DNS、负载均衡器和容器配置,以及一些自动监控。
开发人员不需要设置他们的管道或默认基础设施,因为这些都由共享代码控制。如果他们需要额外的资源(如数据存储),他们可以轻松地向 Terraform 文件添加额外的资源。
存储库提交后,Jenkins 运行新管道。在运行代码 linting、单元测试和集成测试的命令后,管道会触发 Terraform 部署到暂存环境并运行端到端测试。钉钉通知提醒开发人员检查结果并进一步运行他们想要的任何手动测试。如果开发人员对结果满意,他们可以通过手动批在 Jenkins 中推广构建,触发 Terraform 部署到生产。
在为外部客户开启功能标志之前,工程师确保监控和弹性是足够的。一旦代码在生产中生效,运营团队就可以构建自动化来处理常见问题。例如,创建一个作业来自动调整空间不足的磁盘的大小,或者创建一个作业来识别即将到期的 TLS 证书并使用 HashiCorp Vault 自动更新它们。Terraform 也存储操作自动化。
结论:
自动化测试和部署的工具,如 CI/CD 和 Terraform,现在已经非常成熟,大大减少了交付代码所需的时间(和劳动)。随着我们优化和替代生产企业中操作软件的重复性工作,大大提高了业务可靠性和客户满意度。
自动化已成为新一代互联网生产链的趋势,尽快的实现自动化架构,从公司的运营,人力成本和效率等方面都会得到很大的改善。
原文:https://dzone.com/articles/what-is-devops-automation-in-2021