Helm 是一个由 Deis(现为 Microsoft Azure 的一部分)和 Google 共同开发的开源项目,旨在成为 Kubernetes 的“包管理器”。它的设计灵感来自于 Homebrew(MacOS 的包管理器)和 apt(Ubuntu 的包管理器),旨在简化和自动化在 Kubernetes 上部署和管理应用程序的流程。
Kubernetes 生态系统中的一个主要挑战是应用的部署和管理的复杂性。部署应用程序到 Kubernetes 通常需要创建和管理一系列相关的 Kubernetes 资源,如 Pods、Services、Deployments 等,这既耗时又容易出错。
Helm 通过将一组相关的 Kubernetes 资源打包到一个 Chart 中,使得部署和管理变得更为简便。这种方法不仅简化了部署过程,还使开发人员和运维人员能够更有效地组织和管理应用程序。
Helm 最初由 Deis(现为 Microsoft Azure 的一部分)和 Google 共同开发,于 2015 年 11 月首次发布。随着时间的推移,Helm 逐渐发展成为一个独立的项目,并在 2016 年加入了 Cloud Native Computing Foundation(CNCF)作为孵化项目。通过不断的迭代和改进,Helm 已经成为 Kubernetes 社区中最受欢迎和广泛使用的工具之一。
Helm 的作用和重要性体现在以下几个方面:
简化部署流程:Helm 通过打包和管理 Kubernetes 资源,简化了应用程序的部署过程,减少了手动操作和配置的复杂性。
自动化管理:Helm 提供了一组命令和操作,可以自动化地管理 Chart 的安装、升级、回滚等过程,提高了部署效率和可靠性。
组织和共享:Helm 允许开发人员和运维人员将应用程序打包成 Chart,并通过 Chart Repository 进行共享和组织,方便了应用程序的管理和分发。
Helm 在 Kubernetes 生态系统中扮演着重要的角色,为用户提供了一种简单、高效的方式来部署和管理应用程序,推动了 Kubernetes 的广泛应用和发展
macOS: 在 macOS 上安装 Helm 可以通过 Homebrew 进行简单安装。首先,确保已经安装了 Homebrew,然后执行以下命令:
Linux: 在 Linux 上安装 Helm 可以通过官方脚本进行安装。执行以下命令:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
Windows: 在 Windows 上安装 Helm 可以从 Helm 的 GitHub 仓库下载最新版本的 Helm 安装程序并手动安装。
安装完成后,需要配置 Helm 以连接到 Kubernetes 集群。通常需要配置 kubeconfig 文件,以指定 Kubernetes API 的访问方式。可以通过以下命令配置 Helm:
其中,<context-name> 是 Kubernetes 集群的上下文名称。使用该命令将当前的 kubeconfig 文件与指定的集群上下文关联起来,从而使 Helm 能够正确连接到 Kubernetes 集群。

上面架构图使用的是Helm的v3版本,该版本没有了 tiller并并使用更加简单和灵活的架构,直接通过kubeconfig连接apiserver,简化安全模块,降低了用户的使用壁垒
Helm 的工作流程总结如下:
开发者首先创建并编辑 chart 配置
接着打包并发布到 Helm 的仓库
当管理员使用 helm 命令安装时, 相关的依赖会从仓库中下载
接着 Helm 会根据下载的配置部署资源到 kubernetes 中
Helm 主要有三个基本概念:
Chart:一个 Helm 包。它包含了运行 Kubernetes 应用所需的所有资源定义。
Config:与 chart 相关的配置信息。
Release:在 Kubernetes 集群中运行的 chart 的一个实例。
一个标准的 Chart 结构如下:
4个目录,10个文件
Helm Chart 中的每个文件和目录并了解其重要性。
.helmignore:这是一个隐藏文件,因此我们无法在图表结构中看到它。从目录内运行 ls -a 命令来检查它。它用于定义我们不想包含在 Helm Chart 中的所有文件。
Chart.yaml:包含图表的基本信息。
Charts:这是一个空目录。我们可以在此处添加主图表所依赖的任何图表结构。
templates:这是一个包含构建应用程序的所有 Kubernetes 清单文件的目录。默认情况下,helm 创建了deployment.yaml、service.yaml、hpa.yaml、ingress.yaml、serviceaccount.yaml清单文件。我们可以根据需要修改和覆盖这些文件。我们甚至可以添加其他 Kubernetes 对象的清单文件。这些清单文件可以被模板化以访问values.yaml文件中的值。
templates/NOTES.txt:这是一个纯文本文件,在成功部署图表后打印出来。
templates/_helpers.tpl:该文件包含多个方法和子模板。它有助于保持我们的图表井井有条,并避免在多个地方重复相同的代码。
templates/tests/:我们可以在图表中定义测试,以验证图表在安装后是否按预期工作。
value.yaml:此文件包含模板目录中清单文件的值。例如镜像名称、副本数量、HPA值等。我们可以根据环境创建不同的values.yaml文件并更改值。
推荐学习资料:helm 官方文档
https://helm.sh/zh/docs/chart_template_guide/getting_started/
原文作者:五分钟学SRE;如有侵权,请联系管理员删除。