helm3保姆级使用教程

这里记录的只是我们平常使用比较多的一些内置对象或者是函数,一般只需要掌握values,release、if…else,with,toYaml就足够使用了。

1.安装

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

2.常用命令

helm
作用:查看helm基本操作命令
命令:helm

作用:查看helm的版本
命令:helm version

作用:查看环境变量
命令:helm env

作用:创建chart目录(含基本配置文件和目录)
命令:helm create chartName
举例:helm create abc

作用:将chart目录打包
命令:helm package chartDir
举例:helm package abc
说明:chartDir为chart目录

作用:渲染template目录下的模板文件(即将这些模板文件的字段内容用values.yaml填充,然后直接输出到终端)
命令:helm template chartName
举例:helm template abc

作用:根据关键字检索chart包
命令1:helm search repo keyword
举例1:helm search repo demo
命令2:helm search hub keyword
举例2:helm search hub demo
说明:上面2个命令仅仅在第3个字段有区别,repo表示在本地所添加的仓库中进行检索;hub表示在Helm Hub中进行检索。

作用:查看发布到k8s中的chart对应的release
命令:helm list

作用:上传chart到chart仓库
命令:helm push chart.tgz repoName
举例:helm push demo.tgz harbor-10.30.12.211 --username=admin --password=Harbor12345
说明:有些仓库是有账号密码验证的,所以需要加上账号、密码的参数(比如Harbor提供的chart仓库功能,可参考下面的私有仓库搭建先搭建一个私有仓库出来,再进行仓库相关命令的测试)

作用:从chart仓库中拉取chart到本地
命令:helm pull repoName/keyword
举例:helm pull harbor-10.30.12.211/demo
说明: harbor-10.30.12.211/demo的结构是本地起的仓库名/chart包的名字前缀,只要在harbor-10.30.12.211仓库中含有demo为前缀的chart包,就会被下载到本地

作用:检查chart包中的文件内容是否正确(即该chart包去k8s中是否能够成功安装部署)
命令:helm lint chartName
举例:helm lint demo-0.1.0.tgz
说明:包可以是chart目录、chart压缩包

作用:将chart包发布到k8s集群中安装部署
命令1:helm install releaseName chartName
举例1:helm install relDemo demo-0.1.0.tgz
说明1:releaseName为release的名字,chartName为chart包名,chart可以是未打包的chart,也可以是打包的chart,也可以是仓库中的chart。【chart和release的关系可以大致理解为程序和进程的关系,一个是静态的,一个是动态的】
命令2:helm install chartName --generate-name
举例2:helm install demo-0.1.0.tgz --generate-name
说明2:可以不指定release的名字,只需要指定–generate-name即可随机生成一个名字
验证:创建完后可以使用helm list查看是否有对应的release

作用:将部署到k8s中的release卸载掉
命令:helm uninstall releaseName
举例:helm uninstall relDemo
验证:卸载完后使用helm list查看relDemo是否被删除了,同时可以使用kubectl get pods查看相应的pod等与release相关的资源是否全部删除干净

作用:将部署到k8s中的release升级,即相当于应用升级
命令:helm upgrade releaseName chartName
举例:helm upgrade relDemo demo-1.0.0.tgz
说明:relName指定一个release,该release对应一个k8s中的应用,chartName指定一个chart包,整个过程为直接使用指定的chart包替换部署release。就helm而言release还是原来那个,不过对应的chart包被替换了。对k8s而言,仅仅是将原先资源删除,然后用新的chart包创建资源。
验证:使用helm list查看release的CHART字段是否更新,同时可以使用kubectl get pods查看相应的pod等与release相关的资源是否全部更新(看名字、运行时间)

作用:将release回退到前一个或若干个版本(k8s中会同步回退)
命令:helm rollback releaseName revision
举例:helm rollback relDemo 1
说明:revision为第几个版本,1表示第一个版本,2表示第二个版本,以此类推。通常回滚会搭配helm history releaseName使用,通过该命令查看所有的关于本release的发布历史,然后选择回退到哪个版本
验证:回滚成功后使用helm list查看该release的CHART和APP VERSION是否更新(具体得看chart中的chart.yaml中的version和appVersion有没有相应的修改),同时可以使用kubectl get pods查看相应的pod等与release相关的资源是否全部更新(看名字、运行时间)

作用:查看release的发布历史(包括安装、升级、回滚)
命令:helm history releaseName
举例:helm history relDemo

作用:查看release的基本信息
命令:helm status releaseName
举例:helm status relDemo
helm show

helm show查看chart的信息

作用:查看chart包中的chart.yaml文件内容
命令:helm show chart chartName
举例1:helm show chart demo
举例2:helm show chart demo.tgz
举例3:helm show chart harbor-10.30.12.211/demo
说明:chart包可以是本地的未打包的chart目录(即helm create 创建出来的chart目录),也可以是打包的chart压缩包(由helm package打包),也可以是保存在仓库中的chart包

作用:查看chart包中的values.yaml文件内容
命令:helm show values chartName
说明:包同上有3种选择

作用:查看chart包中README文件内容
命令:helm show readme chartName
说明:包同上有3种选择

作用:查看chart包中chart.yaml、values.yaml、README文件内容
命令:helm show all chartName
说明:包同上有3种选择
helm get
作用:查看release的说明信息(相当于chart中的NOTES.TXT)
命令:helm get notes releaseName
举例:helm get notes relDemo

作用:查看release在k8s中创建出来的资源
命令:helm get manifest releaseName
举例:helm get manifest relDemo

作用:查看release的回调创建资源
命令:helm get hooks releaseName
举例:helm get hooks relDemo

作用:查看release的values配置
命令:helm get values releaseName
举例:helm get values relDemo

作用:查看上述所有内容
命令:helm get all releaseName
举例:helm get all relDemo
helm plugin
作用:安装插件
命令:helm plugin install pluginURL
举例:helm plugin install https://github.com/chartmuseum/helm-push
说明:最后的url地址为插件的下载地址,可参考 https://github.com/chartmuseum/helm-push

作用:卸载插件
命令:helm plugin uninstall pluginName
举例:helm plugin uninstall push

作用:更新插件,将插件升级到最新版本
命令:helm plugin update pluginName
举例:helm plugin update push
说明:在下载插件的时候会保存插件及其下载地址,更新的时候使用原本的下载地址直接下载最新版本替换
helm repo
作用:查看添加的chart仓库,可在这些chart仓库中拉取chart(实际上就相当于一个应用的安装包)
命令:helm repo list

作用:本地添加chart仓库
命令:helm repo add repoName repoURL
举例:helm repo add stable http://mirror.azure.cn/kubernetes/charts/
说明:repoName是你自己起的一个名字,用来代表这个repoURL,后续操作仓库的命令中直接用repoName来代替repoURL,只要指定了repoName,就表示要去操作repoName指向的repoURL的仓库

作用:本地删除chart仓库
命令:helm repo remove repoName
举例:helm repo remove abc

作用:将本地所添加的chart仓库的最新信息缓存到本地
命令:helm repo update
说明:helm search命令是检索某仓库中的chart包,假设仓库中一开始是没有所指定的chart包,所以helm search是检索不到的。这时候如果将chart包上传至该仓库,本地需要执行一遍helm repo update以更新本地的缓存数据才能检索到该指定的chart,因为helm search就是读取本地缓存数据的

作用:根据指定仓库目录下的chart包生成index.yaml索引文件
命令:helm repo index repoDir --url=repoURL
举例:helm repo index repo --url=http://192.168.0.1:8080/
说明:repoDir指定一个仓库的目录,该目录用来存放chart包及索引文件index.yaml。url指定仓库的访问路径,生成的索引文件中会以该url为地址前缀拼接上chart包名作为chart包的访问路径

3.helm内置对象

Release

Release 对象描述了版本发布自身的一些信息。它包含了以下对象:

对象名称描述
.Release.Namerelease 的名称
.Release.Namespacerelease 的命名空间
.Release.IsUpgrade如果当前操作是升级或回滚的话,该值为 true
.Release.IsInstall如果当前操作是安装的话,该值为 true
.Release.Revision获取此次修订的版本号。初次安装时为 1,每次升级或回滚都会递增
.Release.Service获取渲染当前模板的服务名称。一般都是 Helm

例子:

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm    
data:
    value1: {{ .Release.Name }}   
    value2: {{ .Release.Namespace }}
    value3: {{ .Release.IsUpgrade }}
    value4: {{ .Release.IsInstall }}
    value5: {{ .Release.Revision }}
    value6: {{ .Release.Service }}
Values

Values 对象描述的是 value.yaml 文件中的内容,默认为空。使用 Value 对象可以获取到 value.yaml 文件中已定义的任何数值

Value 键值对获取方式
name: aaron.Values.name
info: name: aaron.Values.info.name

例子:

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm    
data:
   	username: {{ .Values.info.name }}
   	age: {{ .Values.info.age }}
Chart

Chart 对象用于获取 chart.yaml 文件中的内容:

对象名称描述
.Chart.Name获取 Chart 的名称
.Chart.Version获取 Chart 的版本

例子:

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm    
data:
   	chartname: {{ .Chart.Name }}
   	chartversion: {{ .Chart.Version }}
Capabilities

Capabilities 对象提供了关于 Kubernetes 集群相关的信息。该对象有如下方法:

对象名称描述
.Capabilities.APIVersions返回 Kubernetes 集群 API 版本信息集合
.Capabilities.APIVersions.Has $version用于检测指定的版本或资源在 Kubernetes 集群中是否可用,例如 batch/v1 或 apps/v1/Deployment
.Capabilities.KubeVersion 和 Capabilities.KubeVersion.Version都用于获取 Kubernetes 的版本号
.Capabilities.KubeVersion.MajorKubernetes 的主版本号
.Capabilities.KubeVersion.MinorKubernetes 的小版本号

例子:

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm    
data:
    Apiversion: {{ .Capabilities.APIVersions }}   
    Healthcheck: {{ .Capabilities.APIVersions.Has $version }}
    Kubernetes_release: {{ .Capabilities.KubeVersion  }}
    Kubernetes_Major: {{ .Capabilities.KubeVersion.Major }}
    Kubernetes_Minor: {{ .Capabilities.KubeVersion.Minor }}
Template

Template 对象用于获取当前模板的信息,它包含如下两个对象:

对象名称描述
.Template.Name用于获取当前模板的名称和路径(例如:mychart/templates/mytemplate.yaml)
.Template.BasePath用于获取当前模板的路径(例如:mychart/templates)

例子:

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    path: {{ .Template.Name }}
    basePath: {{ .Template.BasePath }}

4.helm3部署应用实战案例

使用helm安装nginx

目录结构
nginx/
├── charts
├── Chart.yaml
├── templates
│   ├── deploy.yaml
│   └── service.yaml
└── values.yaml
deploy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.AppName }}
spec:
  selector:
    matchLabels:
      app: {{ .Values.AppName }}
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      labels:
        app: {{ .Values.AppName }}
    spec:
      containers:
      - name: {{ .Values.AppName }}
        image: {{ .Values.Image }}:{{ .Values.ImageTag }}
        ports:
        - containerPort: {{ .Values.containerPort }}
service
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.AppName }}
spec:
  selector:
    app: {{ .Values.AppName }}
  ports:
  - protocol: TCP
    port: {{ .Values.containerPort }}
    targetPort: {{ .Values.containerPort }}
    nodePort: {{ .Values.nodePort }}
  type: NodePort
values
AppName: 'nginx'
replicas: 2
Image: 'docker.io/library/nginx'
ImageTag: 'alpine'
containerPort: 80
nodePort: 32001

5.helm3内置函数

1.内置函数简单介绍
Quote | Squote

Quote:给获取到的value添加“”

Squote:给获取到的value添加''

模版函数
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ quote .Values.info.name }}
    age: {{ squote .Values.info.age }}
管道
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ .Values.info.name | quote }}
    age: {{ .Values.info.age | squote }}
Upper | Lower

Uppser:将获取的字符串全部转换为大写

Lower:将获取到的字符串全部转换为小写

模版函数
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ upper .Values.info.name }}
    age: {{ lower .Values.info.age }}
管道
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ .Values.info.name | upper }}
    age: {{ .Values.info.age | lower }}
repeat

将读取的字符串复制指定的的次数

模版函数
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ repeat 5 .Values.info.name }}
管道
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ .Values.info.name |  repeat 5 }}
default

经常使用的一个函数是 defaultdefault DEFAULT_VALUE GIVEN_VALUE。该功能允许在模板内部指定默认值,以防该值被省略。

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ .Values.info.name | default "lisi" }}
2.常用逻辑和流控制函数使用

比较:eq、ne、gt、ge、le、lt

逻辑判断:and、or、not

判断字符串是否为空:empty

coalesce:用于扫描一个给定的列表,并返回第一个非空的值

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
    username: {{ eq 2 2 }}
    username: {{ ne 2 2 }}
    username: {{ and .Values.info.name .Values.info.age }}
    username: {{ or .Values.info.name .Values.info.age }}
    num: {{ gt 1 2 }}
    num: {{ lt 1 2 }}
    sex: {{ empty "" }}
    sex: {{ not "" }}
3.流程语句if…else、with
if…else

If…else用来设置开关,比如我们想实现对nodePort网络设置开关,当nodePort.enabled=true时才开启;

apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.AppName }}
spec:
  selector:
    app: {{ .Values.AppName }}
  ports:
  - protocol: TCP
    port: {{ .Values.containerPort }}
    targetPort: {{ .Values.containerPort }}
{{- if .Values.nodePort.enable }}
    nodePort: {{ .Values.nodePort.nodePort }}
  type: NodePort
{{- end }}
with

将重复多次的值通过指定前缀简单获取

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-cm
data:
{{- with .Values.people.info }}
    name: {{ .name }}
    sex: {{ .sex }}
{{- end }}
toYaml转yaml

indent num:缩进几行

nident num:换行之后缩进几行

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.AppName }}
spec:
  selector:
    matchLabels:
      app: {{ .Values.AppName }}
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      labels:
        app: {{ .Values.AppName }}
    spec:
      containers:
      - name: {{ .Values.AppName }}
        image: {{ .Values.Image }}:{{ .Values.ImageTag }}
        ports:
        - containerPort: {{ .Values.containerPort }}
        resources:
{{- toYaml .Values.resources | nindent 10 }}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值