Helm 简介
很多人都使用过 Ubuntu 下的 ap-get 或者 CentOS 下的 yum, 这两者都是Linux 系统下的包管理工具。采用 apt-get/yum ,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。
这里可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于 kubernetes 的包管理器。每个包称为一个 Chart,一个 Chart 是一个目录(一般情况下会将目录进行打包压缩,形成 name-version.tgz 格式的单一文件,方便传输和存储)。
对于应用发布者而言,可以通过 Helm 打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
对于使用者而言,使用 Helm 后不用需要了解 Kubernetes 的 Yaml 语法并编写应用部署文件,可以通过 Helm 下载并在 kubernetes 上安装需要的应用。
除此以外,Helm 还提供了 kubernetes 上的软件部署,删除,升级,回滚应用的强大功能。
Helm 应用场景一:应用部署在多个区域
- 单独维护各个区域的 部署文件
- Configmap、secret 等资源如何与 deployment—起发布 和回滚
- ......
挑战
- 管理、编辑与更新大量的 K8s 配置文件
- 部署一个含有大量配置文件的复杂 K8s 应用
- 分享和复用 K8s 配置和应用
- 参数化配置模板支持多个环境
- 管理应用的发布:回滚、diff 和查看发布历史
- 控制一个部署周期中的某一些环节
- 发布后的验证
Helm 解决方案
- Helm 把 Kubernetes资源(比如 deployment、service或 ingress 等)打包到一个 chart 中,而 chart 被保存到 chart 仓 库。通过 chart 仓库可用来存储和分享 chart。
- Helm 使发布可配置,支持发布应用配置的版本管理,简化 了 Kubernetes 部署应用的版本控制、打包、发布、删除、 更新等操作
- chart 是描述相关的一组 Kubernetes 资源的文件集合。chart 通过创建为特定目录树的文件,将它们打包到版本化 的压缩包,然后进行部署。
- Chart.yaml 是必须的,它 记录了 chart 的一些信息: chart 版本和名字等
- templates 下是 kubernetes 资源的模板
- values.yaml 存放了模板中的变量的值
Helm 安装和使用
Helm 组件
Helm 采用客户端/服务器架构,有如下组件组成:
- Helm CLI 是 Helm 客户端,可以在本地执行
- Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管 理 Kubernetes 应用程序的生命周期
- Repository 是 Chart 仓库,Helm 客户端通过 HTTP 协议来 访问仓库中 Chart 的索引文件和压缩包——暂时不用安装
Helm 架构
Helm Client
- 本地 chart 开发
- 仓库管理
- 与 Tiller sever 交互
- 发送预安装的 chart
- 查询 release 信息
- 要求升级或卸载已存在的
Tiller Server
- 监听来⾃ Helm client 的请求
- 通过 chart 及其配置构建⼀次发布
- 安装 chart 到 Kubernetes 集群,并跟踪随后的发布
- 通过与 Kubernetes 交互升级或卸载 chart
简单的说,client 管理 charts,而 server 管理发布 release
Helm 客户端安装
- 客户端安装:到 Helm Release 下载二进制文件,根据使用 的操作系统不同下载不同的版本,这里以 Linux上v2.15.1 版本为例。解压后将可执行文件 helm 拷贝到 /usr/local/ bin 目录下即可,这样 Helm 客户端就在这台机器上安装完 成了。
- 使用 Helm 命令查看版本,会提示无法连接到服务端Tiller helm version
Helm 服务器端组件安装
- 前提:确保本地 kubectl 可以正常访问 kubernetes 的资源
- 在命令行中执行:helm init. Helm 默认会去 http://gcr.io 拉取 tiller的镜像,有时镜像拉不下来,
- 可以指定 tiller 的镜像:
helm init --tiller-image http://registry.cn-hangzhou.aliyuncs.com/softputer/tiller:v2.15.1
Helm服务器组件安装问题
如果在安装过程中遇到了一些其他问题,比如初始化的时 候出现了如下错误:
需要在节点上安装 socat 进行解决
安装完检查
Helm 服务端正常安装完成后,Tiller 默认被部署在 kubernetes 集群的kube-system命名空间下:
查看 helm 版本
创建 RBAC 授权文件
为 Tiller 创建一个 ServiceAccount,让他拥有执行权限,创建 rbac.yaml
部署 rbac
- 部署
- 指定 serviceaccount 给 tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
- helm ls
Helm 使用
- 创建一个 Chart
- Templates 下的 deploment.yaml 默认是一个 nginx 服务,可以通过修改 Values.yaml 文件中的 image tag,来修改需要部署的 nginx 的版本
Chart 安装部署
- 执行:helm install –-name hell-helm ./hello-helm部署和安装 chart.
- 查看 release helm ls
- 删除 release
helm del hello-helm
......