基础设施即代码(IaC)完全指南:自动化IT基础设施管理

基础设施即代码(IaC)是一种通过软件代码来定义和管理IT基础设施的实践方法,它能够自动化资源配置和部署过程,提高效率、一致性和安全性,是现代DevOps和云计算环境中的关键技术。

什么是基础设施即代码(IaC)?

基础设施即代码(IaC)是一种IT实践,将底层IT基础设施作为软件进行编码和管理。它使开发人员和运维团队能够自动管理、监控和配置资源,而不是手动配置硬件设备、操作系统、应用程序和服务。IaC也被称为可编程或软件定义的基础设施。

IaC的概念类似于编程脚本,后者可以自动化IT流程。然而,脚本主要用于自动化在多个服务器上重复多次的一系列静态步骤。IaC使用更高级的描述性语言来编码更通用和自适应的配置和部署过程。

例如,IT管理和配置工具Ansible包含的IaC功能可以安装MySQL服务器、验证其是否正常运行、创建用户帐户和密码、设置新数据库并删除不需要的数据库。

基于代码的基础设施自动化过程类似于软件设计实践,应用程序开发团队在其中开发声明性代码、控制代码版本、测试迭代并限制部署,直到软件获准投入生产。

基础设施即代码如何工作?

简单来说,IaC使用软件代码来配置和管理IT基础设施。通过使用代码定义所需的IT结果,组织可以提高基础设施的一致性、安全性、自动化和性能。

手动配置和配置服务器、存储、网络、操作系统、应用程序以及其他设备和服务(如数据库、负载均衡器和防火墙)需要大量时间和精力。人类可能需要数小时甚至数天的时间来为企业工作负载和数据提供合适的部署环境。人为错误可能渗入这种手动工作的许多方面,导致以下问题:

  • 结果不一致,没有两个环境是相同的
  • 设置和配置不正确时出现安全漏洞
  • 基础设施文档不完善或不存在时故障排除困难
  • 由安全和故障排除问题引起的合规性和业务连续性问理
  • 有问题的管理和变更控制

IaC将所有构建和部署所需IT环境的指令具体化为一个软件实体。开发人员和IT人员可以创建详细的指令来评估所需的步骤并衡量代码的结果。

基础设施代码提供可重现的结果,并且可以通过按一下按钮或响应特定条件来执行。它为配置和管理带来了高水平的自动化。

变更更易于管理,因为对基础设施代码的任何修改都会产生一个新版本,该版本有良好的文档记录,并且可以通过任何标准版本控制系统进行管理。如果由于变更而出现问题,可以通过运行先前已知良好的代码版本来纠正。这简化了故障排除,并提高了业务的合规性和安全性。

以下四种基本类型的IaC通常结合使用:

  • 脚本通常用于自动化简单的临时任务
  • 配置管理代码定义并自动化设备(如服务器)的安装和配置
  • 配置代码自动化设置整体基础设施,将环境的各个方面联系在一起
  • 容器代码依赖模板来定义包含部署和执行应用程序所需的库和依赖项的映像文件

IaC过程通常涉及以下三个步骤:

  1. 开发人员使用领域特定语言为所需的基础设施创建规范
  2. 规范文件被发送或暂存到服务器或存储库(如GitHub)或API
  3. IaC平台使用规范文件自动或按需创建和配置预期的基础设施

IaC方法:声明式与命令式

基础设施即代码工具使用声明式和命令式方法进行操作。

声明式方法

声明式编程方法概述了基础设施的所需预期状态,但没有明确列出达到该状态的步骤。它声明了一个预期目标,并允许底层IaC工具决定如何实现这些目标。一个众所周知的声明式编程语言是结构化查询语言(SQL)。Amazon Web Services(AWS)CloudFormation模板等是以声明式风格编写的基础设施即代码。

命令式方法

命令式编程方法定义了使基础设施达到所需状态的命令。它定义了实现所需结果的确切步骤及其顺序,并且不偏离这些步骤。面向对象的语言,如C++和Java,可以用于命令式编程。像Chef这样的工具可以根据需要以声明式或命令式方式使用。

在这两种方法中,IaC都在模板上配置,用户在模板中指定基础设施中每个服务器所需的资源。该模板用于验证系统是否正确配置或已适当设置。模板可以构建为一组资源层,例如在AWS CloudFormation中,它构成了一个堆栈。

IaC最佳实践

IaC涉及具有高度自动化的基础设施配置和基础设施管理。虽然没有通用的部署和使用IaC的方法,但许多最佳实践有助于简化这些部署。标准的IaC最佳实践包括以下内容:

  • 使用版本控制:通过软件配置和配置基础设施意味着IaC遵循许多软件开发最佳实践,例如强大的版本控制。组织应为IaC文件使用存储库、全面的版本控制以及强大的文档和记录保存,以跟踪谁访问了文件以及版本之间发生了哪些更改。
  • 不要共享密钥:IaC中涉及的许多配置元素需要密码或加密证书。这些通常在没有保护的情况下包含在IaC文件中,可能暴露敏感系统并危及安全。使用单独的密钥管理器以受保护的方式存储身份和访问管理详细信息。
  • 保持文件安全:IaC旨在拥抱与其他DevOps和敏捷软件设计相同的协作态度。然而,IaC文件可能包含知识产权、密钥或其他敏感内容。将它们与企业使用的其他源代码一样保持安全非常重要。
  • 测试和验证文件:IaC文件绝不应被视为理所当然。在发布到生产环境之前,应以测试其他软件的相同方式对它们进行测试和验证。这通常涉及使用持续集成/持续交付(CI/CD)、DevOps和敏捷技术。
  • 使用较小的文件:可以使用几个较小的IaC文件来执行特定任务,然后通过脚本或另一个IaC模板连接。使用大量较小的文件可以实现更好的模块化,并促进IaC文件的重用,而不是创建和维护一个单一的大型通用文件来完成所有工作。
  • 监控和纠正漂移:当正确实施并密切关注不变性时,IaC理想情况下不应允许配置漂移。然而,由于系统问题、故障排除和人为错误,漂移仍然可能发生。必须监控基础设施环境,将环境与IaC定义进行比较以发现漂移实例,并记录和纠正任何实例。
  • 使用代码作为单一事实来源:IaC应作为基础设施配置的参考点。将IaC代码视为单一事实来源应有助于确保环境之间的一致性,最小化依赖关系并减少可能手动发生的错误。
  • 专注于不可变基础设施:软件定义了基础设施。对于IaC,应使用不可变基础设施方法。一旦代码被配置和部署,就不应对基础设施进行更改。如果需要更改,应删除当前基础设施,并使用新版本的IaC文件部署新的基础设施。这可以防止任何配置漂移的机会。

不可变与可变基础设施

可变基础设施指的是在生产中更改组件,而整体服务或应用程序正常运行。不可变基础设施组装并设置组件和资源以创建完整的服务或应用程序。如果任何组件需要更改,它不会被更改或重新配置;它会在一个实例中全部更新并有效地重新部署。一个新的迭代被组装、测试、验证和启动,而旧的迭代被停用,其资源被释放以供重用。

不可变基础设施尤其受到云和微服务环境的青睐,这些环境具有高度可扩展性,并涉及许多相互依赖的组件和服务。任何为解决特定问题而进行的临时更新都可能导致配置漂移,随着更新迅速推送到生产环境而级联。重新发布不可变服务和组件集比修补和重新配置单个基础设施组件更有效。IaC强调使用不可变基础设施技术,尽管不变性不是IaC的先决条件。

基础设施即代码的优势与挑战

IaC有许多好处,从自动化效率到其与其他现代IT实践相结合的灵活性。其他IaC好处包括:

  • 速度和效率:自动化配置和管理比手动过程更快、更高效。这扩展到配置的资源和虚拟化、数据库、网络、用户帐户管理和其他绑定服务。IaC还可以包括通过添加或关闭环境以及在不
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计