简介:
在没使用 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
组成部分及其关系:
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
原理图:
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