内置对象

对象是从模板引擎传递到模板中的。您的代码可以传递对象(我们在查看 withrange 语句时会看到示例)。甚至有一些方法可以在您的模板内部创建新对象,例如使用我们稍后将看到的 tuple 函数。

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

在上一节中,我们使用 {{ .Release.Name }} 将版本的名称插入模板中。Release 是您可以在模板中访问的顶级对象之一。

  • Release:此对象描述版本本身。它内部包含几个对象
    • Release.Name:版本名称
    • Release.Namespace:要发布到的命名空间(如果清单未覆盖)
    • Release.IsUpgrade:如果当前操作是升级或回滚,则将其设置为 true
    • Release.IsInstall:如果当前操作是安装,则将其设置为 true
    • Release.Revision:此版本的修订版号。在安装时,这是 1,并且在每次升级和回滚时都会递增。
    • Release.Service:正在渲染当前模板的服务。在 Helm 上,这始终是 Helm
  • Values:从 values.yaml 文件和用户提供文件中传递到模板的值。默认情况下,Values 为空。
  • ChartChart.yaml 文件的内容。Chart.yaml 中的任何数据都可以在此处访问。例如 {{ .Chart.Name }}-{{ .Chart.Version }} 将输出 mychart-0.1.0
  • Subcharts:这使父级可以访问子图表的范围(.Values、.Charts、.Releases 等)。例如 .Subcharts.mySubChart.myValue 用于访问 mySubChart 图表中的 myValue
  • Files:这使您可以访问图表中所有非特殊文件。虽然您无法使用它来访问模板,但您可以使用它来访问图表中的其他文件。有关更多信息,请参阅 访问文件 部分。
    • Files.Get 是一个按名称获取文件的函数(.Files.Get config.ini
    • 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.KubeVersionCapabilities.KubeVersion.Version 是 Kubernetes 版本。
    • Capabilities.KubeVersion.Major 是 Kubernetes 主版本。
    • Capabilities.KubeVersion.Minor 是 Kubernetes 次版本。
    • Capabilities.HelmVersion 是包含 Helm 版本详细信息的对象,它与 helm version 的输出相同。
    • Capabilities.HelmVersion.Version 是当前 Helm 版本的语义化版本格式。
    • Capabilities.HelmVersion.GitCommit 是 Helm git sha1。
    • Capabilities.HelmVersion.GitTreeState 是 Helm git 树的状态。
    • Capabilities.HelmVersion.GoVersion 是所用 Go 编译器的版本。
  • Template:包含有关正在执行的当前模板的信息
    • Template.Name:当前模板的命名空间文件路径(例如 mychart/templates/mytemplate.yaml
    • Template.BasePath:当前图表模板目录的命名空间路径(例如 mychart/templates)。

内置值始终以大写字母开头。这符合 Go 的命名约定。当您创建自己的名称时,您可以自由使用适合您的团队的约定。一些团队,例如您可能在 Artifact Hub 上看到其图表的许多团队,选择在名称中仅使用小写字母开头,以区分本地名称和内置名称。在本指南中,我们遵循该约定。