Terraform vs Crossplane:谁的基础设施管理能力更胜一筹?

发布时间:2024年01月02日

现代应用程序在设计时考虑到了可扩展性、可靠性和多云兼容性。这些应用程序依赖于各种基础设施资源,而人工管理这些资源具有挑战性。基础设施即代码(IaC)技术的出现就是为了应对这一挑战。IaC 使开发人员能够在配置文件中定义应用程序所需的全部基础设施,根据配置文件,基础设施可以被自动配置和管理。Terraform 和 Crossplane 是提供 IaC 解决方案的两种流行工具。

Terraform?由 HashiCorp 公司开发,是一款开源 IaC 工具,可让用户使用配置文件以声明的方式定义和管理云计算和内部部署基础架构,这些配置文件可进行版本控制、重复使用和跨平台共享。

Crossplane?是一种现代控制平面,用于在 Kubernetes 集群中调配基础设施。Crossplane 基于 Kubernetes 构建,作为一种控制平面,它扩展了 Kubernetes 集群使用 Kubernetes 工具和 API 提供、协调和管理云基础设施资源的能力。

本文基于以下内容介绍了这两种工具之间的主要区别:

  • 核心功能
  • 架构
  • 配置类型
  • 许可
  • 社区支持
  • 供应商支持
  • CI/CD 集成和自动化
  • 开发者经验

01 Terraform

Terraform 的核心工作流程由三个阶段组成:

  • 编写:您将基础架构资源声明为用 HCL 编写的代码。这些资源可以来自多个供应商。例如,一个实际的例子可能涉及连接到 Amazon S3 bucket,为应用程序读取数据。
  • 计划:如上所述,Terraform 将所需的基础设施映射到基础设施的当前状态。然后,Terraform 会将基础设施的声明状态与当前状态进行比较,并创建执行计划来添加、删除或修改必要的资源。
  • 应用:如果该计划得到开发人员的批准,则将执行配置文件中指定的操作以实现所需的基础设施状态。

Terraform 架构

Terraform 的架构中有三个高级组件:

  • Terraform Core:Terraform Core 采用 Go 编程语言编写,是静态编译的二进制文件。Terraform CLI 是 Terraform 用户的主要界面,是由 Terraform Core 生成的编译二进制文件。Terraform Core 负责解析配置文件(包含基础架构配置)、执行规划、资源调配和资源状态管理。
  • Provider:Terraform 使用名为 Terraform Provider 的插件与云供应商、SaaS 提供商和其他 API 进行交互。Terraform Provider 包含连接到不同云提供商提供的特定服务所需的所有逻辑。在使用它们之前,您需要在 Terraform 配置中声明所需的提供程序,以便 Terraform 可以安装它们。您可以在 Terraform 中找到所有广泛使用的 Terraform Provider,例如 AWS、Azure 和 Google Cloud。
  • 状态文件:Terraform 需要一个状态文件来将物理资源映射到配置,以便有效控制和管理基础架构。该文件通常名为 *.tfstate,存储元数据、资源详细信息、当前状态和依赖关系。由于该文件中包含有关所管理基础架构的敏感信息,因此确保该文件的安全至关重要。

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 后,可以将基础架构配置视为软件开发流程,促进协作、版本控制和自动化。

02 Crossplane

Crossplane 是一个控制平面,可将任何 Kubernetes 集群与外部非 Kubernetes 资源(如存储、网络和计算机)连接起来。当 Crossplane 安装在 Kubernetes 集群上时,用户无需担心外部资源。它使用自定义资源定义(CRD)[3] 将外部资源表示为本地 Kubernetes 对象,用户可以使用标准的 Kubernetes 命令。

Crossplane 架构

Crossplane 架构有四个不同的组件:

  • Provider:Provider?是提供不同资源(例如存储、计算、DNS、网络等)的外部实体。一些主要的云提供商包括 AWS、Azure 和 GCP。这些提供程序不是集群的一部分,但 Crossplane 将它们与 Kubernetes 集群连接起来以使用它们的资源。
  • 托管资源:Provider?提供各种资源供应用程序使用。通过 Crossplane 创建和监控的资源被视为托管资源。Crossplane 将这种现实世界的基础设施引入控制平面,使其成为 Kubernetes API 的扩展。使用?Provider?的 CRD 创建唯一的托管资源。例如,Crossplane 使用 AWS?Provider?的 bucket CRD 在 Kubernetes 集群内创建一个连接到 AWS S3 bucket 的桶托管资源。
  • 复合资源:一组已配置的托管资源可创建一个复合资源。通过将各种资源、配置和策略组合在一起,可以创建一个独特的抽象或 API。然后,开发人员可以使用这种 API 自助访问基础设施。由于复合资源是群集范围内的,因此通常可供所有群集命名空间使用。
  • 声明:声明是用户与 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 的人来说也更容易上手。

03 Terraform 和 Crossplane 能否一起使用?

如果你不确定选择哪种工具,或者在两种工具中都发现了理想的功能,那么可以同时使用 Terraform 和 Crossplane。由于 Terraform 是控制平面的命令行界面(CLI),而 Kubernetes 提供了管理其控制平面的功能,因此可以在 Crossplane 的基础上使用 Terraform。

通过结合两者的优势,你可以利用 Terraform 广泛的?Provider?生态系统和强大的基础设施配置功能,以及 Crossplane 的声明式 Kubernetes 原生管理功能。将两者结合起来,可以带来基础设施配置灵活性、Kubernetes 本机资源管理、IaC 实践、多云和混合环境中的易用性以及自动化和持续交付改进等优势。

04 结论

本文比较了 Terraform 和 Crossplane 这两种广泛使用的基础架构管理工具。虽然这两个工具都是声明式的,但 Terraform 是一个专用的 IaC 工具,而 Crossplane 则是一个控制平面。这两种工具都是免费提供的,但 Terraform 通过定价方案提供额外功能。在社区支持方面,Terraform 的社区比 Crossplane 更成熟。这两种工具都支持各种 Provider,可以无缝集成到 CI/CD 流水线中,而且功能全面,以开发人员为中心。这些工具还可以一起使用,以提高基础设施管理的灵活性。Terraform 和 Crossplane 之间的选择应基于您的具体项目要求、基础架构需求以及对工具、生态系统和社区支持的偏好。

文章来源:https://blog.csdn.net/PE_community/article/details/135342549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。