容器化的日益普及引发了对高效管理、调度和控制Kubernetes(K8s或kube)集群的需求。市场提供了各种与 K8s 环境交互的工具,但没有多少选项提供比 Helm 和 Terraform 更多的功能。
本文是Helm 和 Terraform 的正面比较。我们分析了这两种配置工具的优缺点,解释了它们在管理 K8s 设置方面的能力,并帮助您确定适合您的开发团队的选项。
Terraform:主要功能
Terraform 是一种开源基础架构即代码 (IaC)工具,允许团队管理和自动化基础架构、平台和服务。该工具通过代码帮助构建、更改和版本化基础架构,使工程师能够快速轻松地:
- 启动虚拟机和容器。
- 设置服务器。
- 创建安全方案和控制。
- 添加或删除用户并设置权限。
- 管理云资源。
- 安装和管理Docker 容器。
2017 年,Terraform 的创建者 Hashicorp 宣布发布其 Kubernetes 提供商。因此,该工具能够根据需要跨多个云提供商管理 K8s 集群。
在配置基础设施或管理 Kubernetes 时,Terraform 依赖于声明性语言。工程师不需要定义设置基础设施的每一步。相反,开发人员提供所需的设置最终状态,并且该工具计划如何配置环境。例如,您可以为 VM、K8s 集群、VPC 和特定防火墙编写一组参数,而无需提供配置说明。
声明性配置文件很有帮助,因为团队可以:
- 无需编辑说明即可轻松调整文件以适应基础架构更改。
- 保持文件干净和简短。
- 快速编辑设置。
- 只需查看配置文件即可了解当前配置。
一旦工程师请求配置,命令terraform plan会指示工具比较现有设置(或查看第 0 天不存在任何内容)并计划如何设置所需的基础设施。然后该terraform apply命令通过云提供商的 API启动资源。Terraform 是DevOps 团队的热门选择,因为工程师可以使用该工具快速启动和编辑CI/CD 管道中的环境。
Terraform 的主要特点
- 一个 Kubernetes 提供商,可以使用单个工具管理基础架构和部署。
- 使用声明性语言。
- 一种 IaC 方法,允许工程师像任何其他代码一样描述、处理和版本基础设施。
- 可以使用云提供商的 API 进行设置,以实现顺畅、有效和安全的配置。
- Terraform 适用于任何基于云的设置,无论是公共的、内部私有的、混合的还是多云的。
- 具有替换服务器而不是更改服务器的不可变基础架构(这种方法可以简化操作并减少错误、威胁和配置漂移)。
- 可以changesets自动应用于基础架构以节省资源并避免错误。
- 先进的漂移检测功能始终显示当前状态和所需状态之间的差异。
- 可插拔设计,因此团队可以自定义设置和添加功能。
- 该工具了解资源之间的关系,这有助于调度并将错误保持在最低限度。您还可以构建所有资源的图表。
Helm:主要功能
Helm是一个 Kubernetes 包管理器,非常适合将可重复的应用程序和服务部署到集群。该工具允许用户通过Helm Charts管理应用程序,简化了 K8s 环境的定义、安装和升级。Helm Charts是转换成 Kubernetes 清单文件的文件和模板包。图表是可重用的,并且可以包含基于 YAML 的模板:
- 不同的部署。
- 配置图。
- 服务。
此外,您可以将图表定义为依赖关系或嵌套图表以获得更大的灵活性。管理图表通过单个命令行界面 (CLI) 进行,该功能可简化操作。虽然大多数图表对公众开放,但公司经常编写自定义图表供内部使用。
Helm 有一个简单的架构,它由一个客户端和一个集群内的 Tiller 服务器组成:
- Helm Client为用户提供了一个 CLI 来使用 Helm Charts 并与 Tiller 服务器交互。客户端允许用户执行各种操作,例如安装、升级和回滚图表。
- Tiller Server在集群内部运行,并与 K8s API 服务器交互以安装、升级和删除 Kubernetes 资源。
Helm 有很多好处,包括:
- 在不同环境中部署和管理 K8s 清单。
- 将复杂的应用程序打包在一起。
- 一起回滚或升级多个对象。
- 快速更改设置参数。
- 使用单个命令部署到多个环境。
Helm 及其模板引擎非常适合依赖 K8s 资源的CI/CD 流程。工程师无需为每个微服务编辑文件,而是可以定义标准蓝图并使用占位符代替动态值。然后,团队可以使用一个命令创建图表并在不同集群上重新部署相同的应用程序。
Helm 的主要特点
- 使用 Helm Charts、可重复使用的模板来快速配置和管理 Kubernetes 资源。
- 简单的集群管理,可以轻松处理应用程序依赖项和部署实例。
- 安装在集群中的 Tiller 服务器允许用户直接与 Kubernetes API 交互。
- 使您能够跟踪后续版本。
- 一起回滚或升级多个对象的能力。
- 图表的简单升级和卸载过程。
- 允许用户管理私有云、公共云和混合云上的容器。
Terraform 和 Kubernetes:优点和缺点
Terraform 的 Kubernetes 提供商提供了许多好处,但与 Helm 相比,该功能还相对年轻。偶尔的错误和缺少某些功能会带来一些挑战。
Terraform 优点
- 您可以使用相同的工具和代码库进行基础架构和集群管理。
- 开发人员可以使用相同的语言来配置Kubernetes 架构并将应用程序部署到集群中。
- 您可以将资源调度程序设置为提供者。
- 有一个计划阶段,允许您在应用更改之前查看操作的结果。
- Terraform 的 Kubernetes 提供商得到了强大社区的支持。解决 K8s 问题通常只需要进行几次 Google 搜索。
- 已经熟悉 Terraform 的团队可以轻松快速地学习管理 Kubernetes 集群。
Terraform 缺点
- Terraform 的 Kubernetes 提供者仍然相对较新。
- 缺乏对 beta 对象的支持使得管理 K8s 集群内的应用程序和资源变得复杂。如果您正在使用 beta 资源(daemonset、statefulset等),那么采用 Terraform 可能具有挑战性。
- 如果多个模块具有基于提供程序的依赖关系,则难以管理。
- 不完全支持 Google Kubernetes Engine (GKE)。
- 没有在 K8s 集群内安装任何组件,因此没有对运行中的 Pod 进行实时管理。
有关 Terraform 和 Kubernetes 的更多信息以及它们之间的区别。
Helm 和 Kubernetes:优点和缺点
与 Terraform 一样,Helm 提供了一系列 K8s 优势,但该工具的 Kubernetes 功能已经很成熟。但是,公司也应该考虑使用 Helm 的一些负面影响。
头盔专家
- Helm 对 K8s 的支持成熟且功能丰富,因此采用该工具是一个顺利的过程。
- 一个广泛的预建存储库,其中包含适用于各种应用程序和服务的有用图表。
- 可重复使用的图表、就地升级和自定义更新挂钩简化了复杂应用程序的管理。
- Tiller 服务器在 K8s 集群内通过直接 API 调用运行。
- Tiller 允许您有效地管理运行时资源。
- 回滚简单且易于处理。
- 高级构造(流控制、管道等)支持灵活的部署模板。
- 允许您定义变量并在不同的环境和集群中部署应用程序。
- Helm Charts 的灵活性使团队能够在 Kubernetes 中标准化模板。
- 丰富的用户社区和来自行业巨头(微软、谷歌、Bitnami)的支持。
头盔缺点
- Helm 比 Terraform 管理起来更复杂,并且在 K8s 设置中成为一个相当大的责任。
- 对于没有使用 Helm 工具经验的团队来说,学习使用 Helm 可能会非常耗时。
- 团队需要为每个项目组成一个新的图像,以避免在执行命令时出现混乱。
- VM 容量对于容器可扩展性至关重要。
Helm vs Terraform:比较表
Helm 和 Terraform 有许多相似之处,因为这两个开源工具都允许工程师:
- 以代码的形式描述和维护 K8s 对象。
- 在各种级别和环境中使用和覆盖变量。
- 从多个来源(例如本地目录和 git 存储库)安装。
- 在运行任何东西之前设置空运行以查看操作的结果(Helm 有–dry-run 标志,而 Terraform 有 plan 子命令)。
- 访问精选的软件包列表。
- 向活跃的用户社区寻求帮助。
- 享受所有主要云提供商的支持。
虽然相似,但这两种工具的区别使它们更适合不同的用例。下表显示了 Terraform 和 Helm 之间的主要区别。
地形 | 舵 |
一个相对较新的 Kubernetes 供应商(但进步很快) | 具有久经考验的 K8s 功能的成熟工具 |
不在 Kubernetes 集群中安装任何东西 | 在集群内安装 Tiller 服务器并与 K8s API 连接 |
可以安装 Kubernetes 集群 | 无法安装 Kubernetes 集群 |
依靠模块实现模块化 | 依赖子图实现模块化 |
使用 JSON/HCL 文件格式来描述和维护 Kubernetes 对象 | 使用标准的 K8s 清单和 Go 模板来描述和维护 K8s 对象 |
缺乏对 beta 资源的支持使得在已经设置好的环境中切换到 Terraform 变得复杂 | 对 K8s 的支持更加成熟,因此采用该工具更加直接 |
运行时选项有限 | Tiller 在运行时提供了很多功能 |
支持环境变量 | 环境变量的有限选项 |
注册表中没有适用于 Kubernetes 的 Terraform 模块 | 稳定和孵化器图表提供了丰富的软件包 |
Kubernetes 提供者尚未处理自定义资源 | 可以管理自定义资源 |
复杂的回滚,但资源较少 | 回滚更容易,但需要更多资源。 |
Helm 和 Terraform:一起使用它们
Helm 和 Terraform 不是相互排斥的,您可以在同一个 K8s 设置中使用这两种工具。这两个平台都具有广泛的功能,因此工程师可以:
- 使用 Terraform 创建和管理 Helm 资源。
- 在 Terraform 中使用 Helm 部署与集群相关的应用程序。
- 使用 Terraform 将 Helm 图表部署到预配置的 Kubernetes 集群。
大多数依赖这两种工具的团队倾向于使用 Terraform 来处理 K8s 集群,并使用 Helm 来管理进入集群的资源。但是,同时使用这两个平台会使项目复杂化,因此在设置多工具环境之前,请考虑依赖一个平台。
Helm vs Terraform:K8s 工具链中的两个强大选项
Terraform 和 Helm 都是强大的工具,它们使 Kubernetes 管理更容易、更快、更可靠。但是,我们在上面强调的细微差别使每个平台更适合不同的用例,因此请选择更适合您的团队和项目的平台。