Helm 能够理解为 Kubernetes 的包管理工具,能够方便地发现、共享和使用为Kubernetes构建的应用。html
Helm 采用客户端/服务器架构,有以下组件组成:node
Helm CLI 是 Helm 客户端,能够在本地执行
Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期
Repository 是 Chart 仓库,Helm客户端经过HTTP协议来访问仓库中Chart的索引文件和压缩包。
linux
1.Helm的三个基本概念git
Chart:Helm应用(package),包括该应用的全部Kubernetes manifest模版,相似于YUM RPM或Apt dpkg文件
Repository:Helm package存储仓库
Release:chart的部署实例,每一个chart能够部署一个或多个releasegithub
2.Helm工做原理
Helm把Kubernetes资源(好比deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。经过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操做。docker
Helm包括两个部分,helm客户端和tiller服务端。api
3.helm客户端服务器
helm客户端是一个命令行工具,负责管理charts、reprepository和release。它经过gPRC API(使用kubectl port-forward将tiller的端口映射到本地,而后再经过映射后的端口跟tiller通讯)向tiller发送请求,并由tiller来管理对应的Kubernetes资源。网络
4.tiller服务端架构
tiller接收来自helm客户端的请求,并把相关资源的操做发送到Kubernetes,负责管理(安装、查询、升级或删除等)和跟踪Kubernetes资源。为了方便管理,tiller把release的相关信息保存在kubernetes的ConfigMap中。
tiller对外暴露gRPC API,供helm客户端调用。
咱们须要安装 Helm 客户端到本地,同时安装服务端 Tiller 到 Kubernetes 中
这里使用minikube在本地模拟的k8s架构,minikube搭建k8s测试环境方法参考:https://blog.csdn.net/luanpeng825485697/article/details/80862581
而且要启动k8s的架构才能使用helm
1 |
|
先安装依赖
1 |
|
一、客户端安装:
下载相应的版本:https://github.com/kubernetes/helm/releases
这里我下载的是helm-v2.9.1-linux-amd64.tar.gz
解压 (tar -zxvf helm-v2.9.1-linux-amd64.tar.gz)
把helm执行文件放置在: (mv linux-amd64/helm /usr/local/bin/helm)
二、服务器端安装:
初始化并验证 Helm,这样就会自动安装服务器端Tiller。
注意:因为国内网络的问题,在安装 Tiller 的时候,须要下载镜像 gcr.io/kubernetes-helm/tiller:v2.9.1,颇有可能会安装失败。因此咱们这里使用阿里镜像来安装Tiller。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
稍等一会,你就会发现服务端 Tiller 已经安装到咱们的 Minikube 集群中了,而且做为Kubernetes Pod 服务运行在 kube-system 的 namespace 中
1 2 3 4 5 6 7 8 9 |
|
若是 Tiller 安装失败,经过 helm version 命令会提示链接不到 Tiller。
注意:在安装中有时候你可能须要重启一个命令窗口来查询,或者稍等几秒钟才能正常运行。我这边helm version打印三次才能正常启动,等了5秒钟。
由于我这里使用的是minikube模拟的单机k8s环境,若是是分布式,须要在k8s的节点node机器上安装socat
1 |
|
若是须要删除服务端,可使用下面的命令
1 2 |
|
1 2 |
|
官方chart仓库由Kubernetes Charts维护,若要查看在存储库中可用的全部 Helm charts,请键入如下命令:
1 2 |
|
若要更新charts列表以获取最新版本,请键入:
1 |
|
若要查看在群集上安装的Charts列表,请键入:
1 |
|
删除releases
1 |
|
恢复以前的版本
1 |
|
或者
1 |
|
下载charts到本地
1 2 3 |
|
安装charts应用(spark)到k8s。
1 2 3 4 5 |
|
安装了spark到k8s中,k8s会安装5个容器。能够经过kubectl get pods查询,以下,1个msater,3个worker,1个zepperlin。
1 2 3 4 5 6 7 |
|
咱们本地开发charts发布出去。这里就不讲如何开发,咱们能够先去下载别人开发的应用。
好比https://github.com/kubernetes/charts/tree/master/stable中任何一个文件夹,都是一个应用。
Chart仓库结构
一个chart仓库由一个chart包与index.yaml文件组成,index.yaml记录了chart仓库中所有chart的索引,一个本地chart仓库的布局例子以下:
mycharts ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt │ └── service.yaml └── values.yaml