kubernetes包管理工具Helm之 一.Helm安装
本文于2673天之前发表,文中内容可能已经过时。
Helm 致力于成为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为 Kubernetes 构建的应用,它包含几个基本概念:
Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件;
Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称;
Repository:用于发布和存储 Chart 的仓库
一、Helm 组件
Helm 采用客户端/服务器架构,有如下组件组成:
- Helm CLI 是 Helm 客户端,可以在本地执行;
- Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期
- Repository 是 Chart 仓库,Helm客户端通过HTTP协议来访问仓库中Chart的索引文件和压缩包
Helm工作原理:
Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。
Helm客户端:
Helm客户端是一个命令行工具,负责管理charts、reprepository和release。它通过gPRC API(使用kubectl port-forward将tiller的端口映射到本地,然后再通过映射后的端口跟tiller通信)向tiller发送请求,并由tiller来管理对应的Kubernetes资源。
Tiller服务端:
Tiller接收来自Helm客户端的请求,并把相关资源的操作发送到Kubernetes,负责管理(安装、查询、升级或删除等)和跟踪Kubernetes资源。为了方便管理,tiller把release的相关信息保存在kubernetes的ConfigMap中。
二、Helm 客户端安装
从官网下载最新版本的二进制安装包到本地:https://github.com/kubernetes/helm/releases
解压安装:
1 | # 解压压缩包 |
三、Helm 服务端安装
在 Kubernetes 中安装 Tiller 服务,可选镜像:registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1(阿里云)
1)先在 K8S 集群上每个节点安装 socat 软件,不然会报如下错误:
1 | E0522 22:22:15.492436 24409 portforward.go:331] an error occurred forwarding 38398 -> 44134: error forwarding port 44134 to pod dc6da4ab99ad9c497c0cef1776b9dd18e0a612d507e2746ed63d36ef40f30174, uid : unable to do port forwarding: socat not found. |
2)安装服务端(Tiller)
- 没有启用权限控制
当没有启用权限控制时,安装部署过程很简单,解压后直接执行helm init即可。
但是默认helm会去官方仓库下载服务端tiller镜像,地址为:gcr.io/kubernetes-helm/tiller:v2.9.1。
由于某种众所周知的原因,gcr.io这个仓库是无法使用的,这里我也通过阿里云容器服务,上传了一个镜像供大家使用。
只要在我们初始化的时候,指定使用的tiller镜像地址即可,如下:
1 | helm init --tiller-image registry.cn-hangzhou.aliyuncs.com/luhaoyuan/tiller:v2.9.1 |
- 启用RBAC权限控制
如果启用了权限控制,那就麻烦一点了,需要我们创建对应的serviceaccount,否则以下报错:
1 | list: failed to list: Get http://localhost:8080/api/v1/namespaces/kube-system/configmaps? |
执行helm ls的时候报下面这种错误提示:
1 | Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system" |
好了,我们开始安装并授予权限吧,依次执行以下命令:
1 | # 在kube-system命名空间中创建tiller账户 |
遇到错误
1 | failed to list: configmaps is forbidden: User “system:serviceaccount:kube-system:default” cannot list configmaps in the namespace “kube-system” |
执行以下命令创建 serviceaccount tiller 并且给它集群管理权限
1 | kubectl create serviceaccount --namespace kube-system tiller |
配置 Helm 的 Repository。这里我们使用了阿里云容器服务提供的 Charts 存储库。
1 | helm repo **add** incubator https://aliacs-app-catalog.oss-**cn**-hangzhou.aliyuncs.**com**/charts-incubator/ |
验证是否安装成功:
1 | # 最后验证一下,是否有报错,执行以下命令没报错则表示成功了 |
卸载 tiller卸载后(移除tiller相关svc,deploy以及/root/.helm目录),重新安装
1 | helm reset |
四、Helm 使用
1)更换仓库:
若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误
手动更换stable 存储库为阿里云的存储库
1 |
|
2)查看在存储库中可用的所有 Helm charts:
1 | helm search |
3)更新charts列表:
1 | helm repo update |
4)安装charts:
Monocular是一个开源软件,用于管理kubernetes上以Helm Charts形式创建的服务,可以通过它的web页面来安装helm Charts
安装Nginx Ingress controller,安装的k8s集群启用了RBAC,则一定要加rbac.create=true参数
1 | helm install stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true |
安装Monocular:
1 | # 添加新的源 |
5)查看K8S中已安装的charts:
1 | helm list |
6)删除安装的charts:
1 | # 删除:helm delete xxx |
五、卸载 Helm 服务端
执行命令,加 –force强制卸载
1 | helm reset 或 |
参考资料
https://github.com/gjmzj/kubeasz/blob/master/docs/guide/helm.md
https://blog.csdn.net/wenwenxiong/article/details/79067054
https://blog.csdn.net/luanpeng825485697/article/details/80873236