# 在values.yaml文件中定义的值通过 Values 对象传递到templates下的YAML模板清单中
# 下例在YAML模板清单中通常最左侧的点 . 表示全局作用域 (引用全局对象) 而中间的点类似js对Json对象的属性引用
{{ .Values.key }}
# Values对象代表着values.yaml中定义的参数,通过.Values对象可引用该文件内任意的参数
{{ .Values.image.repository }}
# helm在全局作用域中有两个重要的全局对象:
# 1.Values
# 2.Release
# 内置对象 Values 提供对传入chart的值的访问,其内容来自4个来源
# 1.chart中的values.yaml文件
# 2.若这是个子chart,来自父chart的values.yaml文件
# 3.在执行 install 或 upgrade 时通过 -f或--values 指定传入的values.yaml,如: helm install ./mychart -f myvals.yaml
# 4.在执行 install 或 upgrade 时通过 --set 选项传入,如 helm install ./mychart --set foo=bar
# -------------------------------------------------- {{ .Release.X }}
# Release代表应用发布时带有的属性(介绍信息),注意这里和Values中的模板区分开
# 模板替换还是用Values,下面是Release对象包含的属性字段 ...
{{ .Release.Name }} # release的名字 (在Chart.yaml中定义或通过helm命令在部署时指定)
{{ .Release.Time }} # release部署时间
{{ .Release.Namespace }} # kubernetes命名空间
{{ .Release.Revision }} # release版本号,是递增值,每次更新都加一
{{ .Release.IsUpgrade }} # 若值为true则代表该release是一次更新
{{ .Release.IsInstall }} # 若值为true则代表该release是一次安装
# -------------------------------------------------- 父子引用1
# 使用export格式
# 若子chart在其values.yaml的root下有个叫做exports的key
# 则父chart就可以直接在requirements里通过指定需要import的key来将值import到自身的values.yaml里面
# parent's requirements.yaml file
...
import-values:
- data
# child's values.yaml file
...
exports:
data:
myint: 99
# helm会发现用户指定了要 import data 这个key,所以就去child的values.yaml里面寻找
# 发现了这个key有被export,于是就import了它的内容
# 此时parent的values如下 (parent's values file)
...
myint: 99
# 需注意在parent的values中data这个key不会被import进来,只会import data的内容
# 如果希望把这个key也一起import进来可使用下面说的方法 ...
# -------------------------------------------------- 父子引用2
# 使用child/parent格式
# 若想要获得不在名为"exports"这个key下面的值,就必须指定在child中要import的路径,以及在parent中的对应路径
# parent's requirements.yaml file
dependencies:
- name: subchart1
repository: http://localhost:10191
version: 0.1.0
...
import-values:
- child: default.data
parent: myimports
# 根据如上的这个requirements文件,helm将在child的chart中寻找default.data的值并导入到parent中的 myimports 这个路径下
# 假设parent和child初始的values如下
# parent's values.yaml file
myimports:
myint: 0
mybool: false
mystring: "helm rocks!"
# subchart1's values.yaml file
default:
data:
myint: 999
mybool: true
# 那么导入之后,真正渲染出来的parent的values的值为:
# parent's final values
myimports:
myint: 999
mybool: true
mystring: "helm rocks!"
# 可看出parent中的values把myint和mybool从subchart1里面import了进来
# -------------------------------------------------- 父chart中修改子chart的values.yaml
# 假设子chart名字是hello, 要修改hello的values.yaml文件的root下的image的值
# 那么可以在父chart中通过一下方式进行修改
# in parent's values.yaml
...
hello:
image: 'xxxx/test:hello'
# 这样hello的values.yaml文件的image值就会被覆盖修改
# -------------------------------------------------- 利用global关键字
# 若父chart下所有子chart都有共同的变量A,要通过以上方式修改其值显示比较麻烦,这时可用关键字global
# subchart1's values.yaml file
global:
affinityValue: "test"
# in parent's values.yaml
global:
affinityValue: "debug"
# 这样所有子chart的 global.affinityValue 都将被覆盖修改
附
# -------------------------------------------------- {{ .Files.X }}
# Files 提供对 chart 中所有非特殊文件的访问。虽然无法使用它来访问模板,但能用其访问 chart 中的其他文件
Files.Get # 是按名称获取文件的函数(.Files.Get config.ini)
Files.GetBytes # 是将文件内容作为字节数组而不是字符串获取的函数,对于像图片这样的东西很有用
Files.Glob # is a function that returns a list of files whose names match the given shell glob pattern.
Files.Lines # is a function that reads a file line-by-line. This is useful for iterating over each line in a file.
Files.AsSecrets # is a function that returns the file bodies as Base 64 encoded strings.
Files.AsConfig # is a function that returns file bodies as a YAML map.
# 在 templates/configmap.yaml 中描述的是nginx的配置文件
# 这些配置可直接写入模本文件,也可通过Files对象把普通文件内容引入进来 ...
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
nginx.conf: {{.Files.Get "files/nginx.conf" | printf "%s" | indent 4}}
# 可配置成通用模板文件,引入的nginx配置文件通过 .Release.Name 传入,这样实现了解耦
# -------------------------------------------------- Capabilities
# 这提供了关于 Kubernetes 集群支持的功能的信息
# -------------------------------------------------- 其他
# Template 包含有关正在执行的当前模板的信息
Template.Name # 当前使用的模板文件,如 mychart/templates/configmap.yaml
Template.BasePath # 当前 chart 模板目录的 namespace 路径,如 mychart/templates