You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm根据云服务商切换镜像仓库时helm package执行报错

报错原因

核心触发原因的主因是对Helm的文件渲染逻辑理解错误:

  • values.yaml 是纯静态值文件,不会执行Go Template语法渲染:Helm加载values.yaml的动作发生在模板渲染流程之前,解析阶段只会把文件内容当标准YAML处理,你在repository字段后写的{{ tpl ... }}会被识别成非法的Map键,直接抛出YAML转JSON失败的错误。
  • 额外存在三个隐性问题:
    1. templates/_helpers.tpl中定义的cloud_provider模板语法错误,if/else块层级不匹配,required语句位置错误,即使修复values的问题也会触发渲染失败。
    2. 原配置将模板逻辑存放在config/repository.config中,额外增加了文件路径依赖,且如果后续打包时漏带该文件会直接触发.Files.Get读空错误,没有必要。
    3. 原values.yaml中image.repository字段缩进错误,repository应该是image的子字段,需要缩进2空格。
修复方案

1. 修正values.yaml为纯静态值

删除values.yaml中的所有模板语法,仅保留静态配置,自动匹配的逻辑全部下沉到模板层:

configuration:
  system:
    mode:
      cloud_provider: aws

image:
  # 可留空由模板自动匹配,也可填写自定义地址覆盖默认逻辑
  repository: ""
  tag: v2.8.0
  pullPolicy: IfNotPresent

2. 修复_helpers.tpl的模板逻辑

修正cloud_provider模板的语法错误,同时新增镜像仓库匹配的模板,去掉对外部config文件的依赖:

{{- define "cloud_provider" -}}
{{- $provider := .Values.configuration.system.mode.cloud_provider | default "disabled" -}}
{{- $valid_providers := list "aws" "aliyun" -}}
{{- if not $provider -}}
{{- required "Cloud provider required at .Values.configuration.system.mode.cloud_provider due to Google registry unreachable in China" $provider -}}
{{- end -}}
{{- if not (has $provider $valid_providers) -}}
{{- fail "Invalid cloud provider set. Should be aws or aliyun" -}}
{{- end -}}
{{- $provider -}}
{{- end -}}

{{- define "image.repository" -}}
{{- if .Values.image.repository -}}
{{- .Values.image.repository -}}
{{- else -}}
{{- $provider := include "cloud_provider" . | trim -}}
{{- if eq $provider "aliyun" -}}
registry.cn-qingdao.aliyuncs.com/x/kube-state-metrics
{{- else if eq $provider "aws" -}}
k8s.gcr.io/kube-state-metrics/kube-state-metrics
{{- end -}}
{{- end -}}
{{- end -}}

如果一定要保留config/repository.config的文件存储方式,不要在values.yaml中调用tpl读取,直接在工作负载模板中调用即可,逻辑和上面的helper模板一致。

3. 在工作负载模板中引用镜像地址

在Deployment/StatefulSet等实际使用镜像的模板文件中,通过helper模板引用镜像地址,示例:

containers:
  - name: kube-state-metrics
    image: "{{ include "image.repository" . }}:{{ .Values.image.tag }}"
    imagePullPolicy: {{ .Values.image.pullPolicy }}

修复后重新执行helm package即可正常打包,模板会根据values中配置的云服务商自动匹配对应的镜像仓库地址。


内容的提问来源于stack exchange,提问作者DisplayName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 22:54:25