Helm概念讲解

在继续学习之前,我们需要对Helm的一些概念复习一下。如果你还不是特殊熟悉 k8s中Helm的一些概念,ok,先不要跳下下一章,在这里留步一会吧。


Helm中的软件包(Chart)

Helm中的Chart是一个软件包,其实是一些文本文件,或者说一些配置,这些配置可以将一组 Kubernetes 资源安装到 Kubernetes 集群中。

Chart 主要包含 : - Chart.yaml 文件 - 模板 - 默认值(values.yaml) - 依赖关系。

chart最终看起来是一个压缩文件,如grafana-4.0.2.tgz就是一个chart软件包。


Chart可以使用什么压缩格式

一个 chart 压缩包是一个 tar 打包和 gzip 压缩(签名可选)的 chart。


Chart 依赖的 Subcharts

其实看标题就很容易理解,一个Chart 可能依赖于其他 chart。举例来说,一个web程序,可以依赖mysql,那么我们可以将mysql一起安装了,这样mysql就是web程序的依赖。

有两种方式可能会出现依赖性:

  1. 软依赖性:如果没有在集群中安装依赖的 chart,本chart 可能无法正常工作。Helm 不为这种情况提供工具。在这种情况下,依赖关系可以单独管理。
  2. 硬性依赖性:chart 可能包含(在其 charts/ 目录内)其所依赖的另一个 chart。在这种情况下,安装 chart 将安装它的所有依赖关系。在这种情况下,chart和其依赖chart会同时安装,同时卸载。

当一个 chart 打包(通过 helm package)时,它的所有硬依赖关系都与它一起打包。


Chart 的版本

根据 SemVer 2 spec 规范对 chart 进行版本控制。每个 chart 上都需要一个版本号。


Chart.yaml信息文件

有关 chart 的信息存储在名为 Chart.yaml 的特殊文件中。每个 chart 都必须有这个文件。


Helm(和 helm)的区别

Helm 是 Kubernetes 的软件包管理员。由于操作系统软件包管理器可以轻松在 OS 上安装工具,因此 Helm 可以轻松将应用程序和资源安装到 Kubernetes 群集中。

虽然 Helm 是该项目的名称,命令行客户端也被命名 helm。按照惯例,当谈到这个项目时,Helm 被大写。在谈到命令时时,helm是小写的。


Helm Home (HELM_HOME)

Helm 将信息存储在称为 helm home 的本地目录中 。默认情况下,这是在 $HOME/.helm 目录中。

该目录包含配置和缓存数据,并由 helm init 创建。


Release 已安装的程序

当安装 chart 时,Tiller(Helm 服务器)创建一个 Release 来跟踪该安装。

单个 chart 可以多次安装到同一个群集中,并创建许多不同的 release实例。例如,可以通过 helm install 以不同的 release 名称运行三次来安装三个 PostgreSQL 数据库实例。

所以release其实就是一个实例

(在 2.0.0-Alpha.1 之前,release 被称为 deployment,但这造成了与 Kubernetes Deployment 类型的混淆。)


Release 版本号

单个版本可以多次更新。顺序计数器用于在 release 更改时跟踪 release。通过 helm install 第一次安装后,release 版本的版本号为 1. 每次发布 release 升级或回滚时,版本号都会增加。


回滚到其他版本

Release 可以升级到更新 chart 或配置。但是,由于发布历史已存储,release 版本也可以回滚到以前的版本号。这是通过 helm rollback 命令完成的。

重要的是,回滚版本将获得新版本号。

Operation Release Number
install release 1
upgrade release 2
upgrade release 3
rollback 1 release 4(但运行与 release 1 相同的配置)

上表说明了如何在安装,升级和回滚都会增加版本号。


Tiller

Tiller 是和k8s沟通的组件,helm是客户端命令,Tiller是服务器端程序,helm发送命令到Tiller,然后Tiller操作k8s完成任务。


仓库 Repository(Repo,Chart Repository)

Helm chart 可以存储在专用的 HTTP 服务器上,称为 chart 存储库(存储库或库)。

chart 存储库服务器是一个简单的 HTTP 服务器,可以提供 index.yaml 描述一批 chart 的文件,并提供有关每个 chart 可从哪里下载的信息。(许多 chart 存储库同时保存 chart 以及 index.yaml 文件。)

Helm 客户端可以指向零个或多个 chart 存储库。默认情况下,Helm 客户端指向 stable 官方 Kubernetes chart 存储库。


Values(值文件,values.yaml)

Values 提供了一种用自己的信息覆盖模板默认值的方法。

Helm chart 是 “参数化” 的,这意味着 chart 开发人员可能会在安装时覆盖。例如,chart 可能会公开 username 允许为服务设置用户名的字段。

values可以在helm installhelm upgrade操作时设置,或通过values.yaml 文件设置。