简介:
    image.png

    在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐,况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理

    Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成,通过动态生成 K8s 资源清单文件(deployment.yaml,service.yaml),然后调用 Kubectl 自动执行 K8s 资源部署

    Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装

    Helm 有两个重要的概念:Chart 和 Release

    • Chart :是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等,chart 是应用部署的自包含逻辑单元,可以将 chart 想象成 apt、yum 中的软件安装包
    • Release :是 chart 的运行实例,代表了一个正在运行的应用,当 chart 被安装到 Kubernetes 集群,就生成一个 release,chart 能够多次安装到同一个集群,每次安装都是一个 release

    组成部分及其关系:
    image.png

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

    • Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中,Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用,Tiller 还提供了 Release 的升级、删除、回滚等一系列功能(PS:最新的Helm3中,已经不需要部署这个了,但不影响理解)

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

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

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

    原理图:
    image.png

    Chart Install 过程:

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

    Chart Update 过程:

    • Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息
    • Helm 将需要更新的 Release 的名称、Chart 结构和 Values 信息传递给 Tiller
    • Tiller 生成 Release 并更新指定名称的 Release 的 History
    • Tiller 将 Release 发送给 Kubernetes 用于更新 Release

    Chart Rolllback 过程:

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

    相关文档:https://www.cnblogs.com/tylerzhou/p/11130137.html
    https://www.cnblogs.com/wuxinchun/p/15308687.html