🎐

Helm

属于 Kubernetes 的包管理器

Helm | 文档首页

介绍

元素(名词)

notion image

命令

常见命令

notion image

详细命令介绍

模版知识

notion image

创建目录

根据这些描述可以看出来,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 集群,所以返回的是空列表
  • (eqneltgtandor) 运算符

管道

{{ .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