gpt4 book ai didi

kubernetes - 安装 helm chart 时的 nil 指针评估接口(interface)

转载 作者:行者123 更新时间:2023-12-05 00:54:40 25 4
gpt4 key购买 nike

我正在尝试将图表安装到我的集群,但出现错误

Error: template: go-api/templates/deployment.yaml:18:24: executing "go-api/templates/deployment.yaml" 
at <.Values.deployment.container.name>: nil pointer evaluating interface {}.name

但是,我对另外 2 个图表执行了相同的命令,并且效果很好。

我使用的模板文件是这样的:

apiVersion: apps/v1
kind: Deployment
metadata:
namespace: {{ .Values.namespace}}
labels: {{- include "chart.labels" . | nindent 4 }}
name: {{ .Values.deployment.name}}
spec:
replicas: {{ .Values.deployment.replicas}}
selector:
matchLabels: {{ include "chart.matchLabels" . | nindent 6 }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ template "chart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ .Values.deployment.container.name }}
image: {{ .Values.deployment.container.image }}
imagePullPolicy: Never
ports:
- containerPort: {{ .Values.deployment.container.port }}

最佳答案

如果您用于安装的 Helm 值没有该特定 block ,则可能会发生这种情况:

namespace: default
deployment:
name: a-name
replicas: 1
# but no container:

为避免模板代码中出现这种特定错误,将父字典挑选到变量中很有用;然后,如果 parent 完全不在,您可以决定如何处理。如果有可选字段或合理的默认值,这种技术会更有用:

{{- $deployment := .Values.deployment | default dict }}
metadata:
name: {{ $deployment.name | default (include "chart.fullname" .) }}
spec:
{{- if $deployment.replicas }}
replicas: {{ $deployment.replicas }}
{{- end }}

如果你真的无法在没有该值的情况下工作,Helm 有一个未记录的 required 函数,可以打印更具体的错误消息。

{{- $deployment := .Values.deployment | required "deployment configuration is required" }}

(我的经验是,作为最终用户,required 值有些令人沮丧,尤其是当您尝试运行其他人的图表时,如果可能,我会尽量避免这种情况。)

鉴于您显示的内容,您也可能使图表可配置。例如,容器名称主要是一个细节,只有在您拥有多容器 pod(或正在使用 Istio)时才会出现;容器端口是您正在运行的图像的固定属性。您可以在 Helm 模板文件中安全地修复这些值,然后为副本计数或图像名称等内容提供默认值是合理的(考虑将存储库名称、图像名称和标签设置为单独的变量)。

{{- $deployment := .Values.deployment | default dict }}
{{- $registry := $deployment.registry | default "docker.io" }}
{{- $image := $deployment.image | default "my/image" }}
{{- $tag := $deployment.tag | default "latest" }}
containers:
- name: app # fixed
image: {{ printf "%s/%s:%s" $registry $image $tag }}
{{- with .Values.imagePullPolicy }}
imagePullPolicy: {{ . }}
{{- end }}
ports:
- name: http
containerPort: 3000 # fixed

关于kubernetes - 安装 helm chart 时的 nil 指针评估接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65790905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com