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工作原理

工作流程图:
Kubernetes服务编排的利器——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配置无误。

———————— 本文至此结束,感谢阅读 ————————

相关推荐