helm分为helm客户端和tiller服务器。k8s的部署如果用kubectl一个个创建显得太繁琐了;为了让k8s像docker compose一样快速启动一组pod,就有了helm。
helm客户端负责chart和release的创建和管理以及和tiller的交互,而tiller服务器则运行在k8s集群中,他负责处理helm客户端的请求,然后转化为 KubeApiServer 的请求跟k8s交互
helm
helm分为helm客户端和tiller服务器。k8s的部署如果用kubectl一个个创建显得太繁琐了;为了让k8s像docker compose一样快速启动一组pod,就有了helm。
helm客户端负责chart和release的创建和管理以及和tiller的交互,而tiller服务器则运行在k8s集群中,他负责处理helm客户端的请求,然后转化为 KubeApiServer 的请求跟k8s交互
- chart 是创建一个应用的信息集合,包含各种k8s的对象的配置模板、参数定义、依赖关系、文档说明等
- release 是chart 的运行实例,代表了一个正在运行的应用。当chart被安装到k8s集群,就生成了一个release,chart能多次安装到同一个集群,每次安装都是一个release
helm 部署
客户端
下载了之后解压
sudo tar -zxvf helm-v2.16.1-linux-amd64.tar.gz
解压之后放到linux执行目录下,修改权限
sudo cp linux-amd64/helm /usr/local/bin/
sudo chmod a+x /usr/local/bin/helm
输入 helm 显示提示信息则安装成功
安装tiller服务端
安装tiller服务器,还需要在机器上配置好kubectl工具和kubeconfig文件,确保kubectl工具可以在这台机器上访问apiserver切正常使用
因为k8s apiserver开启了rbac的访问控制,所以需要创建tiller使用的service account:tiller并分配合适的角色给他,可以查看helm的文档 link
创建clusterRoleBinding1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
创建1
kubectl create -f rbac-config.yaml
初始化tiller1
helm init --service-acount tiller --skip-refresh
这个过程拉取镜像可能有问题,会被墙掉,可以自行去dockerhub中找
gcr.io.kubernetes-helm.tiller:v2.16.1 版本可以通过kubectl describe 看下是什么,要下载对应的
然后通过改tag让容器运行起来1
docker tag fishead/gcr.io.kubernetes-helm.tiller:v2.16.1 gcr.io/kubernetes-helm/tiller:v2.16.1
至此helm就安装好了
helm 使用
helm 仓库地址
创建chart包
当前目录创建一个 myapp chart包1
$ helm create myapp
创建完之后,目录结构如下
1 | myapp - chart 包目录名 |
部署应用
通过命令 helm install app文件夹路径1
$ helm install /myapp
更新应用
通过命令 helm upgrade app名称 app文件夹路径1
$ helm upgrade myapp /myapp
删除应用
1 | $ helm delete myapp |
但是helm还是会保留已经删除的chart的历史版本,当你重新创建相同名称的chart时,会报错1
2
3Error: a release named nacos already exists.
Run: helm ls --all nacos; to check the status of the release
Or run: helm del --purge nacos; to delete it
如果想彻底删除镜像可以使用1
$ helm delete --purge myapp