Helm lookup()函数未按预期工作,始终执行else分支求助
排查Helm lookup() 无法找到Secret的常见问题
以下是几个大概率导致lookup()走else分支的原因,逐一排查:
命名空间不匹配
Helm默认用当前Release的命名空间执行lookup,如果你创建的Secret不在这个命名空间里,肯定查不到。先确认Secret所在命名空间:kubectl get secrets secrets -A如果和你部署Release的命名空间不一致,要么把Secret移到目标命名空间,要么在lookup里显式指定namespace参数:
{{- $secret := lookup "v1" "Secret" "目标命名空间" "secrets" }}lookup参数顺序或格式错误
lookup的参数顺序必须是:apiVersion,kind,namespace,name,而且kind必须是大写开头的Secret(不是小写的secret)。检查你的模板写法,正确示例:{{- if lookup "v1" "Secret" .Release.Namespace "secrets" }} # Secret存在时的逻辑 {{- else }} # Secret不存在时的逻辑 {{- end }}用错了测试命令
如果是用helm template测试,这个命令默认是离线渲染,不会连接集群调用API,所以lookup会返回空值直接走else。必须用helm install --dry-run或者实际部署来测试lookup的真实结果。Secret名称拼写错误
Kubernetes资源名称大小写敏感,确认你lookup里写的secrets和集群中实际的Secret名称完全一致,执行kubectl get secrets核对。Docker Desktop集群缓存问题
偶尔Docker Desktop的Kubernetes集群会有缓存异常,试试重启Docker Desktop,或者删除并重新创建Secret:kubectl delete secret secrets kubectl create secret generic secrets --from-literal=your-key=your-value
内容的提问来源于stack exchange,提问作者Sathish Kumar
相关产品推荐
相关产品推荐

