全栈工程师开发手册 (作者:栾鹏)
架构系列文章


helm的github地址:https://github.com/helm/helm?spm=a2c4g.11186623.2.7.Qr9c2B
helm教程网址:https://docs.helm.sh/helm/#helm
go的模板语言:https://whmzsu.github.io/helm-doc-zh-cn/chart_template_guide/getting_started-zh_cn.html

helm简介

Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用。

Helm 采用客户端/服务器架构,有如下组件组成:

Helm CLI 是 Helm 客户端,可以在本地执行
Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期
Repository 是 Chart 仓库,Helm客户端通过HTTP协议来访问仓库中Chart的索引文件和压缩包。

1.Helm的三个基本概念

Chart:Helm应用(package),包括该应用的所有Kubernetes manifest模版,类似于YUM RPM或Apt dpkg文件
Repository:Helm package存储仓库
Release:chart的部署实例,每个chart可以部署一个或多个release

2.Helm工作原理
Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。

Helm包括两个部分,helm客户端和tiller服务端。

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

minikube start --registry-mirror=https://registry.docker-cn.com

k8s所在机器上先安装依赖

sudo apt-get install socat

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)

2、服务器端安装:

初始化并验证 Helm,这样就会自动安装服务器端Tiller。
注意:由于国内网络的问题,在安装 Tiller 的时候,需要下载镜像 gcr.io/kubernetes-helm/tiller:v2.9.1,很有可能会安装失败。所以我们这里使用阿里镜像来安装Tiller。

$ helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartsCreating /home/luanpeng/.helm
Creating /home/luanpeng/.helm/repository
Creating /home/luanpeng/.helm/repository/cache
Creating /home/luanpeng/.helm/repository/local
Creating /home/luanpeng/.helm/plugins
Creating /home/luanpeng/.helm/starters
Creating /home/luanpeng/.helm/cache/archive
Creating /home/luanpeng/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /home/luanpeng/.helm.Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Happy Helming!

稍等一会,你就会发现服务端 Tiller 已经安装到我们的 Minikube 集群中了,并且作为Kubernetes Pod 服务运行在 kube-system 的 namespace 中

$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}$ kubectl get pods --all-namespaces
...
kube-system   tiller-deploy-f9b8476d-q89lh            0/1       ImagePullBackOff   0          4m

如果 Tiller 安装失败,通过 helm version 命令会提示连接不到 Tiller。
注意:在安装中有时候你可能需要重启一个命令窗口来查询,或者稍等几秒钟才能正常运行。我这边helm version打印三次才能正常启动,等了5秒钟。

如果出现下面的问题:
helm版本与新集群不兼容:UPGRADE FAILED:不兼容的版本客户端

只需在本地运行:

helm init --upgrade

因为我这里使用的是minikube模拟的单机k8s环境,如果是分布式,需要在k8s的节点node机器上安装socat

sudo apt-get install socat

如果需要删除服务端,可以使用下面的命令

helm reset
Tiller (the helm server side component) has been uninstalled from your Kubernetes Cluster.
 $helm reset   或 $helm reset -f(强制删除k8s集群上的pod.)当要移除helm init创建的目录等数据时,执行helm reset --remove-helm-home

Helm 基础操作

第一步当前是添加仓库地址,因为helm自带的仓库为境外仓库地址,拉取应用很慢成功。通过阿里云镜像安装的服务器端可以看到已经安装了很多charts。这里面就有我们后面要使用的spark

helm repo add 存储库名 存储库URL
helm repo update例如添加阿里云的仓库地址
helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/
helm repo add repo_name1 https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm repo update

官方chart仓库由Kubernetes Charts维护,若要查看在存储库中可用的所有 Helm charts,请键入以下命令:

helm search

若要更新charts列表以获取最新版本,请键入:

helm repo update

若要查看在群集上安装的Charts列表,请键入:

helm list

删除releases

helm delete chartsnames1

恢复之前的版本

helm history chartsname1

或者

helm rollback chartsname1 2

下载charts到本地

helm search chartsname1
helm fetch stable/chartsname1
ll      # 查看是都有我们下载的charts

安装charts有多种方式,一种是直接安装远程helm仓库的应用

helm install --name mycharts stable/spark         安装stable仓库下的charts应用(spark)到k8s。

也可以下载远程仓库的charts以后,修改配置文件例如values.yaml以后,再安装本地的charts。

helm install --set name=mycharts ./spark/     #直接在spark文件夹同级目录执行,这样就能将spark当成charts应用
helm upgrade --install mycharts .            #升级
helm install --name mycharts -f values.yaml stable/spark     #有时为了保留原始文件,我们将values.yaml文件复制到外部修改。这样安装时就先使用values.yaml替换charts文件夹里面的同名文件,再安装charts。

当然我们也可以将修改后的文件重新打包成charts应用,上传到自己的私有helm仓库中,这样别人就可以直接安装了。关于私有仓库,后面会介绍。

几种安装charts方式:
指定chart: helm install stable/mariadb
指定打包的chart: helm install ./nginx-1.2.3.tgz
指定打包目录: helm install ./nginx
指定chart包URL: helm install https://example.com/charts/nginx-1.2.3.tgz

安装了helm应用以后如果想彻底删除helm应用,可以使用

helm delete --purge mycharts

安装了spark到k8s中,k8s会安装5个容器。可以通过kubectl get pods查询,如下,1个msater,3个worker,1个zepperlin。

$ kubectl get pods
NAME                                   READY     STATUS             RESTARTS   AGE
my-release-master-985f9646c-s8ssv      0/1       ImagePullBackOff   0          40m
my-release-worker-66d87ffb8c-pg4cn     0/1       ImagePullBackOff   0          40m
my-release-worker-66d87ffb8c-s87tt     0/1       Pending            0          40m
my-release-worker-66d87ffb8c-wwsqb     0/1       ImagePullBackOff   0          40m
my-release-zeppelin-5b996bbf6c-dwg8h   1/1       Running            0          40m

使用helm生成同等安装功能的yaml文件(使用istio为例)

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > ./istio.yaml

helm命令

helm completion - 为指定的shell生成自动完成脚本(bash或zsh)
helm create - create a new chart with the given name
helm delete - given a release name, delete the release from Kubernetes
helm dependency - manage a chart’s dependencies
helm fetch - download a chart from a repository and (optionally) unpack it in local directory
helm get - download a named release
helm history - fetch release history
helm home - displays the location of HELM-HOME
helm init - initialize Helm on both client and server
helm inspect - inspect a chart
helm install - install a chart archive
helm lint - examines a chart for possible issues
helm list - list releases
helm package - package a chart directory into a chart archive
helm plugin - add, list, or remove Helm plugins
helm repo - add, list, remove, update, and index chart repositories
helm reset - uninstalls Tiller from a cluster
helm rollback - roll back a release to a previous revision
helm search - search for a keyword in charts
helm serve - start a local http web server
helm status - displays the status of the named release
helm template - locally render templates
helm test - test a release
helm upgrade - upgrade a release
helm verify - verify that a chart at the given path has been signed and is valid
helm version - print the client/server version information

私有chart仓库

我们本地开发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

k8s上安装并初始化Helm,helm基础使用教程相关推荐

  1. k8s上安装并初始化Helm。minikube

    helm简介 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共 享和使用为Kubernetes构建的应用. Helm 采用客户端/服务器架构,有如下组件组成: Helm C ...

  2. 在k8s上安装calico时报错: no matches for kind “PodDisruptionBudget“ in version “policy/v1“

    在k8s上安装calico时报错: unable to recognize "calico.yaml": no matches for kind "PodDisrupti ...

  3. Jenkins 设置镜像_在k8s上安装Jenkins及常见问题

    持续集成和部署是DevOps的重要组成部分,Jenkins是一款非常流行的持续集成和部署工具,最近试验了一下Jenkins,发现它是我一段时间以来用过的工具中最复杂的.一个可能的原因是它需要与各种其它 ...

  4. 在k8s上安装Jenkins及常见问题

    持续集成和部署是DevOps的重要组成部分,Jenkins是一款非常流行的持续集成和部署工具,最近试验了一下Jenkins,发现它是我一段时间以来用过的工具中最复杂的.一个可能的原因是它需要与各种其它 ...

  5. 在k8s上安装fluentd收集日志

    fluentd用于收集k8s容器中的日志: 收集后的日志写入es中,我的es直接搭建在服务器上,要经过多方测试再决定是否要将es放在k8s上: fluentd-es-configmap.yaml:此文 ...

  6. 微星z370安装linux系统,在MSI z370主板上安装win7和BIOS设置的详细教程

    [文章指南]最近,许多使用MSI主板的网民都询问MSI z370主板是否配备了Intel Core 8th u处理器. 可以安装Win7吗?微星z370主板预装了win10系统,用户仍然喜欢win7系 ...

  7. 联想如何安装linux系统安装步骤,加速本本的启动 - 在ThinkPad上安装Ubuntu的全过程详解_Linux教程_Linux公社-Linux系统门户网站...

    加速本本的启动 Ubuntu的启动过程默认执行了许多脚本,如在线时间同步.LVM.RAID等而我的本本根不用不到这些,而启动脚本中对于即插即用网络的检测会因为你没有插入网线或者周围没有可用的无线接入点 ...

  8. thinkpad安装linux驱动程序,显卡驱动、代码 - 在ThinkPad上安装Ubuntu的全过程详解_Linux教程_Linux公社-Linux系统门户网站...

    显卡驱动 虽然Ubuntu装好后ATI的显卡已经可以正常工作了,但由于用的是xorg-driver-ati作为驱动,没有3D加速,让人十分不爽.源里的linux-restricted-modules里 ...

  9. [Kubernetes] 在K8S上部署MySQL 8.0并数据持久化

    在K8S上安装MySQL 1.创建PV apiVersion: v1 kind: PersistentVolume metadata:name: model-db-pv spec:storageCla ...

最新文章

  1. JavaScript中的基本数据类型与引用数据类型
  2. Git 常用命令记录
  3. html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例
  4. 开源RefreshListView下拉刷新效果
  5. 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合
  6. CF 799B T-shirt buying
  7. Spring3 MVC请求参数获取的几种场景
  8. vscode we cannot connect_秋季常规赛分秒必争,PC BET直播:TES能否拿下西安WE
  9. javascript学习----window对象的学习与总结
  10. Oracle Alert sid log 位置问题
  11. regnam r语言_求助:R语言进行增加值分解的一部分代码看不懂,求大神过目
  12. multisim中pwl_Multisim 14电路设计与仿真
  13. 推荐几款好用实用的宝藏软件。记得收藏
  14. FeHelper下载:(Chrome浏览器)
  15. 使用Windows系统的几个好的习惯
  16. 六月集训(第17天) —— 广度优先搜索
  17. java递归获取所有的子级节点
  18. js将中国标准时间转化为年月日时分秒(yyyy-mm-dd)格式以及时间戳,日期,天数之间的转换
  19. 百慕大永中迎来ECFA时代
  20. 引入CSS样式表的三种方式

热门文章

  1. 语音识别api_语音识别 api_免费语音识别api - 云+社区 - 腾讯云
  2. 【什么值得买】最牛逼的语音识别公司开始做硬件了
  3. python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
  4. 关于vue el-button 动态获取个数并附不同的颜色
  5. 结构体中操作c语言,C语言中结构体的操作
  6. vue+sortable实现表格拖拽
  7. 关于javascript跳转与返回和刷新页面
  8. 可控硅型号怎样识别_可控硅是什么_可控硅型号_可控硅分类及判别_可控硅种类...
  9. Spring在多线程中bean的注入问题
  10. datagrid combobox 选择后显示valueField 而不是 textValue解决方法