kubernetes - 如何修复 Helm "installation failed"提示 fullnameOverride 上的 nil 指针评估接口(interface)

标签 kubernetes kubernetes-helm microk8s

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

存在 values.yaml 且其内容指定 fullnameOverride:

fullnameOverride: "myapp"

我运行以下命令

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

它给了我错误:

template: mychart-stack/templates/persistentvolume.local-storage.range.yml:5:14: executing "mychart-stack/templates/persistentvolume.local-storage.range.yml" at <include "mychart-stack.fullname" .>: error calling include: template: mychart-stack/templates/_helpers.tpl:14:14: executing "mychart-stack.fullname" at <.Values.fullnameOverride>: nil pointer evaluating interface {}.fullnameOverride

mychart-stack/templates/_helpers.tpl:14:14 是当您要求 Helm 生成图表示例时预先生成的。

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

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

更多上下文,因为它在检查 permanentvolume.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 模式下运行它,但它没有帮助(相同的错误)。

最佳答案

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

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

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

Your conditional logic is being evaluated inside a range loop. This means . you're using to access Values is not the one you expect it to be, as it's overridden for each range iteration evaluation.

引用:ingress.yaml template returns error in renderring --> nil pointer evaluating interface {}.service

这意味着我们应该使用 $ 而不是 . 表示法,因为它引用全局范围。

示例:

{{- include "mychart-stack.fullname" $ }}

关于kubernetes - 如何修复 Helm "installation failed"提示 fullnameOverride 上的 nil 指针评估接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75544858/

相关文章:

cassandra - 连接到部署在GCP上的cassandra集群

service - k8s-Kubernetes-服务更新-错误

kubernetes - 如何配置 Helm chart 的 Ingress 文件来部署 gRPC 服务?

ubuntu - Microk8s 停止工作。 Status 说没有运行,inspect 只返回四个服务

postgresql - microk8s集群中如何访问本地安装的postgresql

Kubernetes 无法从通过/etc/hosts 指向私有(private)域的私有(private)注册表中提取镜像

kubernetes - 无法通过命令行创建ExternalName类型服务

kubernetes - 如何保证我的 Kubernetes EBS 卷与部署位于同一个 AZ 中?

kubernetes - 如何使用 imagePullSecrets : [] in Helm 3

kubernetes - yaml 解析错误 Helm