ITPub博客

首页 > 数据库 > 数据库开发技术 > 从Terraform到Crossplane:管理越来越复杂的基础设施

从Terraform到Crossplane:管理越来越复杂的基础设施

原创 数据库开发技术 作者:云原生AI百宝箱 时间:2023-10-04 07:25:00 0 删除 编辑

点击上方蓝字 👆关注公众号,别让消息溜走

后台回复【加群】,与牛人互动不停


本文主要讨论了现代应用程序的可伸缩性、可靠性和多云兼容性,并介绍了基础设施即代码(IaC)技术,以解决管理复杂基础设施的挑战。文章提到了两个流行的IaC工具:Terraform和Crossplane。

  • • Terraform是一个开源的IaC工具,使用HashiCorp配置语言(HCL)来定义和管理基础设施。它有三个核心阶段:编写(定义基础设施代码)、计划(创建执行计划)和应用(执行计划以实现所需基础设施状态)。

  • • Crossplane是一个控制平面,将Kubernetes集群连接到外部资源,如存储、网络和计算。它使用自定义资源定义(CRD)来将外部资源表示为本地Kubernetes对象,实现了基础设施即代码的实践和Kubernetes本地体验。

文章还比较了这两个工具的核心功能、架构、配置类型、许可、社区支持、供应商支持、CI/CD集成和开发者体验,并提到了它们可以一起使用以增强基础设施管理的灵活性。最终,选择Terraform还是Crossplane应基于项目需求、基础设施需求以及对工具、生态系统和社区支持的偏好。

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

Terraform由HashiCorp开发,是一款开源 IaC 工具,可让你跨平台进行版本控制、重用和共享的配置文件以声明方式定义和管理云和本地基础设施。

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

虽然 Terraform 是使用最广泛的工具之一,但它也有一些限制,而 Crossplane 通常可以解决这些限制。企业平台团队在 Terraform 规模扩大后寻找替代方案时通常会发现 Crossplane。本文基于以下内容介绍了这两种工具之间的主要区别:

  • • 核心功能

  • • 产品架构

  • • 配置类型

  • • 许可

  • • 社区支持

  • • 供应商支持

  • • CI/CD 集成和自动化

  • • 开发者经验

Terraform

Terraform 允许团队使用配置文件管理整个基础设施,而无需考虑应用程序的供应商,从而简化了管理应用程序基础设施的过程。Terraform 使用称为HashiCorp 配置语言 (HCL) 的特定于域的语言 ( DSL) 来配置和管理基础设施。

Terraform 的核心工作流程包括三个阶段:

  • • 写入:你将基础设施资源声明为用 HCL 编写的代码。这些资源可以来自多个供应商。例如,一个实际示例可能涉及连接到Amazon S3 存储桶以读取应用程序的数据。

  • • 计划:如上所述,Terraform 将所需的基础设施映射到基础设施的当前状态。然后,Terraform 将基础设施的声明状态与当前状态进行比较,并创建执行计划来添加、删除或修改必要的资源。

  • • 应用:如果该计划得到开发人员的批准,则执行配置文件中指定的操作以实现所需的基础设施状态。

Terraform架构

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

  • • Terraform Core: Terraform Core 采用 Go 编程语言编写,是静态编译的二进制文件。Terraform CLI 是 Terraform 用户的主要界面,是由 Terraform Core 生成的编译二进制文件。Core负责解析配置文件(包含基础设施配置)、执行计划、资源配置和资源状态管理。

  • • 提供商:Terraform 使用名为Terraform Providers插件与云提供商、SaaS 提供商和其他 API 进行交互。Terraform Providers包含连接到不同云提供商提供的特定服务所需的所有逻辑。在使用它们之前,你需要在 Terraform 配置中声明所需的提供程序,以便 Terraform 可以安装它们。你可以在Terraform 注册表中找到所有广泛使用的 Terraform Providers,例如 AWS、Azure 和 Google Cloud 。

  • • 状态文件: Terraform 需要一个状态文件将物理资源映射到你的配置,使其能够有效地控制和管理基础设施。该文件通常名为*.tfstate,存储元数据、资源详细信息、当前状态和依赖项。由于该文件涉及托管基础设施的敏感信息,因此保证该文件的安全至关重要。

Terraform 支持基础设施即代码来管理特定项目中使用的基础设施的整个生命周期。IaC 借助声明性语言使基础设施的配置和管理变得更加容易,使其更加一致、可重复和可靠。通过使用配置文件,Terraform 还允许不同的开发人员处理同一个文件,从而使协作变得更加容易。

配置类型

Terraform 是一个声明性工具,这意味着你只需要定义基础设施的所需状态。你不需要执行相同的步骤;Terraform 将决定如何为你实现该状态。

要了解有关使用 HCL 配置基础架构的更多信息,你可以参考《DevOps — Infrastructure Provisioning Automation using Terraform》。

许可

Terraform 是根据Mozilla 公共许可证 2.0 版发布的开源工具,这意味着你可以使用、修改和分发该软件。你对软件所做的任何更改也需要遵守 Mozilla 公共许可证,并且必须可供其他人使用。

除了免费版本外,Terraform 还提供云版本和企业版本。有关这些 Terraform 版本的更多详细信息可以在此处找到。

社区支持

由于 Terraform 是一个成熟的开源项目,它拥有一个充满活力和活跃的社区,有愿意通过各种渠道提供支持的热心用户。例如,Terraform 社区在HashiCorp和Reddit上维护着讨论论坛。

Terraform 还拥有维护良好、全面且技术丰富的文档。此外,Terraform 的源代码托管在 GitHub 上,因此你可以提出问题、创建拉取请求或为当前的功能开发做出贡献。

供应商支持

Terraform 可以连接到大约130 个不同供应商提供的不同资源和服务。Terraform 支持的供应商列表包括 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP) 等云提供商;VMware、OpenStack、Kubernetes 等基础设施平台;以及一些第三方工具和库,用于连接Terraform 支持的不同提供商。

CI/CD 集成和自动化

Terraform 支持完全通过 CLI(针对社区版)、API 和 UI(针对云版和企业版)进行操作,这意味着你可以轻松地将 Terraform 与现有的CI/CD 管道集成。你只需要使用版本控制系统(例如 Git)并将 Terraform 配置提交为现有 CI/CD 管道的一部分。但是,Terraform 仅作为命令行工具运行,并且仅在显式调用时才执行所需基础设施状态与当前状态之间的协调。因此,你有责任监控基础设施是否存在任何不一致之处。如果发现不一致,你需要手动触发脚本,这可能是一项耗时且乏味的任务。

开发者经验

Terraform 是一款以开发人员为中心的工具,它通过 HCL 使用声明性语言来定义和管理基础设施。如果你使用任何编程语言,学习 HCL 对你来说都非常容易。使用 Terraform 后,你可以将基础设施配置视为软件开发过程,从而促进协作、版本控制和自动化。

Crossplane

Crossplane 是一个控制平面,可将任何 Kubernetes 集群连接到外部非 Kubernetes 资源,例如存储、网络和计算机。

当Crossplane安装在Kubernetes集群上时,用户无需担心外部资源,因为Crossplane会为他们做一切。它使用自定义资源定义(CRD) 将外部资源表示为本机 Kubernetes 对象,这使你能够使用标准 Kubernetes 命令。

Crossplane架构

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

  • • Providers: 提供商是提供不同资源(例如存储、计算、DNS、网络等)的外部实体。一些主要的云提供商包括 AWS、Azure 和 GCP。这些提供程序不是集群的一部分,但 Crossplane 将它们与 Kubernetes 集群连接起来以使用它们的资源。

  • • Managed resources: 提供商提供应用程序可以使用的各种资源。当通过 Crossplane 创建和监视资源时,它被视为托管资源。Crossplane 将这个现实世界的基础设施引入到控制平面中,使其可作为 Kubernetes API 的扩展。使用提供者的 CRD 创建唯一的托管资源。例如,Crossplane 在 Kubernetes 集群内构建存储桶托管资源,并使用 AWS 提供商的存储桶 CRD 连接到 Amazon S3 存储桶。

  • • Composite resources: 一组配置的托管资源创建复合资源。通过将各种资源、配置和策略组合在一起来创建独特的抽象或 API。然后,开发人员可以使用该 API 来自助访问基础设施。由于复合资源是集群范围的,因此它们通常可供所有集群命名空间使用。

  • • Claims: 声明是用户与 Crossplane 交互的方式。当用户需要为其应用程序提供基础设施时,他们会创建一个声明,然后 Crossplane 会为他们提供该基础设施。

Terraform 拥有 Kubernetes 提供程序来配置 Kubernetes 资源,并且本质上并不是以 Kubernetes 为中心,与 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 合并到现有工作流程中。与 Terraform 不同,你不需要手动调用 Crossplane。相反,当需要时与Argo CD一起使用时,它会自动触发。

开发者经验

作为一种声明性工具,Crossplane 还为使用 Kubernetes 原生工具和服务管理基础设施和服务提供了开发人员友好的体验。使用 Crossplane 时,你需要具备 Kubernetes 的具体知识才能配置 Kubernetes 集群来运行 Crossplane。你还需要了解供应商的基础设施和服务才能将其与 Crossplane 结合使用。得益于Crossplane Compositions,这个控制平面对于那些不太熟悉 Kubernetes 的人来说也更容易上手。

Crossplane 或 Terraform:哪一种最适合你?

正如你所看到的,Terraform 和 Crossplane 之间有一些相似之处。因此,为你的用例选择采用哪种可能会令人困惑。Terraform 是一种成熟且广泛采用的 IaC 工具,但它有一些局限性。随着组织的发展,平台团队经常寻求 Crossplane 等替代方案来克服这些限制。

以下是这些限制的一些示例以及 Crossplane 如何帮助解决这些限制:

  • • 资源漂移:在 Terraform 中,在不更新规范文件的情况下对基础设施资源进行的更改可能会导致不被注意的漂移,直到引入新的 Terraform 修改为止。然而,Crossplane 充当始终在线的控制平面,立即且持续地撤消在其维护的基础设施之外所做的任何更改。

  • • 协作:使用 Terraform 应用配置涉及一个阻塞过程,其中会向状态文件应用锁定,直到应用配置为止,从而导致潜在的延迟。此外,要修改某个基础设施,你还需要更新相关基础设施。相比之下,Crossplane 将每个基础设施部分视为独立的 API 端点,从而无需锁定条件即可实现同步独立更改。

  • • 复杂性增加: Terraform 适合管理有限数量的基础设施资源。然而,随着应用程序和基础设施需求的增长,管理 Terraform 本身就成为一种开销。Crossplane 通过熟悉的 Kubernetes 工具和服务减轻了这种复杂性,从而减少了现有设置的开销。

Terraform 和 Crossplane 可以一起使用吗?

如果你不确定选择哪个工具,或者你在两者中都找到了所需的功能,实际上可以同时使用 Terraform 和 Crossplane。由于 Terraform 充当控制平面上的命令行界面 (CLI),并且 Kubernetes 提供了管理其控制平面的功能,因此可以在 Crossplane 之上使用 Terraform。

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

结论

本文比较了两种广泛使用的基础设施管理工具 Terraform 和 Crossplane。虽然这两个工具都是声明性的,但 Terraform 是专用的 IaC 工具,而 Crossplane 则充当控制平面。这两种工具都是免费的,但 Terraform 提供了附加功能和定价方案。在社区支持方面,Terraform 相比 Crossplane 拥有更成熟的社区。这两种工具都为各种提供商提供支持,可以无缝集成到 CI/CD 管道中,并且功能全面且以开发人员为中心。你还了解了 Crossplane 如何轻松解决与 Terraform 相关的一些问题。

值得注意的是,这些工具还可以一起使用,以增强基础设施管理的灵活性。

最终,Terraform 和 Crossplane 之间的选择应基于你的特定项目要求、基础设施需求以及有关工具、生态系统和社区支持的偏好。


- END -




推荐阅读



原文作者:云原生AI百宝箱;如有侵权,请联系管理员删除。

下一篇: 把一片月光捡起
请登录后发表评论 登录
全部评论

注册时间:2023-06-25

  • 博文量
    70
  • 访问量
    34401