乐趣区

关于运维自动化:Terraform-系列什么是-IaC

系列文章

👉 Terraform 系列文章

前言

聊到 Terraform, 必然绕不开 IaC 这个概念?那么,什么是 IaC? 🤔

基本概念

基础架构即代码 (Infrastructure as Code, IaC) 是指通过 代码 而不是手动流程 / 控制台点击来治理和配置基础架构。

这里有 2 个关键词:

  • Infrastructure
  • Code

Infrastructure 是被治理对象,在这里,次要是指私有云(还有公有云、混合云等).
Code 是治理形式,即像治理代码一样治理私有云资源。那么治理代码最重要的局部:版本治理是绕不开的。

应用 IaC,创立的配置文件蕴含了基础设施的 spec,这使得编辑和散发配置变得更加容易。IaC 还确保每次都提供雷同的环境、雷同的资源、雷同的配置。通过编辑和记录配置的 spec,IaC 有助于防止未记录的、长期的配置更改(当然,前提是所有人都应用 IaC,而不是还会有人在控制台点击批改导致配置漂移)。

版本控制 是 IaC 的重要组成部分,配置文件应该像任何其他软件源代码文件一样受到源代码管制。
另外,随着私有云的倒退,私有云的标准化的 API 也使得将基础架构组件模块化 (Terraform 里叫做 modules) 成为可能,使用者能够像搭积木一样组合这些根底的组件。比方:在 AWS 上建个动态博客,就能够组合以下组件:

  • Route53
  • CloudFront
  • S3

IaC 的两种实现形式

有两种实现 IaC 的办法:申明式 命令式

申明式办法定义了零碎的现实状态,包含须要的资源以及它们应该具备的任何属性,IaC 工具将主动配置它。

Terraform 就是基于 IaC 申明式的理念。在 Terraform 风行之前,另一个将申明式发扬光大的当然是:Kubernetes!

申明式办法还保留零碎对象以后状态的列表,这使得拆除基础架构更易于治理。

相同,命令式办法定义了实现所需配置所需的特定命令,而后须要以正确的程序执行这些命令。

典型的就是 Ansible.

IaC 工具通常可能在两种办法中运行,但往往更喜爱一种办法而不是另一种办法。

如 Terraform, 它更喜爱申明式的办法,然而它的 Provider、Modules、函数中依然残留不少命令式的办法,如:local-exec

IaC 的益处

IaC(特地是申明式的)是随着私有云而倒退起来的。

置备基础设施从来是一个耗时且老本昂扬的手动过程。当初基础设施治理曾经从数据中心的物理硬件、虚拟化转移到容器和云计算。

借助云计算,基础设施组件的数量一直减少,每天都有更多的应用程序公布到生产环境中,并且基础设施须要可能频繁地启动、扩大和敞开。如果没有适当的 IaC 实际,治理当今基础设施的规模会变得越来越艰难。

IaC 能够帮忙您的组织治理 IT 基础设施需要,同时进步一致性并缩小谬误和手动配置。

这,就是 IaC 的必要性。

益处

  • 降低成本
  • 进步部署速度
  • 缩小(手动配置)谬误
  • 进步基础设施一致性
  • 打消配置漂移

Terraform 是 IaC 畛域事实上的领导者

毋庸置疑的,Terraform 是 IaC 畛域事实上的领导者。

所有支流私有云,公有云,虚拟化,K8s, 容器都有在保护对应的 Terraform Provider 和 Modules.

IaC 工具

IaC 工具有哪些?目前支流的有:

申明式:

  • Terraform
  • AWS CloudFormation(🐾: 绑定 AWS)
  • Pulumi
  • CrossPlane

命令式:

  • Puppet
  • Chef
  • Ansible
  • SaltStack

为什么近期风行的都是申明式的 IaC?

我感觉次要有以下起因:

  1. Kubernetes 的标杆作用
  2. 私有云云资源以及 API 的标准化、规模化
  3. 具体到云主机,cloud-init、packer(制作云镜像越来越不便)、不可变基础设施也是起因之一。

为什么 IaC 对 DevOps 很重要?

IaC 是施行 DevOps 实际和 CI/CD 的重要组成部分。DevOps 和 CI/CD 次要是利用和组件层面的,而 IaC 打消了开发人员的大部分配置工作,开发人员能够执行脚本让他们的基础设施准备就绪。

这样一来,应用程序部署就不会因期待基础架构而进行,系统管理员也不须要治理耗时的手动流程。那么整个开发部署迭代的流程就会越来越快,越来越快。..

IaC 帮忙您协调开发和运维,因为两个团队能够在代码仓库中看到基础架构全貌。

而且每个环境都能够应用雷同的部署过程。环境一致性也有保障,开发上测试通过的,生产上出问题的概率也小。

DevOps 最佳实际也实用于 IaC 中的基础架构。基础设施能够通过与应用程序在软件开发期间雷同的 CI/CD 管道,对基础设施代码利用雷同的测试和版本控制。将 IaC 的 modules 代码也引入 DevOps 理念,疾速测试,疾速迭代。

总结

IaC 是什么?基础架构即代码 (Infrastructure as Code, IaC) 是指通过 代码 而不是手动流程 / 控制台点击来治理和配置基础架构。

IaC 有申明式和命令式两种实现形式,当初更支流的是申明式的。

为什么须要 IaC? 随着云计算带来的大量基础设施,IaC 已成必备工具。

IaC 也能够和 DevOps 流程 / 理念相符合。

参考资料

  • 什么是 Terraform 的基础设施即代码?
  • What is Infrastructure as Code (IaC)? | RedHat
退出移动版