前言:
Helm是GO语言编写的,是管理kubernetes集群中应用程序包的客户端工具。
Helm是类似于centos上的yum工具或Ubuntu上的apt-get工具。
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
Helm中并不提供镜像,但资源清单中会指明相关的镜像仓库。

一、基本概念
  1.Helm的三个基本概念
    Chart:Helm应用(package),包括对资源的定义及相关镜像的引用,还有模板文件、values文件等。类似于YUM RPM或Apt dpkg文件
    Repository:Chart仓库,http/https服务器,Chart的程序包放在这里。
    Release:chart的部署实例,每个chart可以部署一个或多个release

2.helm的程序架构:
    helm:客户端,管理本地的Charts、reprepository和release。与Tiller服务器交互,发送Chart,实例安装、查询、添加、卸载等操作。
          可以运行在集群外的主机上。
          基于grpc协议与Tiller通信。(使用kubectl port-forward将tiller的端口映射到本地,然后再通过映射后的端口跟tiller通信)向tiller发送请求
          并由tiller来管理对应的Kubernetes资源。Helm客户端的使用方法参见helm --help命令。
    Tiller:服务端,Tiller多数运行在集群内。接收来自helm客户端的请求,并把相关资源的操作发送到kube-apiserver,生成release。
            为了方便管理,tiller把release的相关信息保存在kubernetes的ConfigMap中。tiller对外暴露gRPC API,供helm客户端调用。

  3.工作流程:
    首先helm把需要的应用程序包Chart从repository仓库下载到本地。若需定制化操作,则需修改模板文件和values文件,使用模板文件和values文件对配置清单进行赋值。
    helm把请求提交给Tiller,Tiller接收到请求后连接apiserver,通过认证授权,apiserver负责完成创建。
    创建完成后,这个运行在集群上的实例不再称作Chart,而被称作release。
    helm主机中,helm的家目录下若存在需要的Chart包,则以后再创建时不再从网上拉取Chart包,直接使用本地Chart包。

二、安装helm(我这里在集群中master主机上安装helm)
  1.获取helm的安装包:
    https://github.com/helm/helm/releases

2.解压二进制包:
    tar xf helm-v2.13.1-linux-amd64.tar.gz你会得到一个linux-amd64的文件目录。

3.将linux-amd64里面的可执行文件helm复制到/usr/bin/
      cp linux-amd64/helm /usr/bin/

4.如果集群基于RBAC认证的话,需要创建serviceaccount,并绑定到集群中合适的角色(我这里绑定的是集群管理员)。
    详情看官方:https://github.com/helm/helm/blob/master/docs/rbac.md

     vim tiller-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
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

  5.初始化helm
    由于tiller的镜像无法直接从国内pull下来,所以我这里使用Azure中国的镜像。
    也可以自己寻找国内可使用的镜像仓库如:阿里的镜像仓库。
    注意helm要和tiller的版本保持一致。

 helm init --service-account tiller --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.13.1

 Creating /root/.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 /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

6.查看tiller版本及pod是否正常运行:

 [root@K8s-master helm]# helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
tiller-deploy-5fcc86f85f-qvr4b / ContainerCreating 31s

三、使用helm
    helm官方支持的Chart列表为:https://hub.kubeapps.com/
  1.查看当前repo仓库:

 helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com ##此仓库地址无法在国内使用,所以我们更换其他国内可使用的仓库。
local http://127.0.0.1:8879/charts

2.删除repo仓库:

 helm repo remove 仓库名
例:helm repo remove stable

3.添加repo仓库:

 helm repo add 仓库地址
例:helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts ##阿里云的chart仓库

4.更新仓库:

 helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

5.搜索chart:

 helm search chart名称
例:helm search wordpress
NAME CHART VERSION APP VERSION DESCRIPTION
stable/wordpress 0.8. 4.9. Web publishing platform for building blogs and websites.

  6.查看chart的详细信息:

 helm inspect stable/wordpress

7.安装chart:

 helm install chart名称  

不再一一举例,常用命令选项总结如下:
对于chart的管理命令:
    create、fetch、get、inspect、package、verify...
对于release的管理命令:
    install、delete、upgrade/rollback、list、history、status...
更多命令详情请查看helm --help命令。

四、注意事项
  1.每次获取chart时,程序包都会被下载到.helm/cache/archive/目录下。

2.将.helm/cache/archive/目录下的chart包文件解压后,里面就是一些资源清单文件和模板文件和values文件等。
使用tree命令查看chart程序包解压后的文件结构:
例:

 [root@K8s-master archive]# tree redis
redis
├── Chart.yaml ##常用来描述当前Chart的属性、名称、版本等信息,在升级chart时参考版本等信息。
├── README.md ##自述文件,描述作者等相关信息。
├── templates ##模板目录,包含了此chart部署时所需的相关资源清单文件。
│ ├── deployment.yaml ##templates目录下的yaml文件和我们平时自己写的不太一样,里面大量调用了Go模板语法。
│ ├── _helpers.tpl
│ ├── networkpolicy.yaml
│ ├── NOTES.txt
│ ├── pvc.yaml
│ ├── secrets.yaml
│ └── svc.yaml
└── values.yaml

3.可以修改values.yaml文件,用来自定义一些参数,向模板中的各属性赋值,从而实现自定义chart,生成release。

Helm入门的更多相关文章

  1. Kubernetes 学习24 helm入门

    一.概述 1.我们此前在使用kubernetes中,无论我们使用无状态的应用程序,比如myapp,nginx.以及有状态的tomcat,redis,etcd,...等等,他们部署在k8s之上会有这样的 ...

  2. Helm 入门指南

    Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端.Tiller服务端,Helm三个主要部件:Chart.仓库.Release: Chart:为Kubernetes ...

  3. kubernetes学习笔记之十四:helm入门

    1.Helm的简介 Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.可以把Helm比作CentOS的yum工具. Helm有如下几个基本概念: Chart ...

  4. Helm 入门安装指南

    Helm 是 Kubernetes 生态系统中的一个软件包管理工具.本文将介绍 Helm 中的相关概念和基本工作原理,并通过一个具体的示例学习如何使用 Helm 打包.分发.安装.升级及回退 Kube ...

  5. Kubernetes Helm入门指南

    什么是Helm?这可不是暗黑破坏神里装备的名称:头盔,而是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.我们Helm和Kubernetes的关系,我们可以理解成y ...

  6. k8s之helm入门

    1.概述 helm是k8s的另外一个项目,相当于linux的yum,在yum仓库中,yum不光要解决包之间的依赖关系,还要提供具体的程序包,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像 ...

  7. helm 持久化部署ingres

    Ingress 是一种 Kubernetes 资源,也是将 Kubernetes 集群内服务暴露到外部的一种方式.本文将讲一讲如何用 Helm 在 Kubernetes 集群中部署 Ingress,并 ...

  8. 云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

    前言 上一篇文章 [基础设施即代码 使用 Terraform 创建 Kubernetes] 教会了你如何在Cloud上面建Kubernetes资源,那么本篇来讲一下如何在Kubernetes上面部署应 ...

  9. Kubernetes 部署 Nebula 图数据库集群

    Kubernetes 是什么 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes 提供了应 ...

随机推荐

  1. dshow整体框架前期构思

    主要组成: ------理想在线平台---------- A:网站组成 1.产品方案介绍部分 2.用户注册管理部分 3.模块介绍及购买 4.普通 工单部分,vip在线部分 B:四大平台 1.打分平台 ...

  2. C# 操作 Excel 文件(.xls 或 .xlsx)

    在.net中,常用的操作excel文件的方式,有三种: OLE DB的形式, 第三方框架NPOI, Office组件. 总结: 通过对比,在读取大数据量的excel文件,建议用OLE DB的形式,把e ...

  3. centos 创建 logrotate 进行日志分割

    这里就不赘述logrotate了,具体是什么,有什么作用,自行百度. 我们先说下,如何进行nginx的日志切割: 比如:日志目录为:/usr/local/nginx/logs/access.log按照 ...

  4. 集合之ArrayList,HashSet,HashMap

    结合框架的体系结构: 一.List(列表) 1. List的特点 (1)List是元素有序并且可以重复的集合,称为序列 (2)List可以精确的控制每个元素的插入位置,或删除某个位置的元素 (3)Li ...

  5. 51nod 1515 明辨是非 并查集+set维护相等与不等关系

    考试时先拿vector瞎搞不等信息,又没离散化,结果好像MLE:后来想起课上讲过用set维护,就开始瞎搞迭代器...QWQ我太菜了.. 用并查集维护相等信息,用set记录不相等的信息: 如果要求变量不 ...

  6. 超全面的vue.js使用总结

    一.Vue.js组件 vue.js构建组件使用 Vue.component('componentName',{ /*component*/ }): 这里注意一点,组件要先注册再使用,也就是说: Vue ...

  7. 点权生成树(gentree)

    点权生成树(gentree) 题目背景 Awson是某国际学校信竞组的一只菜鸡.终于弄明白边权最小生成树后,然而又被大神嘲笑了.大神深邃的眼光中透露了些睿智,说道:“你会求点权最小生成树么?”Awso ...

  8. MYSQL查询~ 存在一个表而不在另一个表中的数据

    A.B两表,找出ID字段中,存在A表,但是不存在B表的数据.A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引. 方法一 使用 not in ,容易理解,效率低  ~执 ...

  9. VirtualBox中出现UUID have already exists ,并且数字键盘numlock效果相反

    原文地址:https://www.cnblogs.com/xqzt/p/5053338.html 原因:由于linux密码登录错误,修改也报错误,所以只能重新安装虚拟机并在其中安装镜像文件,但是安装镜 ...

  10. ZR#331. 【18 提高 3】括号序列(栈)

    题意 挺神仙的.首先$60$分暴力是比较好打的. 就是枚举左端点,看右端点能否是$0$ 但是这样肯定是过不了的,假如我们只枚举一次,把得到的栈记录下来 那么若区间$(l, r)$是可行的,那么$s_{ ...