摘要
Helm
这个东西其实早有耳闻,但是一直没有用在生产环境,而且现在对这货的评价也是褒贬不一。正好最近需要再次部署一套测试环境,对于单体服务,部署一套测试环境我相信还是非常快的,但是对于微服务架构的应用,要部署一套新的环境,就有点折磨人了,微服务越多、你就会越绝望的。虽然我们线上和测试环境已经都迁移到了kubernetes
环境,但是每个微服务也得维护一套yaml
文件,而且每个环境下的配置文件也不太一样,部署一套新的环境成本是真的很高。如果我们能使用类似于yum
的工具来安装我们的应用的话是不是就很爽歪歪了啊?Helm
就相当于kubernetes
环境下的yum
包管理工具。
用途
做为 Kubernetes 的一个包管理工具,Helm
具有如下功能:
- 创建新的 chart
- chart 打包成 tgz 格式
- 上传 chart 到 chart 仓库或从仓库中下载 chart
- 在
Kubernetes
集群中安装或卸载 chart - 管理用
Helm
安装的 chart 的发布周期
重要概念
Helm 有三个重要概念:
- chart:包含了创建
Kubernetes
的一个应用实例的必要信息 - config:包含了应用发布配置信息
- release:是一个 chart 及其配置的一个运行实例
Helm组件
Helm 有以下两个组成部分:
Helm Client
是用户命令行工具,其主要负责如下:
- 本地 chart 开发
- 仓库管理
- 与 Tiller sever 交互
- 发送预安装的 chart
- 查询 release 信息
- 要求升级或卸载已存在的 release
Tiller Server
是一个部署在Kubernetes
集群内部的 server,其与 Helm client、Kubernetes API server 进行交互。Tiller server 主要负责如下:
- 监听来自 Helm client 的请求
- 通过 chart 及其配置构建一次发布
- 安装 chart 到
Kubernetes
集群,并跟踪随后的发布 - 通过与
Kubernetes
交互升级或卸载 chart - 简单的说,client 管理 charts,而 server 管理发布 release
架构
1 | Chart Install 过程: |
安装
我们可以在Helm Realese页面下载二进制文件,这里下载的2.14.1版本,解压后将可执行文件helm
拷贝到/usr/local/bin
目录下即可,这样Helm
客户端就在这台机器上安装完成了。
1 | helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts |
1 | [root@node1 helm]# helm version |
1 | 自Kubernetes 1.6版本开始,API Server启用了RBAC授权。而目前的Tiller部署没有定义授权的ServiceAccount,这会导致访问API Server时被拒绝。我们可以采用如下方法,明确为Tiller部署添加授权。 |
使用
我们现在了尝试创建一个 Chart:
1 | [root@node1 helm]# helm create hello-helm |
然后我们根据提示执行下面的命令:
1 | export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=hello-helm,app.kubernetes.io/instance=virulent-wolverine" -o jsonpath="{.items[0].metadata.name}") |
访问:
1 | [root@node1 ~]# curl 127.0.0.1:8080 |
查看release
:
1 | [root@node1 ~]# helm list |
打包chart
:
1 | helm package hello-helm |
删除:
1 | [root@node1 ~]# helm delete virulent-wolverine |
彻底删除:
1 | [root@node1 ~]# helm delete virulent-wolverine --purge |