How to fix Helm "installation failed" complaning about a nil pointer evaluating interface on fullnameOverride

问题描述 投票:0回答:1

我正在构建一个我正在尝试安装的新 Helm 图表 (mychart)。

A

values.yaml
存在且其内容指定全名Override:

fullnameOverride: "myapp"

我运行以下命令

helm install --dry-run -f "mychart-stack/values.yaml" mychart-stack1 ./mychart-stack

它给了我错误:

模板:mychart-stack/templates/persistentvolume.local-storage.range.yml:5:14:执行“mychart-stack/templates/persistentvolume.local-storage.range.yml”在:错误调用包括:模板: mychart-stack/templates/_helpers.tpl:14:14: 在<.Values.fullnameOverride>处执行“mychart-stack.fullname”:nil指针评估接口{}.fullnameOverride

当您要求 Helm 生成图表示例时,

mychart-stack/templates/_helpers.tpl:14:14
是预生成的。

错误 (14:14) 与以下自动生成代码的第一行相关联:

{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}

更多上下文,因为它在检查 persistentvolume.local-storage.range.yml 时抛出错误,这里是文件的内容:

{{- range .Values.persistentVolume.localStorage }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-{{ include "mychart-stack.fullname" }}-{{ .name }}
spec:
  capacity:
    storage: 20Gi
  # le champ volumeMode requiert l'activation de la "feature gate" Alpha BlockVolume
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage-{{ include "mychart-stack.fullname" }}--{{ .name }}
  local:
    path: {{ .Values.persistentVolume.basePath }}/{{ .name }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - {{ .Values.hostName }}
{{- end }}

不知道哪里出了问题,代码好像没有定义好。 我试图在 --debug 模式下运行它,但它没有帮助(同样的错误)。

kubernetes kubernetes-helm microk8s
1个回答
0
投票

最后,问题不在于 values.yaml 设置不正确,而在于它在模板中的使用方式。

当使用包含来自 .tpl 文件的定义时(这个是由 Helm 自动生成的),我们必须小心不要在范围内。

我正在创建一系列资产,因此它似乎会在该范围的上下文中运行代码。

您的条件逻辑正在范围循环内进行评估。这意味着 。您用来访问 Values 的值不是您期望的值,因为它在每次范围迭代评估时都会被覆盖。

ref: ingress.yaml 模板在 renderring 中返回错误 --> nil pointer evaluating interface {}.service

这意味着我们应该使用

$
而不是
.
符号,因为它引用了全局范围。

例子:

{{- include "mychart-stack.fullname" $ }}
© www.soinside.com 2019 - 2024. All rights reserved.