上周,我和我的一些非常资深的同事评论说有多少新的DevOps工具出现了,而且每天越来越难跟踪它们以及它们在哪里世界。我问过这些工具中的几个(Ansible、Terraform、Salt、Salt、Chef、Bamboo、CloudFormation)适合什么地方。我为什么要使用其中一个?他们甚至是同一件事吗?我错过了一个主要球员吗?我又回到了之前的空白凝视/问题。所以我想我会做一些研究,阅读并尝试让我们所有人都明白,这样我们就可以将产品分类为我们都熟悉的类别或用途。在我们开始讨论DevOps工具和类别之前,让我们退后一步,讨论一些基本的(但经常被重载的)术语及其含义。(1)Computer/Server---具有中央处理器(CPU)、内存(RAM)、本地存储(磁盘)、运行操作系统的物理设备。(2)虚拟机——在主机上运行的计算机系统的仿真;通常在CPU、内存和磁盘使用方面与其他操作系统隔离。容器-软件及其所有依赖项的打包,以便它可以在任何基础架构上统一一致地运行。Docker容器是最受欢迎的。它们允许您打包一堆东西(您的软件、配置和其他软件)以便于部署和运输。您可以将容器视为虚拟化的下一个发展(在虚拟机之后)。(3)网络设备——一种在设备之间路由网络流量的硬件。示例包括路由器、负载平衡器和防火墙。(4)软件——在操作系统上编写并运行的代码。(5)DevOps-传统上有“开发”(您自己构建)和“运营”(我们将运行它),介于两者之间的一切都取决于车间的工作方式。2010年左右开始,2018年左右普及,DevOps的思想是“一套旨在减少对系统进行更改和将其投入正常生产之间的时间,同时确保高质量的实践”。当您考虑构建和运行一个不平凡的系统时,实际上会发生很多事情。以下是需要考虑的传统项目列表:获取计算机/服务器硬件配置计算机/服务器硬件(操作系统、网络布线等)监控计算机/服务器硬件获取网络设备(负载平衡器、防火墙、路由器等)配置网络设备监控网络设备构建软件编译软件测试软件打包软件部署/发布软件监控软件在DevOps之前,我们曾经有四个不同的团队来做这项工作:开发人员——他们会做#7、#8,有时甚至是#10QA——他们会做#9,有时是#11系统管理员——他们会做#1、#2、#3、#12网络管理员——他们会做#4、#5、#6对于硬件配置,网络设备和软件,每个团队可能会使用他们自己的脚本和工具集,并且在许多情况下,手动执行以进行“软件发布”。随着DevOps的出现,我的主要想法是打破这些孤岛,让每个人都成为“一个”团队的一部分,并调整一切的配置、部署和管理方式。(6)Cloud---很难定义信息技术史上最繁琐的术语,但我喜欢这件T恤:“没有云,只有别人的电脑。”最初,当云服务开始时,它们实际上只是其他人的计算机(或在他们的计算机上运行的VM)或存储。随着时间的推移,它们已经演变成这项服务和许多很多增值服务。许多硬件已被抽象掉。目前大部分云服务无法购买硬件设备,但可以购买硬件设备提供的服务。(7)InfrastructureasCode(IAC)——一种新的特性或概念,它允许我们通过定义或配置文件来定义数据中心所有项目的完整设置,包括VM、容器和网络设备。我的想法是,我可以创建一些配置和一些脚本,并使用我们将要讨论的工具之一运行它们,它们将自动在数据中心提供我们所有的服务。CI/CD是IAC的前身,多年来我们一直致力于自动化构建/测试/集成/部署周期,使用我们的云基础设施是其自然延伸。这样可以降低成本、加快上市时间并降低人为错误的风险。随着IAC的出现,许多传统的开发工具现在可以用来管理基础设施。DevOps工程师现在可以访问各种工具(如下所列),例如软件存储库、构建工具、CI/CD、代码分析器和测试工具,供DevOps工程师构建和维护基础设施。“随着DevOps的出现,我的主要想法是……让每个人都成为“一个”团队的一部分,并使一切在配置、部署和管理方面保持一致。”现在,我们已经定义了一些基本词汇,这让我回到了尝试对DevOps工具进行分类的任务,以便我们更容易识别可用于什么的工具。SoftwareRepository-一种管理软件版本的工具-Git是当今使用最广泛的工具。构建工具——一些软件需要打包才能使用或编译,传统的构建工具包括Make、Ant、Maven和MSBuild。持续集成工具-配置为每次您将代码签入存储库时,它都会构建、部署和测试软件。通常,这会提高质量并缩短上市时间。这个市场上最受欢迎的工具是Jenkins、Travis、TeamCity和Bamboo。代码分析器/查看工具——这些工具可以发现代码中的错误、代码格式和质量以及测试覆盖率。这些因语言而异。SonarQube是该领域的流行工具,以及其他“linting”工具。配置管理-配置管理工具和数据库通常存储有关您的硬件和软件项目的所有信息,并提供脚本和/或模板系统来自动执行常见任务。这个空间里似乎有不少玩家。传统玩家是Chef、Puppet和Salt。部署工具——这些工具有助于软件的部署。很多CI工具也是CD(ContinuousDeployment)工具,帮助部署软件。传统上,在Ruby中,Capistrano工具被广泛使用。在Java中,Maven被很多人使用。所有编排工具还支持某种部署。编排工具——这些工具配置、协调和管理计算机系统和软件。他们通常将“自动化”和“工作流程”作为其服务的一部分。Kubernetes是一个非常流行的专注于容器的编排工具。Terraform是一个非常流行的编排工具,具有更广泛的应用,包括云编排。此外,每个云提供商都有自己的一套工具(CloudFormation、GCPDeploymentManager和ARM)。监控工具——这些工具允许监控硬件和软件。通常,它们包括看门狗和日志文件看门狗,以确保系统的健康。Nagios是一种流行的监控工具。测试工具——测试工具用于管理测试以及测试自动化,包括性能和负载测试。当然,与任何其他产品集合一样,类别不必是干净的。许多工具跨越类别并提供来自两个或更多类别的功能。下面是我尝试展示大多数非常流行的工具并可视化它们在这些类别中的位置。如您所见,Ansible、Terraform和云工具(AWS、GCP和Azure)等多家公司正在尝试将部署、配置管理和编排类别与其产品相结合。较旧的工具集Puppet、Chef和SaltStack专注于配置管理和自动化,但已扩展到编排和部署。还有像GitLab和AzureDevOps这样的工具试图涵盖DevOps的几乎所有类别。我希望这篇概述能帮助您了解DevOps的基础知识、可用工具的类别,以及当今市场上的各种产品如何帮助处理这些类别中的一个或多个。多年来,我们在SolutionStreet使用了其中的许多工具,而对于我们来说,在所有情况下,都没有使用任何“转到”工具。使用什么取决于所使用的技术、托管(以及将来托管)的位置以及团队的人才和组成。
