如果您曾经不得不配置和配置服务器,那么就知道它可能带来的痛苦。 进行配置硬件连接,软件堆栈及其相互依存关系的过程,然后将其乘以正在部署的许多服务器之间—您正在谈论日复一日的乏味。
脚本通常是执行重复任务的解决方案,但是即使在那儿,脚本也有其局限性,因为脚本大多是线性的if-then语句,它们不具有应用程序代码的强度和功能。
这就是基础结构即代码(IAC)出现的地方。IAC(有时称为可编程或静态定义的基础结构(SDI))是一种IT设置,可以自动管理和提供从硬件到软件层的技术堆栈。控制比脚本和更多的自动化。
开源配置管理提供商Puppet的架构副总裁Nigel Kersten表示:“ IAC的最简单定义是能够将您的基础架构视为软件。 “诸如虚拟API,IaaS,供应云资源以及以编程方式与硬件对话以启动供应过程之类的东西都是IAC。”
IAC允许工程师使用“代码”(通常是高级脚本或编程语言)来为任何给定的应用程序或服务编程基础架构设置。 这样,任何授权用户都可以以机器速度每次都以相同的方式执行预定义的,可重复的,已知的良好流程来自动构建和重建IT基础架构。
“这使软件开发人员和生产工程师不仅可以使用代码来构建应用程序,还可以构建应用程序将在其上运行的系统,”管理和法规遵从性监视软件提供商Splunk的首席技术倡导者Andi Mann说。
脚本在基础架构和配置管理中无法正常运行,原因有以下几个:
除了设置机器和建立连接之外,IAC还处理凭证的建立。 新计算机上线时,它具有其主凭据,这些主凭据将关闭并切换到公司的受信任凭据,例如Active Directory。
在传统方法中,一个人必须使用主凭据登录才能添加私有凭据,禁用主凭据并注销。 在IAC系统中,实用程序可以与受信任的系统进行对话,然后通知该系统有可用的新系统,并会自动完成建立受信任的凭据的整个过程。
您可能熟悉一些早期的配置管理产品,这些产品已更新为包括IAC。 这些包括Puppet , Chef , SaltStack和CFengine。 所有这些都可以让您在共享的云计算平台上管理更自动化的代码供应。 但是IAC是下一步。
这可能会有些混乱,因为不同的供应商对于相同的组件或元素有不同的术语。 例如,Puppet调用其IAC脚本清单 ,而Chef则将其称为食谱和食谱 。 尽管它们的名称不同,但两者都做同样的事情:它们存储代码指令。
IAC对任何组织和任何IT团队都是有用的,但最适合希望利用新的,响应速度更快的IT手段(例如云计算 , 敏捷开发和开发 )的组织 。
因为它涉及使用开发人员方法和学科,所以IAC倾向于提倡比脚本(主要替代脚本)更好的质量。 脚本通常是由有时间的人编写的,因此并不总是得到维护。
IAC代码与应用程序代码经历相同的开发,测试,质量保证,分段和发布周期。 通过在开发过程中进行更严格的控制和质量控制,IAC提供了预定义的“已知良好”流程来进行配置,所需的状态控制以还原手动或带外更改等,IAC有助于减少生产中基础架构配置错误引起的问题数量如果代码有问题,可以回滚到“已知良好”状态。
但是,您无需参与这些新方法即可从IAC中受益,因为即使对于相对简单的本地服务器部署,它也提供了明显的好处。 IAC的优势在于,可以在本地,云中以及在快速增长的边缘计算中快速部署硬件-对于太多的IT商店而言,这种方法仍然是一个新概念。
“在90年代,有太多流程陷入困境。 客户不能接受云原生开发,因为他们的基础架构不支持它。 我们必须教客户SDI的基础知识。 我们告诉他们,这基本上是静态定义的基础结构的非常自然的扩展。 许多客户甚至都没有。” Zededa产品和策略副总裁Roman Shaposhnik说,Zededa是用于边缘计算的虚拟化和编排软件开发人员。 “对于客户而言,问题是'我如何可靠地引入变化?' 在开发中,您需要进行单元测试,通过或失败。 今天,我们在传统的SDI中没有像现在这样的东西。 AIC使您可以利用其中的一些技术。”
与以前的方法相比,IAC的最显着优点是速度和敏捷性不仅在供应和部署硬件方面,而且在维护方面也如此。 通过自动化日常流程的处理,例如建立服务器与存储,交换机等的连接,IT团队可以腾出时间处理其他任务。
与其他技术相比,硬件配置仍滞后,因此采用IAC的优势非常明显。 一家从事裸机云配置自动化的初创公司RackN的首席执行官Rob Hirschfeld指出,主要的硬件供应商并没有在运营中获得太多价值。 “我们将IAC定位为使您的基础架构更加动态和灵活,并不断进行更新和更新,并打补丁到最新状态。 您会认为他们会想要的,但是人们除非需要,否则他们不会修补服务器。”他说。
Hirschfeld说,许多数据中心的替代方法是让人们遵循印刷说明。 “大多数数据中心仍然像这样。 您需要确保系统配置正确且正在运行的供应商工具或他们自己的脚本。 他们将它们拼凑在一起,然后将其移交给另一个自动化工具(如Ansible)来完成它。”
Puppet的Kersten认为,IAC对于迁移到云更为重要。 他说:“在内部部署环境中,采用IAC方法是可选的,但在云环境中,则是强制性的,因为您必须将所有内容都视为软件,因为没有硬件可利用。” “只要您构建软件并想知道如何部署它,IAC就很重要。”
这成为更是如此multicloud Zededa的Shaposhnik说,环境。 “如果您是一家小型公司,则在单一云上是很好的,但是大型公司必须是多云的。 所有这些云都有不同的软件定义的API。 IAC是使自己摆脱底层云的底层异质性的最佳方法,”他说。
IAC工具归为两类:配置流程和配置管理。 市场上的许多产品,无论是商业产品还是开源产品,都具有这两种功能。
配置编排工具包括AWS CloudFormation和Terraform。 此类工具旨在自动化服务器和其他基础结构的部署(请考虑使用PXE的更新版本)。
诸如Chef和Puppet之类的配置管理工具旨在帮助在置备的系统上配置软件和系统。
选择工具时,应考虑目标部署。 例如,AWS CloudFormation旨在仅在Amazon Web Services上配置和管理基础架构。 哪个有意义-AWS为什么会支持Google Cloud Platform? 当然,情况并非总是如此:Red Hat的Ansible在各种平台上运行,而不仅仅是Red Hat Enterprise Linux。
Puppet和Chef等第三方工具可与本地服务器和多个云提供商的基础设施即服务(IaaS)产品一起使用。 面向云的Terraform与云无关,可让您同时自动化来自多个云服务提供商的基础架构堆栈,并集成其他第三方服务。
尽管每个工具都有其自己的特定领域语言(DSL),但DSL通常基于YAML和/或JSON 。 例如,Terraform使用其自己的称为Hashicorp配置语言(HCL)的DSL,该语言基于JSON。 可以使用YAML和JSON创建AWS CloudFormation模板。 Chef和Puppet一样都使用Ruby语言。
由于大多数开发人员是通过学习其他人的工作来学习的,因此许多IAC供应商在其自己的存储库中提供了样本模式/食谱/蓝图。 例如,Puppet有一个名为Puppet Forge的存储库,用于提供IAC代码示例,并允许开发人员共享自己的工作。 它具有诸如如何在其集合中配置和管理SQL Server数据库或Apache服务器之类的功能。
From: https://www.infoworld.com/article/3344382/what-is-infrastructure-as-code-a-big-step-up-from-server-scripting.html