Helm Chart模板详述和样例

本文详细介绍了Helm Chart模板的使用,包括模板化Kubernetes清单文件、变量、内置对象、Values文件、模板指令、函数、流程控制以及命名模板。通过示例展示了如何利用模板进行动态替换,以及如何使用with、range等控制结构和indent、quote等函数。同时,探讨了_Helpers.tpl文件在管理命名模板中的作用。
摘要由CSDN通过智能技术生成

Helm最核心的就是模板,即模板化的Kubernetes清单文件,模板经过渲染后会被提交到Kubernetes中,本质上就是Go语言的template模板,模板文件位于template/目录中。

将Kubernetes清单文件中可能经常变动的字段,通过指定一个变量,在安装的过程中该变量将被值value动态替换掉,这个过程就是模板的渲染。

变量的值定义在values.yaml文件中,该文件中定义了变量的缺省值,但可以在helm install命令中配置新的值来覆盖缺省值。

  • 内置对象

对象从模板引擎传递到模板中。如使用{ {.Release.Name}}将Release的名称插入到模板中。Release是可以在模板中访问的顶级对象之一。

对象可以很简单,只有一个值。或者他们可以包含其他对象或函数。例如,Release对象包含多个对象(如Release.Name),并且Files对象具有一些函数。

Helm内置了多个顶级对象:

  • Release:这个对象描述了Release本身,它里面有几个对象:
    • Release.Name:Release名称。
    • Release.Namespace:Release的Namespace。
    • Release.IsUpgrade:如果当前操作是升级或回滚,则将其设置为true。
    • Release.IsInstall:如果当前操作是安装,则设置为true。
    • Release.Revision:此Release 的修订版本号。
    • Release.Service:渲染此模板的服务,Helm中总是“Helm”。
  • Values:从values.yaml文件和用户提供的文件传入模板的值。默认情况下,Values是空的。
  • Chart:Chart.yaml文件的内容。
  • Files:提供对Chart中所有非特殊文件的访问。虽然您不能使用它来访问模板,但是可以使用它来访问Chart图表中的其他文件。
    • Files.Get是用于按名称获取文件。
    • Files.GetBytes是用于以字节数组而不是字符串的形式获取文件内容的函数。 这对于诸如图像之类的东西很有用。
    • Files.Glob是一个函数,该函数返回名称与给定的Shell Glob模式匹配的文件列表。
    • Files.Lines是一项功能,可逐行读取文件。 这对于遍历文件中的每一行很有用。
    • Files.AsSecrets是一个函数,以Base 64编码的字符串形式返回文件主体。
    • Files.AsConfig是一个将文件正文作为YAML映射返回的函数。
  • Capabilities:提供了有关Kubernetes集群支持哪些功能的信息。
    • Capabilities.APIVersions是一组版本。
    • Capabilities.APIVersions.Has:$version指示群集上是否有版本(例如,batch/v1)或资源(例如,apps/v1/Deployment)。
    • Capabilities.KubeVersion是Kubernetes版本。
    • Capabilities.KubeVersion.Version是Kubernetes版本。
    • Capabilities.KubeVersion.Major是Kubernetes的主要版本。
    • Capabilities.KubeVersion.Minor是Kubernetes的次要版本。
  • Template:包含有关正在执行的当前模板的信息。
    • Name:当前模板的命名空间文件路径(例如mychart/templates/mytemplate.yaml)
    • BasePath:当前Chart的模板目录的命名空间路径(例如mychart/templates)。

这些值可用于任何顶级模板。内置值始终以大写字母开头,这符合Go的命名约定。

  • Values文件

四个内置对象之一的Values,该对象提供对传入Chart的值的访问。其内容来自四个来源:

  • Chart中的values.yaml文件。
  • 如果这是一个子Chart,来自父Chart的values.yaml文件。
  • values文件通过helm install或helm upgrade的-f标志传入文件(helm install -f myvals.yaml ./mychart)。
  • 通过–set(helm install --set foo=bar ./mychart)。

上面的列表按照特定的顺序排列:values.yaml是默认级别,父级Chart的可以覆盖该默认级别,而该values.yaml又可以被用户提供的values文件覆盖,而该文件又可以被–set参数覆盖。

我们先创建一个Chart。

helm create mychart
Creating mychart

我们将默认的values.yaml文件内容删除,并设置一个参数:

vi mychart/values.yaml
favoriteDrink: coffee

为了简单起见,删除templates/目录中所有文件,并创建configmap.yaml模板文件。

模板指令放在{ {和}}块之间,模板指令{ { .Release.Name }}表示将Release名称注入模板。可以将传递到模板中的值视为命名空间对象,其中句号".“用来分割每个命名空间元素,前导”."表示当前的作用域,此处表示顶级命名空间。{ { .Release.Name }}表示从顶级命名空间开始,找到Release对象,然后在其中查找名为Name的对象。{ { .Values.favoriteDrink }}表示从顶级命名空间开始,找到Values对象,然后在其中查找名为favoriteDrink的对象。

rm -rf mychart/templates/*

vi mychart/templates/configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: {
  { .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {
  { .Values.favoriteDrink }}

我们看看渲染的效果。

helm template myrelease mychart
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myrelease-configmap
data:
  myvalue: "Hello World"
  drink: coffee

参数favoriteDrink在默认values.yaml文件中设置为coffee,但可以在helm template命令中通过加一个–set添标志来覆盖,因为–set的优先级更高。

helm template myrelease mychart --set favoriteDrink=tea
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myrelease-configmap
data:
  myvalue: "Hello World"
  drink: tea

values文件也可以包含更多结构化内容。在values.yaml文件中可以创

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值