00-Helm 简介

背景

当今的软件开发,随着云原生技术的普及,我们的工程应用进行微服务化和容器化的现象也变得越来越普遍。而Kubernetes几乎已经成了云原生服务编排绕不开的标准和技术。

假设我们需要在K8s中简单部署一个nginx,必要步骤如下:

  1. 创建或者编写deployment模板
  2. 启动nginx的pod
  3. 检查pod服务
  4. 创建service资源
  5. 启动service服务
  6. 检查service端口
  7. 访问nginx服务

实际生产中,微服务项目可能有十几个模块,若还需要进行安全访问和控制,那么需要创建诸如Role、ServiceAccount等资源。部署和版本升级时也往往需要修改或添加配置文件中的一些参数(例如:服务占用的CPU、内存、副本数、端口等),维护大量的yaml文件极不方便。

那么在CNCF的体系中是否存在这样的强力“工具”,能够简化我们部署安装过程呢?答案是存在的,Helm就是这样一款工具。

Helm 简介

Helm 作为CNCF的毕业项目。它的官方的定义是:Helm 是一个为K8s进行包管理的工具。

很多人都使用过 Ubuntu 下的 apt-get 或者 CentOS 下的 yum,这两者都是Linux系统下的包管理工具。使用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用,以简单的方式查找、安装、升级、卸载应用程序。

我们可以将Helm看作Kubernetes下的apt-get/yum。Helm 是 Deis 开发的一个用于kubernetes的包管理器。每个包称为一个Chart(也有可能是目录,一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。

  • 对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
  • 对于使用者而言,使用Helm后不用需要了解Kubernetes的 Yaml 语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。

除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。

简单理解:Helm将chart安装到Kubernetes中,为每个安装创建一个新的发布。要找到新的chart,你可以搜索Helm chart仓库。

Helm 组件及相关术语

Helm

Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

Tiller

Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。

Chart

Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

它包含在K8s集群内部运行应用程序,工具或服务所需的所有资源定义。可以类比成yum中的RPM。

Repoistory(仓库)

Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

Release(发布)

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。

需要注意的是:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例。

Helm工作原理

Chart Install 过程

  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
  3. Tiller根据Chart和Values生成一个Release
  4. Tiller将Release发送给Kubernetes用于生成Release

Chart Update 过程

  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
  3. Tiller生成Release并更新指定名称的Release的History
  4. Tiller将Release发送给Kubernetes用于更新Release

Chart Rollback 过程

  1. Helm将要回滚的Release的名称传递给Tiller
  2. Tiller根据Release的名称查找History
  3. Tiller从History中获取上一个Release
  4. Tiller将上一个Release发送给Kubernetes用于替换当前Release

Helm v3变化

2019年11月13日,Helm团队发布了Helm v3的第一个稳定版本

该版本主要变化如下

  • 架构变化

    • 最明显的变化是Tiller的删除
    • V3版本删除Tiller
    • relesase可以在不同命名空间重用

V3之前

image-20201118171523403

V3版本

image-20201118171956054

Reference


00-Helm 简介
https://flepeng.github.io/042-云原生-03-Helm-00-Helm-简介/
作者
Lepeng
发布于
2023年3月1日
许可协议