在Kubernetes中部署容器云的应用也是一项有挑战性的工做,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。经过helm可以帮助开发者定义、安装和升级Kubernetes中的容器云应用,同时,也能够经过helm进行容器云应用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等常见的应用,经过helm可使用一条命令就可以将其部署安装在本身的Kubernetes集群中。mysql
helm的总体架构以下图所示,Helm架构由Helm客户端、Tiller服务器端和Chart仓库所组成;Tiller部署在Kubernetes中,Helm客户端从Chart仓库中获取Chart安装包,并将其安装部署到Kubernetes集群中。linux
Helm是管理Kubernetes包的工具,Helm能提供下面的能力:git
- 建立新的charts;
- 将charts打包成tgz文件;
- 与chart仓库交互;
- 安装和卸载Kubernetes的应用;
- 管理使用Helm安装的charts的生命周期;
在Helm中,有如下三个重要概念须要了解:github
- Charts:是建立Kubernetes应用实例的信息集合,也就是一个helm的程序包,它包含了运行一个k8s应用全部须要的镜像、依赖关系和资源定义等,必要时还会包含Service资源定义,它相似于yum的rpm文件;
- Repository:Chart仓库,用于集中存储和分发Charts。
- Config:应用程序实例化安装时运行使用的配置信息;
- Release:chart的运行实例,包含特定的config;
在同一个集群中,一个Charts可使用不一样的config重复安装屡次,每次安装都会建立一个新的Release。sql
在Helm中有两个主要的组件,即Helm客户端和Tiller服务器:docker
Helm客户端:是一个供终端用户使用的命令行工具。api
客户端负责以下的工做:bash
- 本地chart开发;
- 管理仓库
- 与Tiller服务器交互(发送须要被安装的charts、请求关于发布版本的信息、请求更新或者卸载已安装的发布版本)
Tiller服务器: Tiller服务部署在Kubernetes集群中,Helm客户端经过与Tiller服务器进行交互,并最终与Kubernetes API服务器进行交互。服务器
Tiller服务器负责以下的工做:架构
- 监听来自于Helm客户端的请求
- 组合chart和配置来构建一个发布
- 在Kubernetes中安装,并跟踪后续的发布
- 经过与Kubernetes交互,更新或者chart
//github搜索helm
[root@docker-k8s01 ~]# wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz //解包 [root@docker-k8s01 ~]# tar zxf helm-v2.14.3-linux-amd64.tar.gz [root@docker-k8s01 ~]# cd linux-amd64/ //只须要该目录下的helm命令 [root@docker-k8s01 linux-amd64]# ls helm LICENSE README.md tiller [root@docker-k8s01 linux-amd64]# mv helm /usr/local/bin/ //赋予权限 [root@docker-k8s01 linux-amd64]# chmod +x /usr/local/bin/helm //配置命令自动补全 [root@docker-k8s01 linux-amd64]# echo 'source <(helm completion bash)' >> /etc/profile [root@docker-k8s01 linux-amd64]# . /etc/profile
//建立受权用户,编写yaml文件 [root@docker-k8s01 ~]# cat tiller-rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- 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 [root@docker-k8s01 ~]# kubectl apply -f tiller-rbac.yaml
//Tiller server的环境初始化 [root@docker-k8s01 ~]# helm init --service-account=tiller //helm的服务端就是Tiller //查看tiller的pod名称 [root@docker-k8s01 ~]# kubectl get pod -n kube-system | grep tiller tiller-deploy-8557598fbc-z6n2w 0/1 ImagePullBackOff 0 91s [root@docker-k8s01 ~]# kubectl edit pod tiller-deploy-8557598fbc-z6n2w -n kube-system //编辑pod的yaml文件,将其使用的镜像改成国内阿里云的,默认是Google的镜像,下载不下来 //修改spec字段的image指定的镜像,以下: image: gcr.io/kubernetes-helm/tiller:v2.14.3 //修改以下: image: registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 //固然也能够直接在节点上下载也能够 [root@docker-k8s02 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 //保证tiller的pod正常运行便可 [root@docker-k8s01 ~]# kubectl get pod -n kube-system | grep tiller tiller-deploy-8557598fbc-z6n2w 1/1 Running 0 21m
//查看其仓库信息 [root@docker-k8s01 ~]# helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com //如上,默认是Google,在国外,速度特别慢,因此须要更换为国内源 [root@docker-k8s01 ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts //再次查看能够看到已经更换为了杭州阿里云 [root@docker-k8s01 ~]# helm repo list NAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts [root@docker-k8s01 ~]# helm repo update //查看helm版本信息,必须保证能够查看出来client和server,才可正常使用helm [root@docker-k8s01 ~]# helm version Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
//搜索MySQL [root@docker-k8s01 ~]# helm search mysql //查看到的是charts包文件,查出来的版本是helm的Charts包的版本 //查看其详细信息 [root@docker-k8s01 ~]# helm inspect stable/mysql //下载搜索到的包到本地 [root@docker-k8s01 ~]# helm fetch stable/mysql //在线安装这个MySQL [root@docker-k8s01 templates]# helm install stable/mysql