过去,管理IT基础设施是一项艰巨的任务。系统管理员必须手动管理和配置应用程序运行所需的所有硬件和软件。
然而,近年来,情况发生了巨大变化。云计算等趋势彻底改变并改进了组织设计、开发和维护其IT基础设施的方式。
这一趋势的关键组成部分之一被称为基础设施即代码(IaC),也就是我们今天要讨论的内容。
根据Palo Alto Networks PRiSMa cloud高级副总裁VaRun BadhwaR的说法,基础设施即代码正在成为云安全的三大支柱之一,将DevOps和安全性结合在一起,共同推动DevSecOps市场。
基础设施即代码(IaC)定义
维基百科对基础设施即代码的定义为,
基础设施即代码是通过机器可读的定义文件,而不是物理硬件配置或交互式配置工具来管理和配置计算数据中心的过程。
简单来说,基础设施即代码意味着使用配置文件管理您的IT基础设施。
接下来,你可能会问我们为什么要这样做?这就要看基础设施即代码能够解决哪些问题了?
管理IT基础设施的痛点
长期以来,管理IT基础设施都是一个手动过程。人们会将服务器实际位置就位并对其进行配置。只有在机器被配置为操作系统和应用程序所需的正确设置后,这些人才会部署应用程序。不出所料,这种手动过程通常会导致很多问题。
第一个大问题就是成本。从网络工程师到硬件维护技术人员,您必须聘请许多专业人员在流程的每一步执行必要的任务。显然,所有这些人都需要支付报酬,且需要得到管理,这又会导致更多的管理成本,同时增加组织内部沟通的复杂性。结果是,钱花了也未能构建和维护好自己的数据中心,白白增加了几个数量级的成本。
另一个大问题就是可扩展性和可用性。也可以将这些都归结为速度问题。由于手动配置太慢,应用程序经常会遇到访问高峰,而系统管理员会拼命尝试设置服务器来管理负载。这必然会影响可用性。如果组织没有备份服务器甚至数据中心,那么应用程序可能会长时间不可用。
第三个主要问题就是监控和性能可见性。既然已经拥有了所有基础设施,那么如何密切关注它以确保其正在以最佳方式运行呢?当遇到问题,又如何准确定位问题来自基础设施的哪个位置呢?是网络、服务器还是应用程序?NetReo之类的工具可以让您全面了解整个IT基础设施的性能。借助NetReo的自动设备发现和配置,您可以确保自己的环境中没有任何盲点,而且平台的拓扑映射、事件关联和自动根本原因分析使您能够准确查明问题发生的位置。
最后一个问题是不一致性。如果多个人负责手动部署配置,不一致将成为不可避免的问题。
云计算:解药?
云计算帮助我们解决了上述的部分问题,它使你无需构建和维护数据中心以及与之相关的高成本。
不过,云计算远非灵丹妙药。虽然它允许您快速设置您的基础设施需求从而解决高可用性和可扩展性等严重问题但它对解决不一致问题没有任何帮助。当不止一个人执行配置时,差异必然存在。
而基础设施即代码正好能够弥补问题的缺失部分。
让我们回顾一下之前介绍过的基础设施即代码定义:基础设施即代码意味着使用配置文件管理您的IT基础设施。
该定义的关键要点是:在基础设施即代码之前,IT人员必须手动更改配置以管理其基础设施。使用基础设施即代码,您的基础设施配置会采用代码文件的形式。由于它只是文本,因此您可以轻松编辑、复制和分发它。您可以(而且应该)将它置于源代码控制之下,就像任何其他源代码文件一样。
基础设施即代码的好处
刚刚说到云计算只能解决其中一些问题,但不是全部。而基础设施即代码正是弥补问题最后缺失的那部分。
接下来,我们将深入探讨您的组织通过采用基础设施即服务解决方案可以获得的一些好处:
速度
基础设施即代码提供的一个显著优势就是速度。它使您能够通过运行脚本快速设置完整的基础设施。您可以为每个环境执行此操作从开发到生产、过渡、QA 等等。基础设施即代码可以使整个软件开发生命周期更加高效。
一致性
手动过程会导致错误,因为人的记忆会出错,人就会犯错。此外,沟通也是个问题,而且我们通常并不擅长。正如上所述,无论你多么努力,手动基础设施管理都会导致差异。基础设施即代码通过让配置文件本身成为唯一的事实来源来解决这个问题。这样,您就可以保证重复部署相同的配置,而不会出现差异。
问责制
这是一种快速简便的方法。由于您可以像任何源代码文件一样对基础设施即代码配置文件进行版本控制,因此您可以完全跟踪每个配置所经历的更改。一切都不再是关于谁做了什么以及何时做了什么的猜谜游戏。
高效率
通过使用基础设施即代码,您可以在多个阶段部署您的基础设施架构。这使得整个软件开发生命周期更加高效,将团队的生产力提升到新的水平。
您可以让程序员使用基础设施即代码创建和启动沙箱环境,让他们能够安全地进行隔离开发。对于QA专业人员来说也是如此,他们可以拥有生产环境的完美副本,并在其中运行测试。最后,到了部署阶段,您可以一步将基础设施和代码推送到生产环境。
低成本
毫无疑问,基础设施即代码的主要好处之一就是降低了基础设施管理的成本。通过将云计算与基础设施即代码结合使用,可以显著降低成本,这是因为您不必花钱购买硬件、雇用人员来操作它,也不必建造或租用物理空间来存储它。
更重要的是,基础设施即代码还以另一种更微妙的方式降低了您的成本,这就是我们所说的机会成本。
要知道,把有用的人放置在适当的位置才能最大限度的发挥效用。如果只是让他们做一些可以自动化完成的任务,无疑是在浪费资源,他们应该把精力放在能够为企业组织带来更多价值的任务上。这就是自动化策略(基础设施即代码就包含其中)派上用场的地方。
基础设施即代码工作原理
基础设施即代码工具的工作方式各不相同,但我们通常可以将它们分为两种主要类型:遵循命令式资源配置方法的工具以及遵循声明式资源配置方法的工具。
其中,命令式资源配置方法指的是资源使用者没有正式编码所需的状态,并且由资源使用者来决定命令序列。
最值得注意的是,命令式方法是不可重复的,因此,也就无法自动执行,因为资源使用者必须为每个给定的当前状态确定导致所需状态的命令序列。
而声明式资源配置方法指的是,资源使用者正式编码所需的状态,并且由组件来决定命令序列。
最值得注意的是,声明式方法是可重复的,因此可以实现自动化,因为组件可以确定任何可能导致当前状态所需状态的命令序列。
最佳实践
下面我们为大家提供一个最佳实践列表,以帮助您充分利用基础设施即代码策略。
使代码成为您唯一的事实来源。您应该在配置文件中明确编码所有基础设施规范。您的配置文件应该是所有基础设施管理问题的唯一真实来源。 版本控制所有配置文件,将所有配置文件置于源代码控制之下。 为您的基础架构规范使用尽可能少的文档(或根本不使用)。这一点是第一点的逻辑结果。由于您的配置文件应该是您的唯一真实来源,因此不需要更多文档。外部文档很容易与实际配置不同步,但这不会发生在配置文件中。 测试和监控您的配置。基础设施即代码是代码,和所有代码一样,它可以被测试。所以你应该测试一下!通过为基础设施即代码使用测试和监控工具,您可以在将服务器部署到生产环境之前检查服务器中的错误和不一致情况。 基础设施即代码自动化配置与编排工具
目前,市场上存在很多基础设施即代码自动化部署工具,下面为大家重点介绍四款自动化配置与编排工具:
阿里云资源编排服务ROS(ResouRce ORchestRation SeRvice)
这是云原生编排工具,通过编写 JSON/YAML 格式的模板,在模板中定义所需的ECS实例、数据库实例等云服务资源以及资源依赖关系等,然后再根据模板在 ROS 中创建资源栈,ROS 服务端将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。而资源栈则管理着模板中定义的所有资源,并可通过新模板来更新资源栈,包括资源的新增、更新或删除等操作。
AWS CloudFoRMation
这也是云原生的编排工具,运维人员也是通过 JSON/YAML 格式的模板定义云服务资源,通过资源栈管理这些资源。
HasHiCoRp TeRRafoRM
这是一个开源的自动化编排工具。以配置文件为驱动,可以在文件中定义所要管理的组件,即基础设施资源,以此生成一个可执行的计划,通过执行这个计划来完成所定义组件的创建,增量式的变更和持续的管理。如果不可执行,会提示报错。TeRRafoRM 不仅可以管理IaaS层的资源,如计算实例、网络实例和存储实例等,也可以管理更上层的服务,如DNS 域名和解析记录、SaaS 应用的功能等。
PuluMi
与 TeRRafoRM 一样也是开源项目,但它与 TeRRafoRM 的重要区别在于:可以用熟悉的编程语言来编写声明式配置,而不需要额外学习云服务商特定的模板语言来写配置。
企业组织可以根据自身需求和业务部署模式选择适当的工具,更好地发挥基础设施即代码的作用。
总结
基础设施即代码是 DevOps 运动的关键部分。如果您将云计算视为解决由人工IT管理引起的许多问题的第一步,那么可以说基础设施即代码是下一个合乎逻辑的步骤。它充分发挥了云计算的潜力,并将开发人员和其他专业人员从执行容易出错的手动任务中解放出来。此外,它还可以在软件开发生命周期的所有阶段降低成本并提高效率。