现代应用程序在设计时考虑到了可扩展性、可靠性和多云兼容性。这些应用程序依赖于各种基础设施资源,而人工管理这些资源具有挑战性。基础设施即代码(IaC)技术的出现就是为了应对这一挑战。IaC 使开发人员能够在配置文件中定义应用程序所需的全部基础设施,根据配置文件,基础设施可以被自动配置和管理。Terraform 和 Crossplane 是提供 IaC 解决方案的两种流行工具。
Terraform?由 HashiCorp 公司开发,是一款开源 IaC 工具,可让用户使用配置文件以声明的方式定义和管理云计算和内部部署基础架构,这些配置文件可进行版本控制、重复使用和跨平台共享。
Crossplane?是一种现代控制平面,用于在 Kubernetes 集群中调配基础设施。Crossplane 基于 Kubernetes 构建,作为一种控制平面,它扩展了 Kubernetes 集群使用 Kubernetes 工具和 API 提供、协调和管理云基础设施资源的能力。
本文基于以下内容介绍了这两种工具之间的主要区别:
Terraform 的核心工作流程由三个阶段组成:
Terraform 架构
Terraform 的架构中有三个高级组件:
Terraform 支持 IaC 来管理特定项目中使用的基础设施的整个生命周期。IaC 借助声明性语言使基础设施的配置和管理变得更加容易,使其更加一致、可重复和可靠。通过使用配置文件,Terraform 还允许不同的开发人员处理同一个文件,从而使协作变得更加容易。
配置类型
Terraform 是一个声明性工具,也就是用户只需要定义基础设施的所需状态。无需一步步执行相同的操作,Terraform 将决定如何为用户实现该状态。
授权许可
今年8月,HashiCorp 宣布将 Terraform 的许可模式修改为 BSL v1.1,这意味着用户只能在非商业使用或有限商业使用的情况下,使用、修改、分发该项目的源代码,即除了书面批准的情况下,任何用户不能够通过 Terraform 获得商业利益。除了免费版本外,Terraform 还提供云版本和企业版本。
社区支持
Terraform 是一个成熟的开源项目,拥有一个活跃的社区,有许多愿意通过各种渠道提供支持的热心用户。例如,Terraform 社区在 HashiCorp 和 Reddit 上设有讨论论坛。Terraform 还拥有维护良好、内容全面、技术丰富的文档。此外,Terraform 的源代码托管在 GitHub 上,用户可以提出问题、创建拉取请求或为当前的功能开发做出贡献。
供应商支持
Terraform 可连接约 130 个不同供应商提供的不同资源和服务。Terraform 支持的供应商列表包括 AWS、微软 Azure 和谷歌云平台(GCP)等云提供商;VMware、OpenStack 和 Kubernetes 等基础设施平台;以及一些用于连接 Terraform 支持的不同提供商的第三方工具和库。
CI/CD 集成和自动化
Terraform 支持通过 CLI(社区版)、API 和 UI(云和企业版)进行完全操作,你可以轻松地将 Terraform 与现有的 CI/CD 流水线集成。只需使用 Git 等版本控制系统,将 Terraform 配置作为现有 CI/CD 流水线的一部分提交即可。不过,Terraform 仅作为命令行工具运行,只有在明确调用它时才会执行所需的基础架构状态与当前状态之间的调节。**因此,用户有责任监控基础架构是否存在任何不一致。**如果发现不一致,需要手动触发脚本,这可能是一项耗时且乏味的任务。
开发者体验
Terraform 是一款以开发人员为中心的工具,通过 HCL 使用声明式语言来定义和管理基础设施。如果你使用过任一编程语言,学习 HCL 对你来说都会很容易。使用 Terraform 后,可以将基础架构配置视为软件开发流程,促进协作、版本控制和自动化。
Crossplane 是一个控制平面,可将任何 Kubernetes 集群与外部非 Kubernetes 资源(如存储、网络和计算机)连接起来。当 Crossplane 安装在 Kubernetes 集群上时,用户无需担心外部资源。它使用自定义资源定义(CRD)[3] 将外部资源表示为本地 Kubernetes 对象,用户可以使用标准的 Kubernetes 命令。
Crossplane 架构
Crossplane 架构有四个不同的组件:
与 Terraform 不同,Crossplane 的主要目的是扩展 Kubernetes 声明式 API 和控制平面。这样就可以将外部基础设施和服务视为 Kubernetes 资源,实现基础设施即代码实践和 Kubernetes 原生体验。Crossplane 让开发人员能够利用 Kubernetes 的生态系统和工具,实现自助式基础设施配置、自动化和高效。
配置类型
与 Terraform 类似,Crossplane 也是声明式的。使用 Crossplane,你可以使用声明式代码或清单定义基础设施和服务的理想状态,然后 Crossplane 会尝试将理想状态映射到基础设施的当前状态。虽然它是声明式的,但在配置或管理特定资源或执行某些操作时,你可能需要与 Crossplane 的控制平面直接交互,例如,在创建复合资源或定义不同资源类别时。
授权许可
Crossplane 是根据 Apache License Version 2.0 发布的开源工具。不过,在使用 Crossplane 之前,最好还是阅读一下许可证的全部条款和条件。
社区支持
与 Terraform 相比,Crossplane 仍是一项新技术。其社区正在不断发展壮大,为项目开发提供支持和贡献,Crossplane 的源代码托管在 GitHub 上,实现更好的协作。除此之外,Crossplane 社区还有一个专门的 Slack 频道,用户可以在此参与讨论。Crossplane 还提供了良好的文档和入门教程。
供应商支持
Crossplane 支持各种云供应商和基础设施供应商。该项目允许用户跨各种云供应商和基础设施平台管理资源。一些知名供应商包括 AWS、Azure、GCP、和 VMware 等。
CI/CD 集成和自动化
与 Terraform 类似,Crossplane 也可以与 CI/CD 流水线集成。Crossplane 具有一组长期存在、始终在线的控制平面,可以持续观察应用程序的基础设施并进行必要的更改以实现基础设施的所需状态。各种 CI/CD 平台为 Kubernetes 提供插件和集成,使您可以更轻松地将 Crossplane 合并到现有工作流程中。无需手动调用 Crossplane,当需要时与 Argo CD 一起使用时,它会自动触发。
开发者体验
作为一种声明性工具,Crossplane 还提供了一种开发人员友好的体验,用于使用 Kubernetes 原生工具和服务来管理基础设施和服务。使用 Crossplane 时,您需要具备 Kubernetes 的具体知识才能配置 Kubernetes 集群来运行 Crossplane。您还需要了解供应商的基础设施和服务才能将其与 Crossplane 结合使用。由于 Crossplane Compositions,这个控制平面对于那些不太熟悉 Kubernetes 的人来说也更容易上手。
如果你不确定选择哪种工具,或者在两种工具中都发现了理想的功能,那么可以同时使用 Terraform 和 Crossplane。由于 Terraform 是控制平面的命令行界面(CLI),而 Kubernetes 提供了管理其控制平面的功能,因此可以在 Crossplane 的基础上使用 Terraform。
通过结合两者的优势,你可以利用 Terraform 广泛的?Provider?生态系统和强大的基础设施配置功能,以及 Crossplane 的声明式 Kubernetes 原生管理功能。将两者结合起来,可以带来基础设施配置灵活性、Kubernetes 本机资源管理、IaC 实践、多云和混合环境中的易用性以及自动化和持续交付改进等优势。
本文比较了 Terraform 和 Crossplane 这两种广泛使用的基础架构管理工具。虽然这两个工具都是声明式的,但 Terraform 是一个专用的 IaC 工具,而 Crossplane 则是一个控制平面。这两种工具都是免费提供的,但 Terraform 通过定价方案提供额外功能。在社区支持方面,Terraform 的社区比 Crossplane 更成熟。这两种工具都支持各种 Provider,可以无缝集成到 CI/CD 流水线中,而且功能全面,以开发人员为中心。这些工具还可以一起使用,以提高基础设施管理的灵活性。Terraform 和 Crossplane 之间的选择应基于您的具体项目要求、基础架构需求以及对工具、生态系统和社区支持的偏好。