Helm 是 Kubernetes 的包管理工具,可以理解为 Kubernetes 的 "apt" 或 "yum"。它的主要功能是帮助管理 Kubernetes 集群中的应用程序,简化了应用程序的部署和维护过程。Helm 通过 Chart 文件打包和管理 Kubernetes 应用,类似于 Docker 中的镜像,Chart 描述了应用程序的资源需求和配置。

Helm 工作原理

基本概念

Helm 的三个基本概念

在 Helm 中,Release 代表一次应用的部署实例。每个 Release 都包含了一组与该应用相关的 Kubernetes 资源,比如 DeploymentServiceConfigMap 等。Release 并不是 Kubernetes 中的单独组件,而是 Helm 管理应用实例的概念,用于将多个 Kubernetes 资源统一在一起管理。

具体来说:

  1. Release 是 Helm 中的一个抽象概念,它把一个 Helm Chart 与一组特定的配置(values.yaml 文件)组合起来,以生成并管理应用实例。
  2. 每个 Release 在 Kubernetes 集群中会包含一组具体的资源(例如,DeploymentPodService 等),这些资源构成了应用实例。
  3. 命名空间隔离:在集群中,多个命名空间中可以有同名的 Release,每个 Release 管理自己命名空间中的应用实例,不会相互干扰。

工作原理

Helm 包括两个部分,helm 客户端和 tiller 服务端。

helm 客户端是一个命令行工具,负责管理 charts、repository 和 release。它通过 gPRC API(使用 kubectl port-forward 将 tiller 的端口映射到本地,然后再通过映射后的端口跟 tiller 通信)向 tiller 发送请求,并由 tiller 来管理对应的 Kubernetes 资源。

tiller 接收来自 helm 客户端的请求,并把相关资源的操作发送到 Kubernetes,负责管理(安装、查询、升级或删除等)和跟踪 Kubernetes 资源。为了方便管理,tiller 把 release 的相关信息保存在 kubernetes 的 ConfigMap 中。

Helm Charts

Helm 使用 Chart 来管理 Kubernetes manifest 文件。每个 chart 都至少包括