Lazy loaded image
kustomize 配合 helmCharts 直接生成 charts 资源纳入版本管理
Words 1501Read Time 4 min
2026-2-1
2026-2-1
date
related_level
slug
k8s_kustomize_helmcharts
type
Post
relate_date
summary
用 kustomize 启用 Helm 渲染 Chart,固化生成结果并纳入 Git 管理,便于多环境复用与审计
status
Published
tags
k8s
版本管理
category
运维管理
last_updated
Feb 1, 2026 05:23 PM
是否已更新
orginal_page
是否推荐
 
参考资料
  • AimHigherGGAimHigherGGKustomize 組み込みの helmCharts で Helm を管理する
helmCharts 可用字段
  • name:要使用的 Chart 名称
  • repo:[可选] 包含该 Chart 的仓库 URL
    • 如果提供了此字段,生成器将尝试从远程获取 Chart;否则,将尝试从 chartHome 目录加载本地 Chart
  • version:[可选] Chart 的版本。若省略,则使用最新版本
  • releaseName:[可选] 在 Chart 中设置的 Release 名称
  • namespace:[可选] 用于 helm template 命令中 --namespace 标志的命名空间
  • valuesFile:[可选] values 文件的路径
  • valuesInline:直接在配置中指定的值映射(而非通过单独的文件)
  • valuesMerge:指定如何将 valuesInline 与 valuesFile 中的值进行合并
    • 可用值
      • merge
      • override,默认
      • replace
  • includeCRDs:是否让 Helm 同时生成 CustomResourceDefinitions
    • 默认为 false
  • skipHooks:[可选] 在展开 Chart 时跳过执行 Helm hooks
    • Kustomize 默认会渲染 templates 目录下的所有内容,这可能导致输出结果与 helm install 不一致。启用此选项可抑制该行为
  • additionalValuesFiles:[可选] 一个本地 values 文件路径列表,这些文件将与当前 values 文件一同使用
  • skipTests:[可选] 从模板化输出中跳过测试(tests)
  • apiVersions:[可选] 用于 Capabilities.APIVersions 的 Kubernetes API 版本列表
  • nameTemplate:[可选] 指定用于命名 Release 的名称模板
  • kubeVersion:[可选] 指定 Helm 用于 Capabilities.KubeVersion 的 Kubernetes 版本
helmGlobals 存储影响相关 helmCharts 字段中所有条目的全局设置
  • chartHome:一个相对于 kustomization 根目录的文件路径,指向一个包含多个子目录的目录,每个子目录对应一个要包含在 kustomization 中的 Helm Chart
    • 该字段的默认值为 “charts”
    • 例如,kustomize 会在 {kustomizationRoot}/{chartHome}/minecraft 路径下查找名为 minecraft 的 Chart
      • 如果在构建时该 Chart 已存在于该位置,kustomize 将直接使用本地找到的版本,而不会检查版本号或时间戳
      • 如果该 Chart 不存在,kustomize 将根据 kustomization 文件中指定的版本号尝试拉取该 Chart 并保存到此位置
    • 若要禁止自动拉取行为,只需确保 Chart 已预先放置在该目录中即可
  • configHome:kustomize 应通过 HELM_CONFIG_HOME 环境变量传递给 Helm 的配置目录路径
    • kustomize 本身不会读取或写入该目录
    • 如果未指定此字段,则默认使用 {tmpDir}/helm,其中 {tmpDir} 是 kustomize 为 Helm 创建的一个临时目录
kustomize build --enable-helm 实际包装了 helm pullhelm template 两个指令
  • 样例
  • helmCommand=${MYGOBIN:-~/go/bin}/helmV3
    • helm 二进制文件路径,根据你实际安装进行配置
  • DEMO_HOME=$(mktemp -d) && mkdir -p $DEMO_HOME/base $DEMO_HOME/dev $DEMO_HOME/prod
vim $DEMO_HOME/base/kustomization.yaml
vim $DEMO_HOME/dev/kustomization.yaml
vim $DEMO_HOME/prod/kustomization.yaml
DEMO_HOME 结构如下
  • tree $DEMO_HOME
执行 kustomize build 构筑 base chart
  • --enable-helm 必须设置
  • --helm-command 为 helm 二进制文件路径
    • 默认为 helm
  • 如果有位于项目根目录之外的文件,需要添加 --load-restrictor=LoadRestrictionsNone
如果是作为 kubectl 插件则执行 kubectl kustomize
  • --enable-helm 必须设置
  • --helm-command 为 helm 二进制文件路径
    • 默认为 helm
kustomize build --enable-helm 相当于调用 helm 拉取 chart 后并渲染了 template
  • 如果不想拉取 chart 的话可以先手动 pull 一次
如下包装了 helm pull
如下包装了 helm template
后续比较 dev 和 prod
  • diff <(kubectl kustomize --enable-helm --helm-command "$helmCommand" "$DEMO_HOME/dev") <(kubectl kustomize --enable-helm --helm-command "$helmCommand" "$DEMO_HOME/prod") | less
最终得到 DEMO_HOME 结构如下
  • tree $DEMO_HOME
  • 后续版本更新会拉取 chart 到 base/charts 文件夹下的对应版本文件夹
values 文件可以根据不同环境需求放到对应 kustomization 文件内
kustomization 内可以这样定义 values
kustomize 结构安排如下
kustomize build --enable-helm 进行版本管理
  • 优点
    • helmCharts 支持多个 Chart 组合
      values 文件与环境结合,不需要重复编写基础部分
      • 可以同时用 Helm values + Kustomize patch
      • 生成结果固定,方便 CI 以及安全审计
      • 与 GitOps 工作流结合更紧密,无需依赖 Helm Release 状态
    • 缺点
      • 不支持 Helm release 版本管理
        • 通过 Git 进行管理
      • 不方便调试
        • Helm 可以显示具体错误所在
     
     
    上一篇
    Prometheus Operator 监控 CRD 资源动态生成 Prometheus 配置
    下一篇
    Prometheus 性能调优:高基数问题

    Comments
    Loading...