1. Helm 介绍
在k8s 中部署容器云的应用也是一项有挑战性的工作,helm就是为了简化在k8s安装部署容器云应用的一个客户端工具,其实就是为了帮组开发者定义安装和升级k8s里面的容器应用,同时也能够讲应用打包成chart进行分享,kubeapps Hub 中提供了包括Redis mysql Jenkins等常见的应用,通过helm 可以使用一条命令能将其部署在k8s中
就下面的helm 的整体架构中:Helm 架构是由Helm客户端 Tiller服务端和chart仓库所组成,Tiller部署在k8s 中,helm客户端从chart仓库中获取chart安装包,将其安装部署在k8s集群中
![131d5d6b5d05dd499e6aec3f3e3dcc82.png](https://i-blog.csdnimg.cn/blog_migrate/0ac150895aa7ae341cf90ba3640dc936.jpeg)
Helm 是管理K8S 包的工具,helm 能够提供下面的能力:
1. 创建新的charts
2. 将charts打包成tgz文件
3. 与chart仓库交互
4. 安装和卸载k8s的应用
5. 管理使用Helm安装的charts的生命周期
在helm 中,有三个需要了解的重要概念:
1. chart:是创建k8s 应用实例的信息集合
2. Config:创建发布对象的chart的配置信息
3. Release:chart的运行实例,包含待定的config
1.1 Helm 组件
Helm 客户端和Tiller服务器
Helm 客户端:这是一个提供终端用户使用的命令行工具,客户端负责下面的工作:
1. 本地chart开发
2. 管理仓库
3. 与Tiller服务器交互
3.1 发送需求被安装的charts
3.2 请求关于版本的信息
3.3 请求跟新或者卸载已经安装的发布版本
Tiller服务器:Tiller服务器部署在K8S集群中,helm客户端通过与Tiller服务器进行交互,最终于k8s apiserver 进行交互。Tiller服务器负责如下的工作:
1. 监听来自helm客户端的请求
2. 组合chart和配置构建一个发布
3. 在k8s中安装,并跟踪后续的发布
4. 通过与k8s 交互,更新或者chart
客户端负责管理chart,服务器发展管理发布
1.2 Helm 技术实现
Helm 客户端是使用go语言编写的,它是通过grpc协议与Tiller服务器进行交互
Tiller服务器也是用的go 写的,它使用k8s 客户端类库api与K8s进行通讯
Tiller 服务器是通过k8s的configmap存储信息,因此本身并没有存储数据库
2. Helm 安装部署
Helm z安装的准备工作:
1.已有k8s集群
2.https://github.com/kubernetes/helm/releases 合适的版本
wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
tar zxvf helm-v2.14.3-linux-amd64.tar.gz
mv helm /usr/local/bin/
注:
Helm init 命令通过/root/.kube/config配置文件确定K8S集群中安装Tiller服务器
此命令会将Tiller服务器安装K8S的kube-system的命名空间
2.2.2 使用service account安装
1.创建一个名为tiller 的service Account
kubectl create serviceaccount tiller --namespace kube-system
授权名为tiller的service account 集群管理员角色cluster-admin:
将tiller绑定至集群管理员角色的yaml 文件如下所示:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
通过执行kubectl create -f将授予tiller集群管理员角色:
kubectl create -f rbac-config.yaml
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3
注:如果不指定镜像 默认就会去墙外拉镜像
如果出现
Faild to list:configmaps is forbidden:user “system:serviceaccount:kube-system:default”cannot list configmaps in the namespace “kube-system”
就是因为没有授权
查看已经安装好的helm+tiller
helm version
![068de724ea02c850e1d7b21a89e0c392.png](https://i-blog.csdnimg.cn/blog_migrate/62ed0e49a2ed623f6f2970ce2121f81b.jpeg)
跟换源:
helm repo list
![b586674eeae9df5e8fdd04dd43a03360.png](https://i-blog.csdnimg.cn/blog_migrate/c4ee19f5cb2316ef310f45aed785c6a6.jpeg)
helm repo remove stable #移除stable
![11823c02666de75a47262dfcd79382cb.png](https://i-blog.csdnimg.cn/blog_migrate/198acdf8519ae8718bb42cfb49e81b11.jpeg)
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
![5b6d71c485a24e76940890923da74bc2.png](https://i-blog.csdnimg.cn/blog_migrate/f61532c3df5578cb772b28fb17440c68.jpeg)
![8315c31e0f2d0cb973129bdd83e94564.png](https://i-blog.csdnimg.cn/blog_migrate/7894c91e3421f780d74b77a6ebfe3c7a.jpeg)