Kubernetes服务编排的利器——Helm
博文大纲:
一、Helm简介
二、Helm组件及相关术语
1)Helm
2)Tiller
3)Chart
4)Repoistory
5)Release
三、Helm工作原理
四、部署Helm
1)安装Helm客户端
2)安装Tiller server
3)配置Helm仓库
4)测试Helm是否可
一、Helm简介
很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。
我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
二、Helm组件及相关术语
1)Helm
Helm是一个命令行下的客户端工具。主要用于Kubernetes应用程序Chart的创建、打包、发布以及创建和管理本地和远程的Chart仓库。
2)Tiller
Tiller是Helm的服务端,部署在Kubernetes集群中,Tiller用于接受Helm的请求,并根据Chart生成Kubernetes的部署文件,然后提交给kubernetes创建应用。Tiller还提供了Release的升级、删除、回滚等一系列功能。
3)Chart
Helm的软件包,采用TAR格式。类似于YUM的RPM包。其包含一组定义Kubernetes资源相关的YAML文件。
4)Repoistory
Helm的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
5)Release
使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。
注意:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例。
三、Helm工作原理
工作流程图:
Chart Install 过程:
1)Helm从指定的目录或者tgz文件中解析出Chart结构信息;
2)Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller;
3)Tiller根据Chart和Values生成一个Release;
4)Tiller将Release发送给Kubernetes用于生成Release;
Chart Update过程:
1)Helm从指定的目录或者tgz文件中解析出Chart结构信息;
2)Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller;
3)Tiller生成Release并更新指定名称的Release的History;
4)Tiller将Release发送给Kubernetes用于更新Release;
Chart Rollback过程:
1)Helm将要回滚的Release的名称传递给Tiller;
2)Tiller根据Release的名称查找History;
3)Tiller从History中获取上一个Release;
4)ler将上一个Release发送给Kubernetes用于替换当前Release;
四、部署Helm
1)安装Helm客户端
[ ~]# wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz #从GitHub上下载Helm [ ~]# tar zxf helm-v2.14.3-linux-amd64.tar.gz [ ~]# mv linux-amd64/helm /usr/local/bin/ [ ~]# chmod +x /usr/local/bin/helm #只是为了获取一个Helm命令 [ ~]# echo ‘source <(helm completion bash)‘ >> /etc/profile [ ~]# . /etc/profile #设置命令可以自动补全
2)安装Tiller server
[ ~]# vim tiller-rbac.yaml #编写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 [ ~]# kubectl apply -f tiller-rbac.yaml [ ~]# helm init --service-account=tiller #初始化helm,并指定刚才创建的授权用户 [ ~]# kubectl get pod -n kube-system | grep tiller #查看tiller的pod名称 tiller-deploy-8557598fbc-9xpsg 0/1 ErrImagePull 0 72s #发现pod并没有运行,那是因为该pod使用的是某歌的镜像,国内下载不了,需要将镜像换成国内的镜像,这里选择阿里云 [ ~]# kubectl edit pod -n kube-system tiller-deploy-8557598fbc-9xpsg #修改spec字段的image指定的镜像,修改前如下: image: gcr.io/kubernetes-helm/tiller:v2.14.3 #修改后如下: image: registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 #修改后,如果没有自动下载,就想办法吧,比如说在tiller容器所在的节点手动下载下来镜像,然后重启该节点的kubelet,或重启该容器 [ ~]# kubectl get pod -n kube-system | grep tiller tiller-deploy-8557598fbc-9xpsg 1/1 Running 0 6m3s #必须保证tiller的Pod正常运行
3)配置Helm仓库
[ ~]# helm repo list #查看仓库的详细信息 NAME URL stable https://kubernetes-charts.storage.googleapis.com local http://127.0.0.1:8879/charts #默认情况下,仓库的地址是某歌,国内无法下载,需要更改为国内的仓库地址 [ ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #更改为国内阿里云的仓库地址 [ ~]# helm repo list NAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts local http://127.0.0.1:8879/charts #再次查看仓库地址,可以发现地址已经换成了阿里云的仓库地址 [ ~]# helm repo update # 更新一下Helm仓库 [ ~]# helm version #查看helm版本信息 Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"} #必须保证可以查看出来client和server,才可正常使用helm
4)测试Helm是否可以正常使用
[ ~]# helm search mysql #搜索MySQL #查看到的是charts包文件,查出来的版本是helm的Charts包的版本 [ ~]# helm inspect stable/mysql #查看其详细信息 [ ~]# helm fetch stable/mysql #下载搜索到的包到本地 [ ~]# helm install stable/mysql #在线安装这个MySQL
如果上述测试命令都可以正常执行,则表示helm配置无误。
———————— 本文至此结束,感谢阅读 ————————