七种自动化的基础架构即代码工具
2019-05-03 14:28  加入收藏 自动化   自动化架构   自动化编程  

七种自动化的基础架构即代码工具

自从十多年前被创建以来,基础架构即代码(Infrastructure-as-Code,IaC)一直在改变着各个企业IT架构的设置与管理方式。过去对于IT人员而言,构建新的基础架构,就意味着在某个功能强大的数据中心内部,堆叠各种物理服务器、配置不同的网络线缆、以及添置各类硬件设备。

如今单靠软件配置,我们就可以创建出更高性能、更具成本效益、且更安全的基础架构了。此外,相对于过去需要几天才能跑完的传统变更管理流程,如今企业可以通过采用一致性的变更与配置流程,帮助其团队在几分钟之内,就能推出通过充分验证的、且无人值守的全新流程。

如今,IaC能够从源代码、而不是从手工配置的角度,为开发人员提供丰富的云端服务、以及IT基础架构的相关工具。在IaC中,我们可以将服务器、网络和数据库等云端元素视为不同的软件资源,进而实现完全自动化的配置。

有了这种将基础架构视为软件与数据的处理方式,企业开发团队便可以进行一系列的DevOps与敏捷(Agile)实践,并在技术价值流(technology value stream)中推动快速且高质量的工作流程。其中,我们可以参考和利用的最佳实践包括:持续集成(CI)、持续交付(CD)和测试驱动开发(test-driven development,TDD)等。与此同时,企业也可以通过优化部署编排(orchestration)、自动化测试库、以及使用版本控制系统(version control systems,VCS),来增强其现有系统的统一性和容错能力。

可见,在不断的实践与快速发展中,IaC通过各种自动化工具,让企业的各种业务流程与关键环境更加容易实现与落地。下面,让我们细数七种能够提供此类自动化工具的云端平台吧。

七种自动化的基础架构即代码工具

1.AWS CloudFormation

该集成式的AWS服务是专为那些在AWS云中工作的用户而设计的。凭借着在云端环境中的市场占有率,AWS CloudFormation有着超过350,000名开发用户。目前,它已经成功配置了342种AWS资源类型。

CloudFormation允许用户方便地在JSON(请参见https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.template)或YAML(请参见https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.yaml)模板文件中,通过它所提供的各种模板,来构建不同复杂程度的安全基础架构模型。与此同时,该服务也能通过自动化的功能,以可重复、可管理的方式帮助用户部署手头上的各种资源。而且,您只需要对所使用的资源,而不是服务本身支付费用。因此,您只需要根据自己的应用规范,配置相应的模板,CloudFormation就能为您处理其余的任务。

AWS CloudFormation的参考文档链接为:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html。

七种自动化的基础架构即代码工具

2.Azure Resource Manager

作为竞品,Microsoft为用户提供的IaC工具是:Azure Resource Manager。用户可以通过Azure Resource Manager(ARM)的不同模板,在无缝的周期内,配置出自己的基础架构、并处理各种依赖项。您既可以在模板中使用那些已在JSON中声明描述了的资源,也可以在同一个ARM模板中声明多个Azure资源,以构建整体性的项目环境。

由于ARM模板具有幂等性(idempotent),因此您可以无限次数地重复使用相同的模板,并获得相同的结果。同时,您也可以使用VSTS(译者注:Visual Studio Team System,Microsoft开发的一套生命周期开发工具)仪表板,以可视化的方式监控所有的构建与发布,并快速地了解到云端环境的整体运行状况与模板质量。此外,Resource Manager还支持服务器的实例分组、以及对不同分组的统一管理。

Azure Resource Manager的参考文档链接为:https://docs.microsoft.com/en-us/azure/azure-resource-manager/。

七种自动化的基础架构即代码工具

3.Google Cloud Deployment Manager

顾名思义,Google Cloud Deployment Manager(CDM)是基于Google云平台的配置文件(YAML)和模板(JINJA2或PYTHON)的一种自动化执行工具。它允许用户自行定义和同步部署各种系统资源。在其Beta和Alpha版的特征中,用户还可以使用到自动扩展与负载均衡等功能,来编写所有的部署脚本。

同时,Google CDM也支持预览功能。这意味着:您在不直接提交更改的情况下,便可以直接了解到部署和变更所带来的影响。该功能不仅可以帮助用户避免出现人为的错误,而且能够起到加强与稳定整体基础架构的作用。

GCDM的参考文档链接为:https://cloud.google.com/deployment-manager/。

七种自动化的基础架构即代码工具

4.Terraform

上述三种IaC工具都是为特定的云环境所设计的,而Terraform并非如此。它不仅是幂等的,而且是多种云端环境中的“瑞士军刀”。由HashiCorp开发的(该公司同样开发出了Vault和Nomad)Terraform独立于任何云端平台。它能够帮助用户轻松地处理,那些具有复杂分布式应用的大型基础架构。

凭借着其灵活性,Terraform的自动化具有多种表现形式,并且主要服务于核心规划与应用周期。一些团队虽然选择了在本地运行Terraform,但是他们会使用各种包装脚本(wrapper scripts)为Terraform的运行设置一致性的工作目录。而其他的开发团队,则可能会在诸如Jenkins之类的备用编排工具中,去运行Terraform。

与Google CDM类似,Terraform也支持对于变更和配置的预览。同时,用户还能够是用它来复制各种现有的部署、以及单个服务器的实例。此外,Terraform还深化了其版本控制和远程状态管理服务,能够为远程团队的协作,提供集中式的真实信息来源。

Terraform的参考文档链接为:https://learn.hashicorp.com/terraform/。

七种自动化的基础架构即代码工具

5.Chef

Chef是一款备受CI/CD人员欢迎的IaC工具。它的优势在于使用了基于Ruby的领域特定语言(Domain Specific Language,DSL)。它可以通过特有的Cookbook式版本控制,来维持用户配置的一致性,从而保证了基础架构能够跟上,其托管应用的快速增长。

Chef通过在其核心配置中封装了各种模板与模板集合,以满足用户的开箱即用需求。其中,一个Cookbook(一种模板)仅对应一种任务。它能够基于所涉及到的资源,提供不同的服务器配置。例如,某个带有数据库的Web应用程序可以拥有两个recipes(另一种模板),它们共同实现存储任务。由于支持那些为云平台专配的API,因此Chef还能够很好地与其他IaC工具(包括Terraform、以及其他多种云端环境)配合使用。

Chef的参考文档链接为:https://docs.chef.io/quick_start.html。

七种自动化的基础架构即代码工具

6.Ansible

Chef虽然是大多数人的首选,但是对于Red Hat环境中的用户而言,他们更喜欢使用Ansible。以自动化为设计初衷的Ansible,专注于提供极其简化的配置语言,以及在无需修改的情况下管理各种云端实例。不仅限于特定的配置管理,Ansible也能很好地执行诸如零宕机(非中断)滚动式更新、以及热补丁(hotfixes)之类的任意IT编排。您不必像过去那样,将系统作为某系孤立的单元进行管理,而只需要清楚地描述出组件与系统之间的相互关系,Ansible便可帮您打理其余的部分。

作为一款灵活的IaC工具,您不仅可以使用由Ansible提供的既有功能,还能够通过开发属于自己的模块和规则,来满足各种特定的需求。当然,Ansible也能够提供友好的GUI设置和监控功能。

Ansible的参考文档链接为:https://www.ansible.com/resources/get-started。

七种自动化的基础架构即代码工具

7.Puppet

Puppet采用了更为全面的IaC设置和自动化方法。目前,它正在通过各种先进的接口技术,为Reddit、Dell和Google等大型公司的数据中心、以及各种操作系统的运行提供支持。作为一款老牌的工具,Puppet使用基于Ruby的DSL,来定义基础架构最终状态。Puppet通过监控基础架构,来判断是否出现了偏离既定状态的变更,进而自动予以修正。另外,由于拥有大量的企业用户和社区支持,因此它非常适合于系统管理人员来进行功能性的开发。

Puppet的参考文档链接为:https://learn.puppet.com/?_ga=2.121922253.792795342.1550743099-1090453039.1547698716&_gac=1.146748870.1549008273.Cj0KCQiA-c_iBRChARIsAGCOpB1vRaPt-ltx4_GiXxqHX7AaW5SnqQs9U6wzndUPPqoxrRg-AjhSgJUaAqVGEALw_wcB。

总结

综上所述,您需要根据自己的个人偏好和特定需求,来选择合适的自动化IaC工具。此外,由于您势必会需要花费一定的时间去定义相关的内容,因此您在选择时也需要考虑到自己团队所使用的编程语言、团队之间的沟通、以及云端环境的一致性等问题。如果您有兴趣深入阅读的话,请参考《IaC的安全挑战以及克服方法》一文。

原文标题:The Top 7 Infrastructure-As-Code Tools For Automation,作者:Narendar Nallamala 

天使CTO技术孵化

一键分享:

上一篇:浅析软件架构的10个常见模式
下一篇:数据库中存储过程和触发器有什么区别

文章评价