属于 Kubernetes 的包管理器

Helm | 文档首页
您需要知道的关于文档如何组织的所有内容。
介绍
元素(名词)

命令
常见命令

详细命令介绍
模版知识

创建目录
根据这些描述可以看出来,templates 放置的内容主要为 k8s 资源的 yaml 文件。
模版
可以使用 --debug --dry-run 参数进行试用行。 这样就可以知道模板替换的正式值,方便进行问题排查。
内部变量
官网有详细介绍,用到什么找什么 https://helm.sh/zh/docs/chart_template_guide/builtin_objects/
使用 values.yaml 中的变量进行渲染
values.yaml
templates/configmap.yaml
通过 {{ .Values.XXX.XXX }} 进行变量使用
注意:如果将值设置为 null ,将会被 helm 删除对应的 key
模版函数
{{ quote .Values.favorite.food }} 函数定义:https://masterminds.github.io/sprig/
常用函数:
- default :
{{ .Values.favorite.drink | default "tea" | quote }}没有值时,设置默认值
- lookup: 从 kubernetes 集群中查找资源,通过 apiVersion, kind, namespace,name 获取资源,或者资源列表。
注意:--dry-run 和 helm template 时没有真实的链接 k8s 集群,所以返回的是空列表
- (
eq,ne,lt,gt,and,or) 运算符
管道
{{ .Values.favorite.food | quote }} 类似与 UNIX 的管道
控制语句
常见三种:
•
if/else, 用来创建条件语句•
with, 用来指定范围, 设置局部范围(类似于 cd 到指定路径)上面这个例子中, with 相当于将当前范围切换至 .Values.favorite {{- end}} 相当于 “cd -” 。在这个例子中我们发现有个 “$” 符号。这个符号是从根目录获取,相当于全局路径。这个不受 with 影响。
•
range, 提供"for each"类型的循环变量
{{ $valueName := .Values.xxx.xxx }} 和其它编程语言一样。变量可以是有作用域的。 “$” 属于特殊的变量。它的作用域是全局。 值为 “根”
命名模板
- define : 定义模版内容
- template :不考略格式的方式引入模版
- include:考虑缩进空格个数引入模板
在模板中访问文件
- 基础使用方式: {{ $files.Get fileName }} 获取文件里的内容
- 全局获取 .Files.Glob:
- 编码 Encoding: {{ .Files.Get "config1.toml" | b64enc }}
- 逐行读取 Lines:
NOTES.txt 说明文件
会在 install 时候展示到标准输出上面,支持 go 模版
子chart和全局值
这里注意一点就可以:父 chart 可以覆盖 子 chart 的值。
子 chart 放在目录 charts 下,按照标准的方式存放。
template 模板是父子共享的
打包
如何将自己的镜像打包成一个 chart ?
helm package mychart 打包成 tar.gz 包。
检查格式或信息问题
helm lint mychart
其它
文件导入的大小限制为 1M(由于Kubernetes对象的限制)
调试
使用 --disable-openapi-validation 和 --dry-run 查看输出内容。
控制空格( 对 yaml 格式文件很有意义)
{{- }} 可以去除前面的空格
{{ -}} 可以去除后面的空格
Helm 安装时,变量优先级(优先级为values.yaml最低,--set参数最高)
默认使用
values.yaml < 父chart的values.yaml< 用户提供values文件 < --set参数 高优先级覆盖第优先级变量值
Helm按照以下顺序安装资源:
- Namespace
- NetworkPolicy
- ResourceQuota
- LimitRange
- PodSecurityPolicy
- PodDisruptionBudget
- ServiceAccount
- Secret
- SecretList
- ConfigMap
- StorageClass
- PersistentVolume
- PersistentVolumeClaim
- CustomResourceDefinition
- ClusterRole
- ClusterRoleList
- ClusterRoleBinding
- ClusterRoleBindingList
- Role
- RoleList
- RoleBinding
- RoleBindingList
- Service
- DaemonSet
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- StatefulSet
- Job
- CronJob
- Ingress
- APIService