<.Chart.name>: 无法评估类型接口 {} 中的字段名称

<.Chart.name>: can't evaluate field name in type interface {}

部署图表时出现以下错误: <.Chart.name>: 无法评估类型接口中的字段名称 {}

这是初学者的错误,字段以大写开头,即使 Chart.yaml 字段以小写开头。与 Chart.Version 和所有其他字段相同。

对于 java 开发人员来说非常奇怪。

根据official helm documentation there are terms Predefined Values and Built-in Objects

The built-in values always begin with a capital letter. This is in keeping with Go’s naming convention. When you create your own names, you are free to use a convention that suits your team

强制大写的内置值列表

  • 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
  • Files:这提供了对图表中所有非特殊文件的访问。虽然您不能使用它来访问模板,但您可以使用它来访问图表中的其他文件。有关更多信息,请参阅 访问文件 部分。
    • Files.Get 是按名称获取文件的函数 (.Files.Get config.ini)
    • Files.GetBytes 是一个将文件内容作为字节数组而不是字符串获取的函数。这对于图像之类的东西很有用。
    • Files.Glob 是一个 returns 名称与给定 shell glob 模式匹配的文件列表的函数。
    • Files.Lines 是一个逐行读取文件的函数。这对于遍历文件中的每一行很有用。
    • Files.AsSecrets是一个returns文件主体为Base 64编码字符串的函数。
    • Files.AsConfig 是一个 returns 将主体文件作为 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 次要版本。
  • Template:包含当前正在执行的模板的信息
    • Name:当前模板的命名空间文件路径(例如mychart/templates/mytemplate.yaml
    • BasePath:当前图表模板目录的命名空间路径(例如mychart/templates)。

小例子:

apiVersion: v1
kind: Service
metadata:
name: {{ template "fullname" . }}
labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.externalPort }}
    targetPort: {{ .Values.service.internalPort }}
    protocol: TCP
    name: {{ .Values.service.name }}
selector:
    app: {{ template "fullname" . }}

再一次 - 随意使用任何其他手动定义的小写值。 希望对你有帮助