专栏名称: 架构文摘
每天一篇架构领域重磅好文,涉及一线互联网公司的互联网应用架构、大数据、机器学习等各个热门领域。
目录
相关文章推荐
架构师之路  ·  我抢跑了,跟顶级专家学DeepSeek去... ·  昨天  
架构师之路  ·  神了!最大化deepseek潜能 - ... ·  2 天前  
美团技术团队  ·  预测技术在美团弹性伸缩场景的探索与应用 ·  昨天  
高可用架构  ·  一次线上生产库的全流程切换完整方案 ·  2 天前  
Java架构师技术  ·  SpringBoot+Flowable:一个 ... ·  2 天前  
Java架构师技术  ·  SpringBoot+Flowable:一个 ... ·  2 天前  
51好读  ›  专栏  ›  架构文摘

自制时代,七种自动化的基础架构即代码工具(IaC)

架构文摘  · 公众号  · 架构  · 2019-04-30 09:13

正文

自从十多年前被创建以来,基础架构即代码(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

https://aws.amazon.com/cn/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

https://azure.microsoft.com/en-us/features/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

https://cloud.google.com/deployment-manager/


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


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


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


4. Terraform

https://www.terraform.io/


上述三种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

https://www.chef.io/products/chef-infra/


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

https://www.ansible.com/


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


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


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


7. Puppet

https://puppet.com/







请到「今天看啥」查看全文