基础架构即代码
基础架构即代码 (IaC) 如何管理复杂的基础架构
Ian Buchanan
首席解决方案工程师
了解基础架构即代码 (IaC) 非常重要,这是一种将 DevOps 软件开发的最佳实践应用到云基础架构资源管理的 IT 基础架构管理流程。
2000 年代中期硬件虚拟化的兴起为云基础架构托管带来了新机遇。云托管提供商开始提供对动态基础架构即服务 (IaaS) 平台的访问权限。随着这些平台的发展和开始提供更复杂的基础架构资产,传统系统管理角色的复杂性也在增加。快速配置和管理复杂的云基础架构的需求很快成为一项挑战。
CI/CD 的成功激发了基础架构即代码 (IaC) 或使用代码建模基础架构的想法。DevOps 证明了将代码提交到 Git 存储库,然后应用功能分支和拉取请求工作流程是多么高效。这些工作流程为软件开发带来的自动化有助于降低云系统管理的新复杂性。
免费试用 Compass
改善您的开发人员体验、为所有服务编制目录,并改善软件运行状况。
什么是基础架构即代码?
了解基础架构即代码是一种将 DevOps 软件开发的最佳实践应用到云基础架构资源管理的 IT 基础架构管理流程。适用的基础架构资源包括虚拟机、网络、负载平衡器、数据库和其他联网应用。
IaC 是一种配置管理形式,它将组织的基础架构资源编码为文本文件。然后,这些基础架构文件将提交到 Git 这样的版本控制系统。版本控制存储库支持功能分支和拉取请求工作流程,这是 CI/CD 的基础依赖关系。
云基础架构托管平台(特别是 IaaS 平台)的兴起使基础架构即代码成为可能。IaaS 允许通过远程 API 按需调配和申请云资源,远程 API 为提交到基础架构配置文件的属性设置模板。IaC 的自动化功能可以获取配置文件并针对远程 IaaS API 运行。
一旦团队将基础架构配置提交到版本控制中,他们就可以将 CI/CD 实践应用于基础架构更改。基础架构更新可以遵循 DevOps 工作流程。如果团队成员编辑了其中一个配置文本文件,则可以使用拉取请求和代码审查工作流程来审核和验证编辑的正确性。此外,支持 DevOps 的基础架构即代码系统将利用自动基础架构部署和回滚。
相关资料
基础设施即服务
查看解决方案
使用 Compass 改善您的开发人员体验
为什么基础架构即代码很重要?
IaC 的发展旨在帮助解决“环境漂移”问题。云应用在其发布生命周期的各个阶段通常具有单独的部署环境。拥有开发、暂存和生产环境很常见。这些环境由应用服务器、负载平衡器和数据库等网络资源组成。当这些不同环境之间的基础架构不同步时,就会发生环境漂移。
如果没有 IaC,基础架构管理可能是一个混乱而脆弱的过程。系统管理员手动连接到远程云提供商,并使用 API 或 Web 仪表板配置新的硬件和资源。此手动工作流程无法提供应用基础架构的整体视图。管理员可能会手动对一个环境进行更改,而忘记在另一个环境上进行操作。环境漂移就是这样发生的。
环境漂移成为昂贵的商业浪费。缺陷和失败的发生是因为团队针对暂存或开发环境进行构建,然后在部署时发现生产环境不同步,这导致对缺失的原因和缺失内容进行耗时的调查。
如果没有 IaC,手动基础架构管理将是一个缓慢的过程。如果由于环境漂移、流量高峰或其他问题而确定了所需的基础架构更改,则系统管理员可能需要一段未知的时间来做出反应和适应。这会导致停机和客户失望。有了 IaC,基础架构可以自动适应配置的变化,并通过自动缩放功能对流量峰值做出反应。
基础架构即代码为手动系统管理带来了更多的监督和可见性。将基础架构配置文件提交到中央版本控制存储库后,所有团队成员都可以查看和编辑基础架构数据。这实现了强大的审核功能。例如,如果您的团队接受了 PCI 合规性审计,则需要知道基础架构的特定部分是否在使用 SSL 加密。借助 IaC,您可以快速查看 SSL 是如何配置的,并执行代码以确保实时基础架构与配置文件匹配,从而确定是否已启用 SSL。版本控制提交历史记录还充当添加或删除版本控制提交历史记录时要查看的日志。
基础架构即代码如何运作?
要完全实现基础架构即代码,需要设置一些依赖关系。
远程访问托管或 IaaS 云托管平台
第一个也是最重要的依赖关系是远程访问托管。配置管理工具需要连接到远程主机并对其进行修改。如果远程基础架构是自行管理的,则您的团队需要确保配置管理工具具有访问权限。支持 IaaS 的云托管平台提供了 API,允许用户根据需要自动创建、删除和修改基础架构资源。配置管理工具也可以访问这些 API,以进一步自动执行这些任务。流行的 IaaS 平台的一些示例包括 Digital Ocean、Amazon AWS 和 Microsoft Azure。
配置管理平台
完成 IaC 的下一个要求是连接到 IaaS API 并自动执行常见任务的工具套件。团队可以创建一组脚本和工具。但是,这可能需要很大的工作量还有未来的维护,而且投资回报率可能很低。已经有许多开源配置管理平台可以解决这个问题,包括 Terraform、Ansible、Salt Stack 和 Chef。
版本控制系统
配置管理平台使用以 YAML 等标记语言编写的人和机器可读文本文件来声明要执行的任务和顺序。这些文本文件可以被视为应用代码文件,并存储在版本控制系统存储库中。存储库充当中心数据源,支持拉取请求和代码审查。最受欢迎的版本控制系统是 Git。
有了这些依赖关系,我们来假设一个开发人员想要向系统添加新应用服务的示例场景。此场景有助于演示 IaC 工作流程
- 开发人员在他们选择的配置管理平台 Terraform 中编辑 YAML 配置文本文件。编辑内容指定需要一台新的托管服务器。
- 开发人员将编辑内容提交到 Git 存储库中的功能分支。由于项目的 Git 存储库托管在 Bitbucket 上,因此开发人员会打开拉取请求。另一位团队成员审查了拉取请求,并意识到新的基础架构变更。团队成员批准拉取请求,然后开发人员将提交合并到存储库的主分支。
- 此时,需要配置平台来执行更新。更新可以由开发人员手动触发。因为该团队正在使用 Bitbucket,所以他们还可以访问 Bitbucket Pipelines,并且可以通过管道自动执行此步骤。
- 执行后,Terraform 将与团队的 IaaS 接口。Terraform 针对 IaaS API 执行一系列命令,使 IaaS 与预期的基础架构配置保持同步。
总结...
IaC 是一种高效的配置管理形式,专注于实现云 IT 基础架构管理自动化。IaC 到位后,它可用于实现项目基础架构变更的 CI/CD 自动化级别。IaC 针对基础架构变更的沟通和透明度提供了许多有益的见解。IaC 需要一系列依赖关系,例如托管平台和自动化工具,这些依赖关系可从现代托管公司广泛获得。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。