Helm 简介
深入了解 Helm,包括其用途和主要组件。
简介
当我们使用任何命令(如 yum、apt-get 或 brew)安装新软件时,CLI 会下载一个包。这个包包含了安装所需软件所需的一切内容。Kubernetes 也有类似的包管理器,它允许我们对应用程序执行以下操作:
- 标准化
- 简化
- 实现可复用的部署策略
什么是 Helm?
简单来说,Helm 是 Kubernetes 的包管理器。
- 它是一个开源项目。
- 最初由 DeisLabs 创建,后捐赠给云原生计算基金会(CNCF),目前由 CNCF 维护。
- 它提升了 YAML 清单文件的管理效率。
- 它将应用程序的所有资源和部署信息整合为一个统一的部署包。
为什么我们需要 Helm?
让我们探讨一些 Helm 能够提供帮助的实际场景。
环境差异问题
微服务可以轻松通过 Kubernetes 部署。然而,系统中运行的服务数量常常不断增加。这些服务分布在不同阶段,有的仅在内部使用,有的在运行时需要,有的用于部署额外的数据库容器等。
在这种情况下,很难快速明确每个环境中应该运行哪些组件。同时,也难以清晰定义服务之间的依赖关系。Helm 正是为了应对这些问题而设计的。
开发者生产力受限
通常,开发者需要花费大量时间来搭建测试环境以测试代码或复现客户问题。Helm 让开发者能够专注于应用开发,而不是重复地部署开发测试环境。
Helm 图表使开发者能快速获得可用的数据库环境。此外,开发者还可以编写自己的图表,自动完成开发测试环境的部署流程。
Helm 的组成部分
Helm 包含四个核心组件,共同管理 Kubernetes 集群上的应用部署。
- Helm 客户端
- Helm 图表(Charts)
- Helm 发布版本(Releases)
- Helm 仓库(Repositories)
Helm 客户端
Helm 客户端 负责用户与 Kubernetes 集群之间的交互。它是一个安装在本地的二进制程序,负责创建并提交部署 Kubernetes 应用所需的清单文件。Helm 客户端支持所有主流操作系统,需安装在本地计算机上。
Helm 图表
Helm 图表 是一个包含将一组 Kubernetes 资源部署到集群所需信息的包。它包含了构建和部署清单文件所需的所有内容。
一个 Helm 图表由多个文件和目录组成,用于描述图表本身。其中部分文件是必需的,部分为可选。以下是一些关键文件和目录:
描述图表的文件与目录
| 文件/目录 | 说明 |
|---|---|
| Chart.yaml | 包含图表的基本信息。 |
| values.yaml | 图表的默认配置值。 |
| templates/ | 包含图表的部署模板文件。 |
| LICENSE | 图表的许可证信息。 |
| README.md | 使用图表的说明文档。 |
| values.schema.json | 用于规范 values.yaml 文件结构的模式文件。 |
| charts/ | 包含主图表所依赖的子图表。 |
| crds/ | 自定义资源定义(CRD)。 |
| templates/Notes.txt | 模板使用说明。 |
Helm 发布版本
- Helm 发布版本 是指通过某个图表部署的应用或应用组。
- 每次安装一个图表,就会在集群中创建一个新的应用实例。每个实例都有一个唯一的发布名称,便于与特定实例进行交互。
- 安装 Helm 图表时,Helm 库会创建一个发布版本来追踪此次安装。
- 同一个图表可以在同一集群中多次安装,从而生成多个独立的发布版本。
Helm 仓库
- Helm 仓库 是一个专用的 HTTP 服务器。
- 它用于存储 Helm 图表的相关信息。
- 该服务器提供一个描述图表的文件,定义了每个图表的下载地址。
- 它确保了 Helm 包的可发现性和可复用性。
Helm 项目维护着许多公共图表,同时也有众多第三方仓库可供复用图表。