Terraform & Pulumi & Crossplane 对比介绍

关于 IaC IaC 的历史 2000 年之后,随着 IT 技术发展,用户的需求越来越复杂,软件系统以及基础设施也变的越来越复杂。最早的运维都是手工式的,面临着几个问题: 交互式变更所引入的人的因素太大,导致了变更的不可控性 基础设施变化越来越快,手工操作成本高且效率低 交互式变更难以管控,且无法实现版本控制 IaC 就是在这个时期出现的想要解决这些问题的概念,维基百科定义的 IaC 指通过 machine-readable 的定义文件,而不是物理硬件配置或交互式配置工具来管理和配置计算机数据中心的过程。该过程管理的 IT 基础设施包括物理设备(如 Bare-metal 或 VM),以及相关的配置资源。定义文件可能在版本控制系统 VCS 中,文件中代码可能使用脚本或者声明式定义,但IaC 通常使用声明式方法管理基础设施。 IaC 有几个核心特征: 最终产物为 machine-readable 的文件,可以是脚本、声明式代码或者配置文件。 基于最终产物,可以利用 VCS(Git、SVN) 实现版本管理。 利用 CI/CD 系统(如 Jenkins、GitLab CI)实现持续集成/持续交付。 基于同样的定义文件,最终表现出来的行为是一致且幂等的。 这个时期出现了一些 IaC 工具,典型的如 Puppet、Chef、Ansible,实际上这些工具,可能设计上各有所取舍(比如 Pull/Push 模型的取舍),但是其核心的特征不会变化: 框架内部提供了常见的比如 SSH 链接管理,多机并行执行,auto retry 等功能。 基于上面描述的这一套基础功能,提供了一套 DSL 封装。让开发者更专注于 IaC 的逻辑,而非基础层面的细节。 其开源开放,并形成了一套完善的插件机制。社区可以基于这一套提供更丰富的生态。比如 SDN 社区基于 Ansible 提供了各种交换机的 playbook;Ansible 官方提供的 AWS playbook 等。 云上资源编排 2006 年 8 月 Amazon 正式发布了 EC2 服务,从这时整个基础设施开始快步向 Cloud 时代迈进。截止目前,各家云厂商提供了各种各样的服务,经过十多年的演进,诞生出了诸如 IaaS,PaaS,DaaS,FaaS 等等各种各样的服务模式。这些服务模式,让我们的基础设施的构建,变得更加的简单,更加的快速。但是这些服务模式,也带来了一些问题:...

2023-06-11 · 6 min · 1249 words · zhenran