← 中文资源

简体中文版本

发布前对 Helm Chart 执行 Lint 与渲染校验

在 CI 中对每个 Chart 执行 lint 与模板渲染校验,提前发现 Schema 错误、缺失的 values 与失效模板,避免部署时才暴露问题。

阅读英文原文

概述

helm lint 会检查 Chart 结构、模板语法,并在存在 values.schema.json 时校验 values。它不会访问 Kubernetes API,因此 lint 通过并不代表渲染出的对象一定合法。正确做法是在 CI 中同时执行 lint 与渲染校验,并且使用与生产环境一致的 values 文件;同时开启 --strict,把警告当作错误处理,避免废弃字段被忽略。

步骤

  1. 使用生产 values 执行严格 lint:
helm lint charts/payments-api --strict -f values/production.yaml
  1. 渲染模板并对照目标 Kubernetes 版本校验对象:
helm template payments charts/payments-api -f values/production.yaml \
  | kubeconform -strict -summary -kubernetes-version 1.30.0
  1. 遍历所有环境的 values 文件,确保每个环境都能渲染:
for f in values/*.yaml; do
  helm template payments charts/payments-api -f "$f" > /dev/null || exit 1
done
  1. 发布前确认 Chart 版本号已递增,并与发布标签一致:
helm show chart charts/payments-api | grep '^version:'

验证

期望 lint 输出 1 chart(s) linted, 0 chart(s) failed;kubeconform 汇总为 0 errors;所有环境的 values 均能成功渲染。将渲染后的清单作为构建产物保存,它就是实际被 apply 的内容,也是评审时需要 diff 的对象。若 kubeconform 报错,先确认 -kubernetes-version 与目标集群小版本一致,再为自定义资源补充 schema 位置,而不是直接关闭校验。

注意事项

  • lint 不校验 values 的数据类型,只有提供 values.schema.json 才能真正拦截类型错误。
  • 渲染结果仍可能被准入控制器改写,与集群中的实际对象存在差异。
  • kubeconform 默认 schema 可能比集群更新,应固定 Kubernetes 版本,并为 CRD 提供 schema。
  • Chart 版本未递增会导致仓库拒绝推送或覆盖旧包,使回滚目标变得不明确。
  • 建议把 lint、渲染和版本检查放在同一个 job,用一个必需状态检查覆盖全部规则。