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—起发布 和回滚
  • ......

Kubernetes 包管理神器 helm_第1张图片

挑战

  • 管理、编辑与更新大量的 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 存放了模板中的变量的值

Kubernetes 包管理神器 helm_第2张图片

Helm 安装和使用

Helm 组件

Helm 采用客户端/服务器架构,有如下组件组成:

  • Helm CLI 是 Helm 客户端,可以在本地执行
  • Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管 理 Kubernetes 应用程序的生命周期
  • Repository 是 Chart 仓库,Helm 客户端通过 HTTP 协议来 访问仓库中 Chart 的索引文件和压缩包——暂时不用安装

Helm 架构

Kubernetes 包管理神器 helm_第3张图片

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 服务器组件安装问题

如果在安装过程中遇到了一些其他问题,比如初始化的时 候出现了如下错误:

Kubernetes 包管理神器 helm_第4张图片

需要在节点上安装 socat 进行解决
Kubernetes 包管理神器 helm

安装完检查

Helm 服务端正常安装完成后,Tiller 默认被部署在 kubernetes 集群的kube-system命名空间下:
Kubernetes 包管理神器 helm

查看 helm 版本
Kubernetes 包管理神器 helm

创建 RBAC 授权文件

为 Tiller 创建一个 ServiceAccount,让他拥有执行权限,创建 rbac.yaml
Kubernetes 包管理神器 helm_第5张图片

部署 rbac

  • 部署
    Kubernetes 包管理神器 helm
  • 指定 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 的版本

Kubernetes 包管理神器 helm_第6张图片

Chart 安装部署

  • 执行:helm install –-name hell-helm ./hello-helm部署和安装 chart.
  • 查看 release helm ls
  • 删除 release
  • helm del hello-helm
  • ......

Kubernetes 包管理神器 helm_第7张图片

看评论