什么是 IaC?
基础架构即代码(IaC)是通过代码(而非手动流程)来管理和置备基础架构的方法。
利用 IaC,我们可以创建包含基础架构规范的配置文件,从而便于编辑和分发配置。此外,它还可确保每次置备的环境都完全相同。通过将配置规范编写成代码并形成文档,IaC 有助于实现配置管理,并避免发生未记录的临时配置更改。
版本控制与自动化
版本控制是 IaC 的一个重要组成部分,配置文件应该像其他软件源代码文件一样纳入源代码管理。以基础架构即代码方式部署还意味着,您可以将基础架构划分为若干模块化组件,再通过自动化以不同的方式进行组合。
借助 IaC 实现基础架构置备的自动化,意味着开发人员无需再在每次开发或部署应用时手动置备和管理服务器、操作系统、存储及其他基础架构组件。将基础架构的配置和部署以代码形式定义下来,可供置备时有模板可循。尽管这些操作仍可手动完成,但也可以由红帽® Ansible® 自动化平台等自动化工具为您代劳。
IaC 的声明式方法与命令式方法
IaC 有两种实现方法:
声明式 IaC 方法会定义系统的预期状态,包括所需资源及其应具备的属性,然后由 IaC 工具为您进行相关配置。
声明式方法还会记录系统对象的当前状态列表,以便在移除基础架构时更易于管理。
命令式 IaC 方法则会定义实现预期配置所需的具体命令,而且这些命令需要按正确的顺序执行。
许多 IaC 工具都使用声明式方法,能够自动置备所需的基础架构。如果您更改了预期状态,声明式 IaC 工具会自动应用这些变更;而使用命令式工具时,则需要您自行决定如何应用这些更改。
IaC 工具可以同时支持这两种方法,但通常会更倾向于采用其中一种。
红帽资源
IaC 策略的优势
置备基础架构历来是一个耗时且成本高昂的手动过程。随着虚拟化、容器和云计算的普及,基础架构管理已逐渐脱离数据中心的物理硬件。这种转变带来了诸多益处,但也引发了新的挑战。
在云计算环境下,基础架构组件的数量不断增加,每天都有更多应用发布到生产环境中,而且基础架构本身也要频繁地启动、扩展和移除。如果没有相应的 IaC 实践,那么管理现今这样大规模的基础架构会变得越来越困难。
IaC 可以帮助您管理 IT 基础架构需求,同时提高一致性并减少错误和手动配置。
采用基础架构即代码的优势:
- 降低成本
- 加快部署速度
- 减少错误
- 提高基础架构的一致性
- 消除配置偏移
将 IaC 策略扩展到 Day 2 运维
在 IaC 策略基础上,企业组织开始使用这些实践在运维生命周期的每个阶段实现 IT 流程的自动化。
正如 IaC 将基础架构的构建、置备和部署标准化一样,IT 团队也可以采用运维即代码(OaC)将系统部署之后的管理和维护任务编写成代码。此外,还可以将这种方法扩展到策略即代码(PaC),以自动执行应用和解决方案的治理、风险和合规性流程。
利用从实现 IaC 自动化中获得的经验,IT 团队可以使用相同的方法和工具,在 Day 2 运维中采取更高效、适应性更强的方法。
IaC 的用例和示例
基础架构即代码已成为现代 IT 运维和 DevOps 的基石,在各个行业拥有广泛的实际应用。IaC 的主要用例和示例包括:
- 自动化 Web 应用部署:IaC 最常见且影响深远的用例之一,就是定义和置备 Web 应用所需的全部组件,包括虚拟机、数据库、负载均衡器、防火墙和网络配置。
- 云部署:可以利用 IaC 来部署和管理单云或多云的完整云环境。借助 IaC,您可以对云基础架构进行编码,以确保资源分配精准、安全设置严谨且符合合规要求。这样您就可以轻松扩展云运维,同时严格遵守企业组织的标准。
- 持续集成/持续交付(CI/CD)管道:IaC 是实现软件开发生命周期自动化不可或缺的一部分。在 IaC 方法中,基础架构的变更将如同应用代码一样进行版本控制、测试,并作为 CI/CD 管道的一部分自动部署。开发人员可以在与生产环境一致的环境中测试代码,从而实现更快速、更可靠的部署。
- 灾难恢复和高可用性:IaC 可大幅提升灾难恢复能力。当我们将基础架构定义为代码并存放在版本控制系统中时,一旦发生灾难性故障,就可以快速且一致地在其他区域或云中重建整个环境。这可以缩短恢复时间目标(RTO)和停机时间,确保业务连续性。
- 混合云和多云环境:在混合云和多云环境中,IaC 能够以统一的方式管理不同的基础架构。IaC 工具可以让您在不同环境中一致地定义和管理资源,这不仅带来了灵活性,还能降低成本。
- 安全防护与合规自动化:IaC 直接将安全防护配置与合规规则嵌入基础架构定义中。因此,部署过程中会自动应用安全防护策略,如防火墙规则、身份访问和管理(IAM)角色以及加密设置,而无需依赖手动配置。
为何 IaC 对 DevOps 至关重要?
IaC 是实施 DevOps 实践和持续集成/持续交付(CI/CD)的一个重要组成部分。IaC 减少了开发人员的置备工作,他们只需执行脚本即可部署基础架构。 如此一来,基础架构就不会拖慢应用部署的进度,系统管理员也无需再处理耗时的手动流程。
CI/CD 离不开贯穿应用整个生命周期(从集成和测试阶段,到交付和部署)的持续自动化与实时监控。 要实现环境自动化,一致性是关键前提。如果开发团队与运维团队分别以不同方式部署应用或配置环境,自动化的应用部署将无法实现。
通过 DevOps 方法来协调开发和运维团队,可以减少错误、手动部署及不一致的情况。 IaC 有助于促进开发与运维团队的协同,因为两个团队可以基于同一应用部署描述开展工作,以支持 DevOps 方法。
为充分发挥 IaC 的作用,应对所有环境(包括生产环境)采用相同的部署流程。IaC 每次都会生成一致的环境,因此无需维护各自独立的部署环境。避免无法自动重现的独特配置,才能确保生产环境始终一致。
DevOps 最佳实践也同样适用于 IaC 中的基础架构。在软件开发期间,基础架构可采用与应用相同的 CI/CD 管道,因此可以对基础架构代码应用相同的测试和版本控制。
采用 IaC 策略的最佳实践和挑战
与大多数涉及文化变革的技术采用过程一样,成功实施 IaC 需要分阶段推进并设定明确目标。先从非关键组件或环境小范围尝试,让团队积累经验、建立信心,再逐步处理更复杂的系统。明确业务目标,例如降低成本或加快部署速度,便于团队在实施过程中衡量成效。
IaC 方法的最佳实践
采用 IaC 方法的一项基本最佳实践是,将基础架构视为应用代码来对待。这意味着要遵循以下最佳实践:
- 对所有内容使用版本控制。这样可以支持协作开发、跟踪变更,并便于回滚至之前的稳定状态。在版本控制中,最好采用分支策略(如功能分支)、同行代码审查(通过拉取请求进行)以及撰写描述性的提交信息。
- 实现基础架构模块化与可复用性。将基础架构拆分为最小的可复用组件。这有助于减少重复、提升可维护性,并便于在不同项目和环境中理解与管理。
- 自动执行测试。将所有 IaC 融入对应用代码进行的常规测试中,并集成至 CI/CD 管道,以确保基础架构的变更在部署前经过验证。
- 减少配置偏移。尽可能构建“不可变的基础架构”:不对现有服务器进行更改,而是使用更新后的配置来置备新服务器,并淘汰旧服务器。这可以显著减少配置偏移,并简化回滚流程。
- 为 IaC 变更定义明确的角色、职责与审批工作流。通过实施 PaC 来自动执行应用和解决方案的治理、风险和合规流程。
采用 IaC 面临的挑战
采用 IaC 可能会遇到一些常见及独特的挑战:
- 实现手动操作自动化可能比较复杂。对于习惯于手动操作的团队来说,掌握 IaC 工具和概念时可能需要经历一个学习适应期。这可能引发抵触情绪,进而导致采用速度减缓。从手动控制台交互转向代码操作,需要巨大的思维转变。
- 安全漏洞。硬编码的敏感信息、模板中过度宽松的 IAM 角色或基础镜像中的漏洞,都可能在基础架构中广泛传播,带来安全风险。
- 缺乏标准化。如果缺乏清晰的指导方针,团队可能会以不一致的方式实施 IaC,导致实践割裂、代码重复、维护困难。这通常表现为命名规则混乱、模块结构不统一或部署模式各异。
- 文化阻力。采用像 IaC 这样广泛的策略,要求企业组织打破固有习惯,培养“代码优先”的思维方式。这需要领导层的坚定支持、持续沟通其价值,并营造鼓励尝试与学习的文化。
- 调试复杂的管道。尽管 IaC 能减少错误,但一旦发生错误,调试的难度往往高于手动过程,尤其是对 IaC 经验不足的团队而言。
- 管理传统基础架构。将 IaC 与现有传统基础架构集成,通常需要逆向工程或逐步重构,过程复杂且耗时。
为什么选择红帽实现自动化?
通过制定企业级自动化方案,您不仅能让 IT 流程实现自动化,还能让技术、团队和企业组织实现全面自动化。
红帽 Ansible 自动化平台中包含了实现企业级自动化所需的各种工具,包括 playbook、可视化信息面板、事件驱动的解决方案和分析功能。它还使用 Webhook 来自动执行 IaC 工作流并支持 GitOps 实践。
用 YAML 编写的 Ansible Playbook 描述了系统的预期状态,其通常保留在源代码控制中。不管系统当前状态如何,Ansible 自动化平台都可使其进入预期状态。
Ansible 自动化平台使您的安装、升级和日常管理具有可重复性和可靠性。
订阅 Ansible 自动化平台后,您就可以更快速地部署新的应用和服务,更有效地管理 IT 基础架构,同时还可以提高应用开发效率。 您可以获得来自我们强大合作伙伴生态系统的认证内容、使用托管管理服务,以及享受生命周期技术支持,让您的团队能够在整个企业组织中创建、管理和扩展自动化。
红帽 Ansible 自动化平台的内置功能提供了一种一揽子的加速利器。我们有很多供应商和合作伙伴都用它来编写脚本以安装、配置和维护其技术,它已成了我们公认的标准工具。
红帽官方博客
获取有关我们的客户、合作伙伴和社区生态系统的最新信息。