上周,我和一些非常资深的同事们专门讨论了一下现在到底新出了多少DevOps工具,日常追随这些工具为什么变得越来越麻烦,以及整个领域内它们到底处在什么位置。因此,我问了一下他们这几个工具——Ansible、Terraform、Salt、Chef、Bamboo、CloudFormation它们所处的位置,为什么要用他们来和其他工具对比?它们是在做同一件事吗?我是不是错过了一个更重要的工具?然而,我得到了同样茫然的目光。所以,我在想我应该做一些研究,试着让大家都明白它的意义,这样我们就可以把产品分成我们都熟悉的类别或应用场景。


开始讨论DevOps工具和类别之前,我们先了解一下DevOps的常见术语以及含义。
计算机/服务器(Computer/Server)——一种具有中央处理器(CPU)、内存(RAM)以及本地存储(磁盘)并运行操作系统的物理设备。
虚拟机(Virtual Machine)——在主机上运行的一种仿真计算机系统;通常会在CPU、内存和磁盘方面与其他操作系统隔离。

花几分钟来了解一下DevOps工具_DevOps


容器(Container)——一种带有软件包及其所有依赖项的包,以便它可以在任何基础架构上一致地运行。最受欢迎的容器目前是Docker。使你可以打包一堆东西(开发好的软件、配置和其他软件)以便于部署和迁移。你可以将容器视为虚拟机时代的下一代演化。

花几分钟来了解一下DevOps工具_DevOps_02


网络设备(Network Device)——在设备之间路由网络流量的一种硬件。如路由器、负载均衡器和防火墙。
软件(Software)——编写好并在操作系统上运行的代码。
DevOps——传统上是说,有人开发(Development),并有另一些人运维(Operations)。两者就像经营一家商店的模式一样。从2010年开始,到2018年左右,DevOps的理念已近普及,DevOps的理念是“一套最佳实践,旨在减少向系统提交变更和将变更投入正常生产之间的时间,同时确保高质量。”
当你在思考如何构建和运行一套非比寻常的系统时,肯定需要考虑很多。如:
  1. 获取计算机/服务器硬件

  2. 配置计算机/服务器硬件(操作系统,网络等)

  3. 监控计算机/服务器硬件

  4. 获取网络设备(负载均衡器,防火墙,路由器等)

  5. 配置网络设备

  6. 监控网络设备

  7. 构造软件

  8. 编译软件

  9. 测试软件

  10. 打包软件

  11. 部署/发布软件

  12. 监控软件


DevOps以前,我们通常有4个不同的团队多这些事:
  • 开发人员——他们一般负责#7、#8,有时也会做#10

  • QA团队——他们一般负责#9,有时也会做#11

  • 系统管理员——他们一般负责#1、#2、#3、#12

  • 网络管理员——他们一般负责#4、#5、#6


对于硬件,网络设备和软件的配置,每个团队可能都会用他们自己的脚本和工具集,且在许多情况下,还会手动进行“软件发布”的操作。
对我而言,随着DevOps的出现,最关键的是能够打破不同团队间的障碍,让每个人都成为“一个团队”的一部分,这能使所有系统的配置、部署和管理方式保持一致。
云(Cloud)——要定义作为IT史上负载体量最庞大的术语是很难的,但我非常欣赏T恤上写的“世上本无云,它只是别人的计算机。” 最初,云服务刚开始时,它们实际上只是其他人的计算机(或运行在他们计算机上的VM),或存储。随着时间的推移,它们已经发展出许多增值服务。大部分硬件都被抽象掉了。现如今,你无法在大多数云服务中购买硬件设备,但你可以购买由硬件设备提供的服务。
基础架构即代码(IAC-Infrastructure as Code)——一个新概念,可以让我们通过配置文件来定义数据中心内所有项目的完整设置,包括VM,容器和网络设备。我们可以创建一些配置和脚本,然后使用CI/CD工具运行它们,它们在数据中心中自动提供所有服务。CI/CD作为IAC的前身,多年来一直致力于构建/测试/集成/部署的自动化,而使用云基础架构则是对它的自然扩展。这也降低了成本,加快了投产上市的时间,减少了人为操作风险。
随着IAC的出现,许多传统的开发工具现在都可以用来管理基础架构。DevOps工程师现在可以使用以下工具,如软件代码仓库(Software Repository),构建工具,CI/CD,代码分析器和测试工具,来构建和维护基础架构。之前这些工具都是软件开发人员所使用的。
“随着DevOps的出现,对我来说最关键的想法是……让每个人都成为‘一个团队’的一部分,使所有系统的配置、部署和管理方式保持一致。”
我们已经掌握了基本术语,现在,让我们回到对DevOps工具进行分类的任务,以使我们更容易理解:在什么时候使用什么工具。
  1. 软件代码仓库(Software Repository)——用于软件版本管理的工具。Git是当今使用最广泛的工具。

  2. 构建工具(Build tools)——一些软件打包或使用前需要先进行编译,传统的构建工具包括Make、Ant、Maven和MSBuild。

  3. 持续集成工具(Continuous Integration tools)——每次将代码提交仓库时,它都会触发构建,部署和软件测试。从而可以提高代码质量和缩短投产时间。市场上最受欢迎的工具有Jenkins,Travis,TeamCity和Bamboo。

  4. 代码分析器/审查工具(Code analyzer/review tools)——这些工具负责查找代码中的错误、代码格式和质量,以及测试覆盖率。这些因语言的不同而不同。SonarQube是这个领域的一个比较流行的工具。

  5. 配置管理(Configuration management)——配置管理工具和数据库通常存储有关硬件和软件的所有信息,并为自动化常规任务提供脚本和/或模板。这个领域似乎有很多参与者,常见的工具有:Chef、Puppet和 Salt。

  6. 部署工具(Deployment tools)——这些工具负责软件的部署,许多CI工具也可作为CD(持续部署)工具。通常,在Ruby中,Capistrano被广泛使用;Maven在Java中使用的比较多。所有的编排工具(Orchestration tools)也能支持某些部署。

  7. 编排工具(Orchestration tools)——这些工具可配置,协调和管理IT系统和软件。它们通常将“自动化”和“工作流”作为其服务的一部分。Kubernetes是一款非常流行的编排工具,其专注于容器。Terraform也是一款非常流行的编排工具,它的应用范围更加广泛,包括云编排。此外,每个云提供商都有一套自己的工具,如CloudFormation,GCP Deployment Manager和ARM。

  8. 监控工具(Monitoring tools)——这些工具用来监控硬件和软件。通过监控应用程序和日志等,以确保系统的正常运行。Nagios和Prometheus都是比较流行的监控工具。

  9. 测试工具(Testing tools)——测试工具用于管理测试以及测试自动化,其包括性能和负载测试。


当然,就像其他产品一样,类别之间的界限并不一定是清晰的。许多工具跨类别并提供两个或更多类别的特性。下面是我试图向大家展示当下比较流行的工具,并将其归类在相应的位置。

花几分钟来了解一下DevOps工具_DevOps_03


正如你所见,像Ansible、Terraform和云工具(AWS、GCP和Azure)这样的厂商正试图将他们的产品跨越在部署、配置管理和编排的类别中。较老的工具集,如Puppet、Chef和SaltStack则更专注于配置管理和自动化,但也已经扩展到编排和部署。还有一些工具,如GitLab和Azure DevOps,则试图跨越几乎所有DevOps的类别。
希望本文的概述能帮助您理解DevOps的基础知识、现有工具的种类,以及当今市场上的各种产品是如何帮助实现其中一个或多个类别。多年来,在Solution Street我们已经使用了许多这样的工具,对我们来说,没有哪一个工具可以适合任何场景。到底选择哪一种取决于所选的技术、托管的位置(以及未来可能的位置)以及团队的能力和组成。
原文链接:https://levelup.gitconnected.com/the-10-minute-read-to-understanding-devops-tools-bc4ac807a25d