运维必备的DevOps工具链大盘点

Suresh Sekar
DevOps是一种令人兴奋的工作方式,尽管它不是唯一的方式,甚至不是最好的方式。更好的东西可能会在未来出现,但目前看来,它似乎代表了一种很好的团队协作方式。它让团队共同努力,交付价值,同时也帮助他们专注于客户,而不仅仅是技术或内部的东西,也包括了速度、学习以及公司的未来。

本篇文章中将介绍一些能够帮助你实现DevOps目标的核心技术类别和具体技术。

1、关于DevOps及其工具

●关于DevOps及其工具,需要记住:

●持续改进是目标;

●DevOps不是花钱买来的;

●分阶段采用工具。

2、计划工具

为什么计划工具对于DevOps来说很重要?

●分享目标;

●透明性;

●赋能。

计划工具示例

GitLab

GitLab是一个基于Web的DevOps生命周期工具。它提供了一个Git仓库管理器,具备wiki、问题跟踪和CI/CD管道功能,采用的是GitLab公司的开源许可。

Tasktop

Tasktop允许将所有这些工具添加到敏捷、ALM、PPM和ITSM中,实现了对整个生命周期前所未有的可见性。

CollabNet VersionOne

VersionOne支持Scrum、看板、XP、SAFe和混合开发方法,并使跨团队、程序、软件组合和企业的计划、跟踪和报告变得更容易。

Pivotal Tracker

敏捷项目管理工具,是开发人员围绕高优先级共享backlog进行实时协作的首选工具。

Trello

Trello是一个基于Web的看板风格的清单应用程序,是Atlassian的子公司。

很多团队用它来计划各自的工作sprint。

Azure Boards

使用敏捷工具,包括Scrum、看板和其他敏捷方法仪表板来更好地跟踪软件项目并进行计划。

这些都是可视化工作、分享计划、跟踪进展、确保朝着目标前进的好方法。

3、问题跟踪

为什么问题跟踪对DevOps来说很重要?

●用户响应;

●减少知识损耗;

●反馈闭环。

问题跟踪工具示例

Atlassian Jira

Jira是由Atlassian公司开发的问题跟踪产品,提供了bug跟踪和敏捷项目管理功能。

JetBrains YouTrack

YouTrack是JetBrains公司开发的一款基于浏览器的bug跟踪、问题跟踪系统和项目管理软件。它支持基于查询的问题搜索——包括自动完成、批量处理问题、定制问题属性集以及创建自定义工作流。

Zendesk

Zendesk让客户问题跟踪变得更简单,包括优步和Airbnb在内的很多公司都使用Zendesk作为他们的问题跟踪软件。

4、源码控制

为什么源码控制对DevOps来说很重要?

●资产管控;

●减少传输损耗;

●促进团队合作。

SCM工具示例

Git

Git是一个分布式版本控制系统,用于在软件开发期间跟踪源代码的变更。它是为协调程序员之间的工作而设计的,但它也可用于跟踪文件的变更。它专注于速度、数据完整性和对分布式、非线性工作流的支持。

GitHub

GitHub提供了Git分布式版本控制和源代码管理功能,以及自有的一些特性。

GitLab

GitLab的版本控制通过世界级的源代码管理功能帮助你的开发团队共享、协作和最大化他们的生产力。

Bitbucket

Bitbucket是Atlassian公司为使用Mercurial或Git版本控制系统的源代码和开发项目提供的基于Web的版本控制代码库托管服务。

Subversion

Apache Subversion是一种软件版本控制系统,采用了Apache开发源码许可。软件开发人员使用Subversion来维护文件的当前和历史版本,例如源代码、Web页面和文档。

5、构建工具

为什么构建工具对DevOps来说很重要?

●一致的打包效果;

●自动化错误探测;

●尽早发现质量问题。

构建工具示例

Maven/Gradle

Maven是一个主要用于Java项目的自动化构建工具。Maven还可以用来构建和管理用C#、Ruby、Scala和其他语言开发的项目。

Gradle是一个开源的自动化构建系统,基于Apache Ant和Apache Maven的概念,引入了一种基于groovy的领域特定语言。

MSBuild

Microsoft Build Engine,更广为人知的名字是MSBuild,是一个开源免费的托管代码和原生C++代码构建工具集,是.Net Framework的一部分。Visual Studio就使用MSBuild作为构建工具。

Rake

Rake是一个软件任务管理和自动化构建工具。用户可以指定任务和描述依赖关系,还可以对同一个命名空间中的组任务指定和描述依赖关系。

JFrog Artifactory

JFrog Artifactory是一种用于保存构建过程所产生的用于发布和部署的二进制文件的工具。Artifactory提供了多种包格式支持,如Maven、Debian、npm、Helm、Ruby、Python和Docker。

JFrog提供了高可用性、复制、灾难恢复、可伸缩性,并可集成很多自有和云存储产品。

Sonatype Nexus

Sonatype Nexus是一个存储库管理器。可用于代理、收集和管理依赖项,这样就不用经常为一堆的jar文件感到烦恼。它让软件的发行变得更容易。

在内部,你可以配置构建工具,把工件发布到Nexus,然后其他开发人员就可以使用它们了。

NuGet

NuGet是.Net包管理器。NuGet客户端工具提供了生成和使用包的能力。

NuGet Gallery是程序包作者和使用者的中心包仓库。

6、测试工具

●为什么测试工具对DevOps来说很重要?

●将注意力放在质量上;

●提升产品信心。

测试工具示例

JUnit

JUnit是一个用于Java的单元测试框架。JUnit在测试驱动开发当中扮演着非常重要的角色,它是单元测试框架家族xUnit(源于SUnit)的一员。

xUnit.net

xUnit.net是一个用于.Net Framework的开源单元测试工具,由NUnit的原作者开发。

Selenium

Selenium是用于测试Web应用程序的框架。Selenium提供了一个回放工具,用于编写功能测试,省去了学习脚本语言的麻烦。

Jasmine

Jasmine是一个开源的JavaScript测试框架。它的目标是可以在任何支持JavaScript的平台上运行,不干扰应用程序或IDE,并具有易于阅读的语法。它深受其他单元测试框架的影响,比如Screw.Unit、JSSpec、JSpec和RSpec。

Cucumber

Cucumber是一个支持行为驱动开发的工具。Cucumber BDD方法的核心是一个叫作Gherkin的语言解析器,可以用用户能够理解的逻辑语言来指定预期的软件行为。

7、持续集成(CI)和持续部署(CD)

为什么持续集成和部署对DevOps来说很重要?

快速反馈;

减少缺陷和等待时间。

CI工具示例

Jenkins

Jenkins是一个免费开源的自动化服务器。Jenkins帮助自动化软件开发过程中的非人为操作部分。它是一个基于服务器的系统,运行在Servlet容器中,比如Apache Tomcat。

CircleCI

CircleCI是全球最大的共享CI/CD平台,是代码从想法变成可交付产品的中心枢纽。

作为最常用的DevOps工具之一,CircleCI每天要处理超过100万个构建任务,它可以访问到工程团队协作以及代码运行的数据。Spotify、Coinbase、Stitch Fix和BuzzFeed等公司都使用CircleCI来提高工程团队的工作效率,发布更好的产品。

Travis CI

Travis CI是一个托管的CI服务,用于构建和测试托管在GitHub上的软件项目。Travis CI为私人项目提供各种付费计划和免费开源计划。TravisPro部署在客户自己的硬件上,提供专有版本的定制部署。

Concourse

Concourse是一个用Go开发的自动化系统,最常用于CI/CD,用于伸缩任何类型(从简单到复杂的)的自动化管道。

AWS CodePipeline

AWS CodePipeline是一个全托管的CD服务,可以帮助你自动化发布管道,以便快速可靠地更新应用程序和基础设施。

每当发生代码变更时,CodePipeline会根据你定义的发布模型自动化发布过程的构建、测试和部署阶段,让你能够快速、可靠地交付特性和更新。

你可以轻松地将AWS代码管道与第三方服务(如GitHub)或自定义插件集成。在使用AWS CodePipeline时,你只需要为所使用的内容付费,没有预付费用。

Azure Pipelines

为Linux、macOS和Windows建立云托管管道。构建Web、桌面和移动应用程序,并将其部署到云端或本地。

通过管道自动化构建和部署,减少在具体细节上花费的时间,把更多的时间花在创造性的事情上。

CD工具

为什么CD工具对于DevOps来说很重要?

●减少预发布库存;

●自动化复杂的管道;

●统一团队为客户创造价值的目标。

CD工具示例

Spinnaker

Spinnaker是一个免费开源的CD软件平台,最初由Netflix开发,后被谷歌收购,并进行了扩展。

Spinnaker是一个多云CD平台,用于快速发布软件变更。它将强大而灵活的管道管理系统与主要云提供商的集成结合在了一起。

Octopus Deploy

Octopus Deploy是一个自动化的部署和发布管理工具,全球领先的CD团队都在使用它。

Octopus是一个工具集,可以极大简化DevOps过程,通过云或虚拟机对大量微服务或应用程序进行持续测试和部署。

AWS CodeDeploy

AWS CodeDeploy是一种全托管的部署服务,可以将软件部署自动化到各种计算服务,如Amazon EC2、AWS Fargate、AWS Lambda和本地服务器。

你可以使用AWS CodeDeploy来自动化软件部署,减少容易出错的手动操作。

8、配置管理工具

配置管理工具为什么对于DevOps来说很重要?

●保持一致性;

●基础设施即代码。

配置管理工具示例

Terraform

Terraform是HashiCorp公司开发的开源基础结构即代码(IaC)软件工具。用户可以使用一种高级配置语言(叫作Hashicorp配置语言或JSON)来定义和提供数据中心基础设施。

BOSH

BOSH是一个将小型和大型云软件的发布工程、部署和生命周期管理结合起来的项目。BOSH可以基于数百个VM配置和部署软件。它还可以执行监空、故障恢复和软件更新,没有停机时间或者停机时间很短。

虽然开发BOSH是为了部署云计算,但它也可以用于部署几乎任何其他软件(例如Hadoop)。BOSH特别适合大型分布式系统。

此外,BOSH还支持多种基础设施即服务(IaaS)提供商,如VMware vSphere、谷歌云平台、Amazon Web Services EC2、Microsoft Azure、OpenStack和阿里巴巴云。BOSH提供了一个云供应商接口(CPI),用户可用它扩展BOSH,以便支持其他IaaS提供商,如Apache CloudStack和VirtualBox。

Chef

Chef是一个配置管理工具,用于处理物理服务器、虚拟机和云端的机器配置。很多公司用Chef控制和管理他们的基础设施,如Facebook、Etsy、Cheezburger和Indiegogo。

Chef公司是持续自动化软件的领导者、应用自动化的革新者以及DevOps运动的发起者之一。Chef与全球1000多家最具创新性的公司合作,提供快速交付软件的实践和平台,以实现他们的数字化转型愿景。

Ansible

Ansible是一款开源的软件配置、配置管理和应用程序部署工具。它运行在Unix家族系统上,可以配置Unix家族系统和Windows。它可以使用自己的声明性语言来描述系统配置。

Puppet

Puppet提供了定义系统需要哪些软件和配置的能力,然后在初始设置之后维护指定的状态。

Puppet使用与Ruby类似的声明性领域特定语言(DSL)为特定环境或基础设施定义配置参数。Puppet通过使用一个叫作Facter的实用程序来发现系统信息,Facter是在安装Puppet软件包时一起安装的。

Puppet主节点通过清单来管理它所控制的所有节点的重要配置信息。

被主节点控制的其他节点安装了Puppet并运行Puppet代理(一个守护进程)。代理节点收集的有关节点的配置信息将发送给主节点。主节点根据应该如何配置来编译目录,其他节点使用这些信息来更新自己的配置。

Puppet使用了拉取模式,代理节点定时轮询主机,查询特定于站点和特定于节点的配置。在这个基础设施中,Puppet代理应用程序通常作为后台服务运行在托管节点上。

谷歌云部署管理器

谷歌云部署管理器是一种基础设施管理服务,让谷歌云平台资源的创建、部署和管理变得更简单。

9、云平台

为什么云平台对DevOps来说很重要?

友好的自动化;

具有可观察性的运行时。

云平台示例

Amazon Web Service

Amazon Web Service(AWS)是一个安全的云服务平台,提供计算能力、数据库存储、内容交付和其他帮助企业扩大规模和增长的功能。

简而言之,AWS可以做以下这些事情:

●在云端运行Web和应用服务器,托管动态网站;

●将所有文件安全地存储在云端,这样你就可以从任何地方访问它们;

●使用托管数据库,如MySQL、PostgreSQL、Oracle或SQL Server来存储信息;

●使用内容分发网络(CDN)在世界各地快速交付静态和动态文件;

●批量发送电子邮件给你的客户。

微软Azure

微软Azure是微软创建的云计算服务,通过微软数据中心构建、测试、部署和管理应用程序和服务。

微软Azure,原来叫作Windows Azure,是微软的公共云计算平台。它提供一系列云服务,包括计算、分析、存储和网络。用户可以选择这些服务来开发和扩展新的应用程序,或者在公共云中运行现有的应用程序。

谷歌云平台

谷歌云平台由谷歌提供,是一套云计算服务,运行在谷歌用来运行其终端用户产品(如谷歌搜索、Gmail和YouTube)相同的基础设施上。

谷歌云平台提供在web上部署应用程序所需的计算资源,专注于为个人和企业提供一个构建和运行软件的地方,并通过Web连接软件用户。

你使用谷歌提供的云计算服务来迎接业务方面的挑战,包括数据管理、混合和多云、人工智能和机器学习。

Pivotal Cloud Foundry

Pivotal Cloud Foundry(PCF)是一个开源的多云应用平台即服务(PaaS),由501组织Cloud Foundry Foundation负责管理。该软件最初由VMware开发,后来转到Pivotal软件公司。2019年底,随着VMware收购Pivotal,又被带回到VMware。

PCF是一个用于部署、管理和持续交付应用程序、容器和功能的多云平台。PCF允许开发人员快速部署和交付软件,而不需要管理底层基础设施。

Heroku

Heroku是一个支持多种编程语言的云PaaS。作为首批云平台之一,Heroku从2007年6月就开始开发,当时它只支持Ruby编程语言,但现在支持Java Node.js、Scala、Clojure、Python、PHP和Go。

Heroku是一个基于容器的云PaaS。开发人员使用Heroku来部署、管理和扩展现代应用程序。这个平台优雅、灵活、易于使用,为开发人员提供了发布应用程序最简单的途径。

中国云厂商(编者补充)

阿里云、腾讯云、华为云、京东云等各类型厂商都是国内用户的可选项。

容器调度器

容器调度程序的主要任务是在最合适的主机上启动容器并将它们连接在一起。它必须通过自动故障转移来处理故障,并且当单个实例有太多数据需要处理/计算时,它需要能够扩展容器。

三个最流行的容器调度器是Docker Swarm、Apache Mesos和Kubernetes。

Docker Swarm

Docker Swarm是Docker开发的一种容器调度程序。这个集群解决方案提供了一些优势,比如使用标准Docker API等。

Apache Mesos

Mesos的目的是构建一个可扩展、高效的系统,可以支持大量的框架。这也是一个主要的问题:一些框架,如Hadoop和MPI,是独立开发的——因此不可能在框架之间进行细粒度的共享。

Mesos的目的是添加一个薄薄的资源共享层,为框架提供访问集群资源的公共接口。Mesos将调度控制委托给框架,因为很多框架已经实现了复杂的调度。

根据集群上运行的作业类型,框架可以分为四种,其中一些框架提供了原生Docker支持,比如Marathon。在Mesos 0.20.0中添加了对Docker容器的支持。

Kubernetes

Kubernetes是一个用于编配Docker容器的系统,它通过标签和Pod的概念将容器分为逻辑单元。Pod是Kubernetes和其他两种解决方案之间的主要区别——它们是一组容器集合,形成一起部署和调度的服务。与基于关联性的容器(如Swarm和Mesos)调度相比,这种方法简化了集群的管理。

Kubernetes调度器的任务是监控带有空PodSpec的Pod。NodeName指定将容器安排在集群中的某个位置。

这是与Swarm和Mesos的不同之处,Kubernetes允许开发者在运行Pod时通过定义PodSpec.NodeName来绕过调度器。

调度器使用谓词和优先级来定义Pod应该运行在哪些节点上。我们可以使用新的调度器策略配置覆盖这些默认值。

我们可以通过命令行标志policy-config-file指定一个JSON文件,在启动Kubernetes时将会使用该文件描述的谓语和优先级,调度器将使用这些定义好的策略。

10、监控和日志工具

为什么监控和日志工具对于DevOps来说很重要?

●快速恢复;

●响应速度;

●透明性;

发生事故时减少人工干预。

监控和日志工具示例

ELK

ELK是三个开源产品的集合——Elasticsearch、Logstash和Kibana。它们都是由Elastic公司开发、管理和维护的。

●E代表ElasticSearch——用于存储日志;

●L代表Logstash——用于传输、处理和存储日志;

●K代表Kibana——一个可视化工具(Web界面)。

Datadog

Datadog是一个针对云规模应用程序的监控服务,通过基于SaaS的数据分析平台来监控服务器、数据库、工具和服务。

Datadog应用程序性能监控(APM或跟踪)帮助用户深入了解应用程序性能——从自动生成的仪表盘(监控关键指标,如请求量和延迟)到单个请求的详细跟踪信息——与日志和基础设施监控信息并列展示。

当向应用程序发出请求时,Datadog可以看到分布式系统的跟踪,并向用户显示关于这个请求的系统数据。

New Relic

New Relic是一家总部位于加州旧金山的科技公司,它开发基于云的软件,帮助网站和应用程序所有者跟踪服务性能。

New Relic的应用程序性能监控软件分析产品(APM)提供有关Web应用程序性能和最终用户体验满意度的实时和趋势数据。

Prometheus

Prometheus是一款用于事件监控和警报的免费应用程序。它在时间序列数据库中记录实时指标,基于HTTP拉取模型,支持灵活的查询和实时警报。

Prometheus服务器的核心原理是抓取——也就是说,调用各个节点暴露出来的指标端点。它定期收集这些指标并将它们存储在本地。

Zipkin

Zipkin是一个分布式跟踪系统。它用于收集诊断延迟问题所需的时间数据,提供了数据的收集和查找功能。

如果日志文件中有跟踪ID,则可以直接跳指定位置。否则的话,你可以基于服务、操作名称、tagsm和持续时间等属性进行查询。它将为你汇总出一些有趣的数据,例如花费在服务上的时间百分比以及操作是否失败。

Azure Monitor

Azure Monitor提供了一个全面的解决方案,用来收集、分析和执行来自云端和本地环境的遥测数据,从而最大化应用程序和服务的可用性和性能。

它可以帮助你了解应用程序的执行情况,并主动识别影响它们的问题以及它们所依赖的资源。

几个Azure Monitor的使用场景:

●使用Application Insights检测和诊断应用程序和依赖项之间的问题;

●将基础设施问题与用于VM的Azure Monitor和用于容器的Azure Monitor关联起来;

●使用日志分析深入监控数据,进行故障排除和深入诊断;

●通过智能警报和自动运维支持大规模操作;

●使用Azure仪表板和工作簿进行可视化。

11、通信工具

为什么通信工具对于DevOps来说很重要?

●连接团队;

●减少等待时间;

●改进团队协作。

通信工具示例

Slack

Slack是由Slack公司开发的即时通讯平台。

Slack本质上是整个公司的一个聊天室,旨在取代电子邮件成为沟通和分享的主要方式。你可以用频道进行分组讨论,也可以通过私有消息进行信息、文件共享,等等。

微软Teams

微软Teams是一个统一的通信和协作平台,结合了工作讨论、视频会议、文件存储和应用程序集成。

Teams是一种基于聊天的协作工具,它为全球、远程和分布式的团队提供协作能力,并通过公共空间共享信息。你可以使用它提供的一些很酷的功能,比如文档协作、一对一聊天、团队聊天,等等。

谷歌Hangouts

谷歌Hangouts是谷歌开发的一款通讯软件产品。Hangouts最初是Google+的一个功能,在2013年谷歌开始将Google+Messenger和谷歌Talk的功能整合到Hangouts中,成为了一个独立的产品。

Hangouts Chat是进行组织内交流的一种有效方式。你可以与一名或多名同事发送信息,可以创建聊天室进行多人讨论,并使用机器人来进行工作自动化。你可以在电脑浏览器和Android或iOS手机App中使用Hangouts Chat。

Zoom

Zoom Video Communications是一家远程会议服务公司,总部设在加利福尼亚州的圣何塞。它提供了一种远程会议服务,结合了视频会议、在线会议、聊天和移动协作。

Skype更适合寻找整体商业解决方案的团队,而Zoom更适合频繁进行视频聊天和会议的团队。不过,这两种工具都不是专门为远程工作而构建的。

中国版本推荐

腾讯会议、钉钉、飞书、WeLink等。

12、知识分享工具

知识分享工具为什么对于DevOps来说很重要?

●减少知识浪费;

●提高新员工的效率;

●减少犯同样的错误。

知识分享工具示例

GitHub Pages

GitHub Pages是一个静态站点托管服务,直接从GitHub上的存储库获取HTML、CSS和JavaScript文件,可在构建过程中运行这些文件,然后发布网站。你可以在GitHub Pages示例集合中看到GitHub Pages站点的示例。

Confluence

Confluence是一个由Atlassian开发并发布的协作程序。Atlassian用Java编程语言开发了Confluence,并于2004年首次发布。

Confluence是一个Wiki协作工具,用于帮助团队有效地协作和共享知识。你可以用Confluence捕获项目需求、将任务分配给特定用户,并用Team Calendar插件一次性管理多个日历。

Jekyll

Jekyll是一个支持博客的静态站点生成器,用于个人、项目或组织站点。它是由GitHub联合创始人Tom Preston-Werner用Ruby开发的,并采用了MIT开源许可。

Jekyll是一个解析引擎,打包成Ruby gem,用来基于动态组件构建静态网站。

谷歌Sites

谷歌Sites是谷歌提供的一个结构化的Wiki和网页制作工具。谷歌Sites的目标是让任何人都能够创建支持不同编辑器协作的简单Web站点。

这些站点在每一个屏幕上(从桌面到智能手机)看起来都很棒——做到这些都不需要学习设计或编程。

13、总结

这篇文章涵盖的所有类别可以帮助你更好地实施DevOps。其中任何一种都很有用,而且我认为所有这些都是你需要的,帮助团队以可持续的方式向客户交付价值,并帮助你脱颖而出。

我提到了DevOps工具链,比如规划工具、问题跟踪工具、源代码控制管理、构建和测试代码、持续集成和部署源代码、管理配置、使用云平台,然后是监控和日志,以及沟通和知识共享。

我希望你能够喜欢这篇文章。DevOps是一种令人兴奋的工作方式,尽管它不是唯一的方式,甚至不是最好的方式。更好的东西可能会在未来出现,但目前看来,它似乎代表了一种很好的团队协作方式。它让团队共同努力,交付价值,同时也帮助他们专注于客户,而不仅仅是技术或内部的东西,也包括了速度、学习以及公司的未来。

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论