IT基础设施管理与IaC

基本概念

IT基础设施

IT基础设施一般我们更多指的是偏向底层硬件一类的资源,例如物理机、虚拟机、网络、存储等。

IaC与IT基础设施管理

Iac即Infrastrucutre as code(基础设施即服务)。它是一种将基础设施的定义和管理视为软件开发的过程,通过编写代码来自动化构建、配置和管理基础设施。

在Iac的概念提出以前,其实就已经有IT基础设施管理工具了,例如ansible,后来随着terraform的出现IaC的概念越来越深入人心,当前也被普遍认为是一条正确的道路。

核心理念

将计算机基础架构部署和管理视为开发软件的过程的方法[2]。核心是把基础设施管理、运维和部署都代码化了,带来的好处包括:

  • 配置复用
  • 自动化、标准化
  • 配置与底层环境分离

作为程序员,应该时刻培养自己代码化的思想,频繁的手动操作、非自动化的都应该考虑代码化。

如何达成IaC

IaC的工具比较多,例如terraform、ansible等。这些框架都可以帮助我们实现IaC,他们包含的核心能力包括:

  • 通过声明式的配置(代码)来定义基础设施:采用声明式的配置文件描述,你可以在配置文件中定义最终状态(end state),例如:我需要5台阿里云的4c8g120g规格的ECS。通过这种持久化的配置(代码)来定义的基础设施具备很好的复用性、可扩展性。配合执行引擎来执行的时候也会更加自动化和准确。
  • 状态管理与执行引擎:通过一个执行引擎配合定义的infra配置和状态信息来执行动作,确保infra按照配置保持到指定的状态。

相关IaC工具

terraform

是IaC软件的代表了,以下PPT来自[1]。可以看到基本模式是:

  • 提供声明式的config输入
  • 核心执行模块会根据状态信息构建执行计划,直到满足最终状态
  • 最终状态的生效目标是providers,他们可以是IaaS、PaaS甚至是SaaS。
  • 下面第三幅图则演示了核心模块的工作流程:
    • query: 查询状态
    • plan:构建执行计划,这提供了编排的能力
    • apply/destroy: 计划执行以及资源清理

image.png

其他IaC工具

IaC的工具比较多,关于其他工具需要了解的会可以看看[5]

引入IaC后的DevOps流程

IaC的关键是把原本的这些运维、infra定义执行都给代码化了,所以devops的流程本质上变成了代码上的修改。这个过程描述起来参考如下[5]:
image.png

有k8s了还需要IaC么

有些同学可能会认为,已经有k8s屏蔽Iaas层差异了,并且k8s也提供了强大的资源管理能力了,还需要IaC软件么?

其实k8s与IaC并不冲突,我们不要将他们的核心价值弄混了。很多时候我们是可以将k8s与IaC软件结合起来一起使用的。k8s侧重在对运行时资源的管理,但是k8s中的资源如果不引入IaC仍然会涉及很多手动配置与变更。将IaC软件和k8s结合起来使用,可以通过代码化的方式来管理k8s上的资源,降低k8s环境部署、变更的复杂度,更加自动化,对整个k8s基础设施变动的观测性也会更好。

参考资料