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