helm:“查找”函数始终返回空地图

Cam*_*son 2 kubernetes-helm

相关文档:https://helm.sh/docs/chart_template_guide/functions_and_pipelines/#using-the-lookup-function

我的头盔版本:

$ helm version
version.BuildInfo{Version:"v3.4.1", 
GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29", 
GitTreeState:"dirty", GoVersion:"go1.15.4"}
Run Code Online (Sandbox Code Playgroud)

重现的最小示例:

  1. 创建一个新的 Helm Chart 并安装它。
    $ helm create my-chart
    $ helm install my-chart ./my-chart
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个简单的 ConfigMap。
    # my-chart/templates/configmap.yaml
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-configmap
    data:
      someKey: someValue
    
    Run Code Online (Sandbox Code Playgroud) 升级现有图表以便应用 ConfigMap。
    $ helm upgrade my-chart ./my-chart
    
    Run Code Online (Sandbox Code Playgroud)
  3. 确认 ConfigMap 存在。
    $ kubectl -n default get configmap my-configmap
    
    Run Code Online (Sandbox Code Playgroud) 其返回结果符合预期:
    NAME           DATA   AGE
    my-configmap   1      12m
    
    Run Code Online (Sandbox Code Playgroud)
  4. 尝试使用该lookup函数来引用现有的ConfigMap。
    # my-chart/templates/configmap.yaml
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-configmap
    data:
      someKey: someValue
      someOtherKey: {{ (lookup "v1" "ConfigMap" "default" "my-configmap").data.someValue }}
    
    Run Code Online (Sandbox Code Playgroud) 然后进行升级试运行。
    $ helm upgrade my-chart ./my-chart --dry-run
    
    Run Code Online (Sandbox Code Playgroud) 您将遇到 nil 指针错误:
    Error: UPGRADE FAILED: template: my-chart/templates/configmap.yaml:9:54: executing "my-
    chart/templates/configmap.yaml" at <"my-configmap">: nil pointer evaluating interface 
    {}.someValue
    
    Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

edb*_*ead 5

如果您使用标志,这是预期的行为--dry-run

来自文档

请记住,Helm 不应在 ahelm template或 a期间联系 Kubernetes API 服务器helm install|update|delete|rollback --dry-run,因此在这种情况下查找函数将返回一个空列表(即 dict)。