helm-chart学习总结
大纲
- 概念
- 创建chart
- 配置chart
- 入门项目goods-service-chart
概念
chart是Helm的核心。除了将它们安装到Kubernetes集群中或管理已安装的chart实例之外,还可以构建新chart或更改现有chart
创建chart
创建本地chart
Helm包含create命令,使你可以轻松地创建自己的chart
helm create 【自定义chart名称】
例如
helm create myapp
这样会创建一个新的Nginx chart 我们可以基于这个chart自己修改配置内容

#整个chart的文件类型目录各式
#charts templates文件夹是保留文件夹
mychart
├── Chart.yaml
├── charts # 该目录保存其他依赖的 chart(子 chart)
├── templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
│ ├── NOTES.txt # 用户运行 helm install 时候的提示信息
│ ├── _helpers.tpl # 用于创建模板时的帮助类(主要是定义的一些模板)
│ ├── deployment.yaml # Kubernetes deployment 配置
│ ├── ingress.yaml # Kubernetes ingress 配置
│ ├── service.yaml # Kubernetes service 配置
│ ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖
或者直接按照以上文件夹格式创建内容
部署本地chart
helm install 【部署名称】 【本地chart 文件夹名称】
例如
helm install ngtest myapp
helm install 【部署名称】 【归档文件名】
helm install ngtest myapp.1.1.0.tgz

校验本地chart
在开发chart时,尤其是使用YAML模板时,很容易出错或遗漏某些内容
helm lint 【本地chart 文件夹名称】【本地chart 文件夹名称】
例如
helm lint app1 只校验一个
helm lint app1 app2 校验多个
归档打包本地chart
helm package 【本地chart 即文件夹名称】
例如
helm package goodservice/
helm package goodservice/ --destination charts/ 把归档文件打包到指定文件夹

chart文件详细总结
Chart.yaml
Chart.yaml文件 主要是告知helm chart的基础信息数据
注意
- 1文件首字母要大写
- 2 apiVersion: v1 v2 v1对应helm2 v2对应helm3
详细配置说明见 《Chart-demo.yaml》
Chart.yaml 中的配置信息可以在模板中被使用 {{ .Chart.Version}}
NOTES.txt
当执行helm install 的时候,当部署完成后会打印NOTES.txt中的内容
NOTES.txt 也可以使用go模板读取values.yaml 中的配置值 使用 ** _helpers.tpl 中的模板** 基于配置值实现不同的展示效果

_helpers.tpl
此文件中可以定义很多的模板 基于golang模板的规则
模板各式
{{- define "模板名称" -}}
内容
{{- end -}}
例如:
_helpers.tpl 文件内容

deployment.yaml 文件内容


使用模板的注意事项
- 1 使用include导入模板
- 2 .yaml文件中使用模板 要注意yaml文件各式 否则导入模板后yaml文件各式错误
- 3 使用 -号将模板内容首部的空格去掉 -号必须紧挨着{{-
- 4 使用 nindent函数让模板中的内容换行并且在内容前面加指定数量的空格保证yaml文件各式正确 (nindent 6 表示加6个空格)
- 5 NOTES.txt 中也可以使用模板
values.yaml
定义 chart 模板中的自定义配置的默认值 可以在/templates文件夹下的任意文件中使用
使用方式 {{ .Values 开头}} 注意开头的 . 表示当前作用域中的根对象 .Values是根对象的属性
{{ .Values.xxx}}
deployment.yaml 文件内容

values.yaml中的内容

.helmignore
此文件可以不存在
主要是放在chart文件夹下 类似于Git的.gitinore文件 把不希望包含在chart归档文件中的文件剔除
templates文件夹下的其他配置
- service.yaml
- deployment.yaml
- service.yaml
- …
这些都对应的K8S中的内容
注意: templates目录中以下划线(即_)开头的文件表示与K8S没有关系的清单
按照惯例,辅助模板和代码段位于**_.tpl和 _.yaml**文件中。
配置chart
chart配置说明
所有模板文件( /template文件夹下的 )都支持Go 模板语法 https://studygolang.com/pkgdoc (go模板使用见 golang测试项目templatetest1.go)
语法包括
{{}}
{{if}}{{end}}
{{range .Var}} {{.}} {{end}}
...
如果要使用 values.yaml 中的配置内容 则以.Values开头.【文件中的配置】
例如使用apv这个配置项
** values.yaml内容如下**

/template/deployment.yaml内容如下

注意 quote表示给字符串加双引号
使用管道方式
例如 deployment.yaml内容如下
name: {{ .Values.pro | default "mytestapp" | quote}}
解析
使用values.yaml 文件中pro的值 如果没有值就用 "mytestapp" 最后quote函数表示将字符串写入模板之前将其用引号括起来

测试结果


内置的一些可以使用的参数
除了使用vaules.yaml中的配置 还可以有关发布的信息
.Release.Name
发布版本的名称。
.Release.Namespace
包含将chart发布到的命名空间。
.Release.IsInstall
当发布版本是一个正在安装的工作负载时,设置为true。
Release.IsUpgrade
当发布版本是一个升级或回滚时,设置为true。
.Release.Service
Chart.yaml文件中的信息也可以使用
Chart.Name
包含chart的名称。
.Chart.Version
chart的版本。
.Chart.AppVersion
应用程序版本(如果已设置)。
.Chart.Annotations
包含注解的键/值列表


内置可使用的函数
https://masterminds.github.io/sprig/
toYaml (toYaml函数可将数据转换为YAML)
# 此函数在使用模板的时候特别总要 可以保证.yaml文件各式正确
nindent 【number】 (函数在接收到的文本的开头添加一个新行,然后缩进每一行)
nindent 8
indent (indent函数不会在开头添加换行符)
include 函数可以导入_helpers.tpl中的模板
quote 函数可以让字符串加上“”引号
模板函数见 https://helm.sh/zh/docs/chart_template_guide/function_list/
入门项目goods-service-chart
见 /demo/goods-service-chart
文章介绍了HelmChart的基本概念,包括如何创建、部署和验证本地chart,以及Chart.yaml、values.yaml等关键文件的作用和使用方法。还详细讲解了模板语法和内置函数,提供了入门项目goods-service-chart作为实践示例。

被折叠的 条评论
为什么被折叠?



