功能
- 创建新的 chart
- chart 打包成 tgz 格式
- 上传 chart 到 chart 仓库或从仓库中下载 chart
- 在Kubernetes集群中安装或卸载 chart
- 管理用Helm安装的 chart 的发布周期
概念
Helm 有三个重要概念:
-
chart
:包含了创建Kubernetes的一个应用实例的必要信息 -
config
:包含了应用发布配置信息 -
release
:是一个 chart 及其配置的一个运行实例
Helm组件
Helm 有以下两个组成部分:Helm Client
是用户命令行工具,其主要负责如下:
- 本地
chart
开发 - 仓库管理
- List item
- 与
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
安装
我们可以在Helm Realese页面下载二进制文件,这里下载的v3.6.3
版本,解压后将可执行文件helm拷贝到/usr/local/bin
目录下即可,这样Helm客户端就在这台机器上安装完成了。
现在我们可以使用Helm命令查看版本了,会提示无法连接到服务端Tiller:
$ helm version
version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"clean", GoVersion:"go1.16.5"}
要安装 Helm
的服务端程序,我们需要使用到kubectl工具,所以先确保kubectl工具能够正常的访问 kubernetes 集群的apiserver
然后我们在命令行中执行初始化操作:
$ helm init
由于 Helm 默认会去gcr.io
拉取镜像,所以如果你当前执行的机器没有配置*的话可以实现下面的命令代替:
$ helm init --upgrade --tiller-image cnych/tiller:v2.10.0
$HELM_HOME has been configured at /root/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
如果一直卡住或者报 google api 之类的错误,可以使用下面的命令进行初始化:
$ helm init --upgrade --tiller-image cnych/tiller:v2.10.0 --stable-repo-url https://cnych.github.io/kube-charts-mirror/
这个命令会把默认的 google 的仓库地址替换成我同步的一个镜像地址。
如果在安装过程中遇到了一些其他问题,比如初始化的时候出现了如下错误:
E0125 14:03:19.093131 56246 portforward.go:331] an error occurred forwarding 55943 -> 44134: error forwarding port 44134 to pod d01941068c9dfea1c9e46127578994d1cf8bc34c971ff109dc6faa4c05043a6e, uid : unable to do port forwarding: socat not found.
2018/01/25 14:03:19 (0xc420476210) (0xc4203ae1e0) Stream removed, broadcasting: 3
2018/01/25 14:03:19 (0xc4203ae1e0) (3) Writing data frame
2018/01/25 14:03:19 (0xc420476210) (0xc4200c3900) Create stream
2018/01/25 14:03:19 (0xc420476210) (0xc4200c3900) Stream added, broadcasting: 5
Error: cannot connect to Tiller
解决方案:在节点上安装socat
可以解决
$ sudo yum install -y socat
Helm 服务端正常安装完成后,Tiller默认被部署在kubernetes集群的kube-system命名空间下:
$ kubectl get pod -n kube-system -l app=helm
NAME READY STATUS RESTARTS AGE
tiller-deploy-86b844d8c6-44fpq 1/1 Running 0 7m