helm 的 values.yaml 配置语法说明


# 在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


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值