Helm 核心概念与实践指南

全面解析 Helm 的三大核心概念(Chart/Repository/Release),详解 Kubernetes 应用打包与部署流程,包含安装指南和项目模板创建教程。

这篇文章已发布 429 天,部分内容可能已过时。如有疑问,可在评论区留言。

简介

image-20250114165558995

Helm 是一个强大的工具,帮助你管理 Kubernetes 应用程序。通过 Helm Charts,可以定义、安装和升级即使是最复杂的 Kubernetes 应用程序。

Helm Charts 易于创建、版本控制、共享和发布。这意味着你可以更高效地使用 Helm,避免手动复制粘贴配置文件的繁琐过程。

Helm 已成为 CNCF(云原生计算基金会)的毕业项目,并由 Helm 社区持续维护,确保其稳定性和持续发展。

  • 管理复杂性

​ Helm Charts 可以描述即使是最复杂的应用程序,提供可重复的应用安装流程,并作为应用配置的单一权威来源,确保一致性和可靠性。

  • 轻松更新

​ 使用 Helm,你可以通过原地升级和自定义钩子,轻松管理应用的更新过程,减少因更新带来的困扰。

  • 简单共享

​ Helm Charts 易于版本控制、共享,并且可以托管在公共或私有服务器上,方便团队协作和应用分发。

  • 回滚

​ 如果更新出现问题,使用 helm rollback 命令可以轻松回滚到之前的发布版本,确保应用的稳定运行。

Helm 的工作原理

结合以上概念,Helm 的工作流程可以这样理解:

  • 安装 Charts: Helm 将 Charts 安装到 Kubernetes 集群中,每次安装都会创建一个新的 Release。
  • 管理 Releases: 每个 Release 独立管理,允许同一个 Chart 被多次部署,满足不同的需求。
  • 查找 Charts: 通过搜索 Helm 的 Chart Repository,可以找到并获取新的 Charts 来部署。

整体图表示意:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
+---------------------+          +---------------------+
|    Chart Repository | <------> |        Helm         |
| (存放所有 Charts)    |          | (安装和管理 Charts)   |
+---------------------+          +---------+-----------+
                                         |
                                         v
                               +--------------------+
                               | Kubernetes Cluster |
                               | ------------------ |
                               | Release A          |
                               | Release B          |
                               | ...                |
                               +--------------------+

三个核心概念

Chart(图表)

Chart 是 Helm 的一个包。它包含了在 Kubernetes 集群中运行一个应用、工具或服务所需的所有资源定义。可以将其类比为 Kubernetes 版本的 Homebrew 配方、Apt 的 dpkg 或 Yum 的 RPM 文件。

图表示意:

1
2
3
4
5
6
7
8
+-----------------+
| Chart           |
| --------------- |
| Deployment.yaml |
| Service.yaml    |
| ConfigMap.yaml  |
| ...             |
+-----------------+

Helm 会按照一下顺序部署:

Namespace —> NetworkPolicy —> ResourceQuota —> LimitRange —> PodSecurityPolicy —> PodDisruptionBudget —> ServiceAccount —> Secret —> SecretList —> ConfigMap —> StorageClass —> PersistentVolume —> PersistentVolumeClaim —> CustomResourceDefinition —> ClusterRole —> ClusterRoleList —> ClusterRoleBinding —> ClusterRoleBindingList —> Role —> RoleList —> RoleBinding —> RoleBindingList —> Service —> DaemonSet —> Pod —> ReplicationController —> ReplicaSet —> Deployment —> HorizontalPodAutoscaler —> StatefulSet —> Job —> CronJob —> Ingress —> APIService

Repository(仓库)

Repository 是存放和共享 Charts 的地方。它类似于 Perl 的 CPAN 存档或 Fedora 的软件包数据库,但专门用于 Kubernetes 的包。

图表示意:

1
2
3
4
5
6
7
+---------------------+
| Chart Repository    |
| ------------------- |
| Chart A     Chart B |
| Chart C     Chart D |
| ...                 |
+---------------------+

Release(发布版本)

Release 是在 Kubernetes 集群中运行的 Chart 的一个实例。一个 Chart 通常可以在同一个集群中安装多次。每次安装都会创建一个新的 Release。例如,假设有一个 MySQL Chart。如果你希望在集群中运行两个数据库实例,可以安装该 Chart 两次,每次都会有自己独立的 Release 和 Release 名称。

图表示意:

1
2
3
4
5
6
7
+------------------+       +------------------+
| Release A 	   |       | Release B        |
|------------------|       |------------------|
| MySQL Chart      |       | MySQL Chart      |
| Release Name: A  |       | Release Name: B  |
| ...              |       | ...              |
+------------------+       +------------------+

安装

Every release of Helm provides binary releases for a variety of OSes. These binary versions can be manually downloaded and installed.

  1. Download your desired version
  2. Unpack it (tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
  3. Find the helm binary in the unpacked directory, and move it to its desired destination (mv linux-amd64/helm /usr/local/bin/helm)

创建项目模板

通过命令可以创建一个 Helm 项目模板。

1
helm create mychart

生成以下文件和目录:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
.
├── charts                          # 存放依赖的 Charts
├── Chart.yaml                      # 描述 Chart 的元数据
├── templates                       # 存放模板文件
│   ├── deployment.yaml             # 部署模板
│   ├── _helpers.tpl                # 辅助模板
│   ├── hpa.yaml                    # 水平 Pod 自动缩放模板
│   ├── ingress.yaml                # 入口模板
│   ├── NOTES.txt                   # 安装说明
│   ├── serviceaccount.yaml         # 服务账户模板
│   ├── service.yaml                # 服务模板
│   └── tests                       # 测试模板
│       └── test-connection.yaml    # 测试连接模板
└── values.yaml                     # 默认值,可以覆盖模板中的值

总结

Helm 通过 Charts、Repositories 和 Releases 三个核心概念,简化了在 Kubernetes 集群中应用、工具和服务的部署与管理。Charts 提供了应用的定义,Repositories 便于 Charts 的共享和分发,而 Releases 则负责在集群中具体运行和管理这些应用实例。

面朝大海,春暖花开。
使用 Hugo 构建
主题 StackJimmy 设计