概述
helm lint 会检查 Chart 结构、模板语法,并在存在 values.schema.json 时校验 values。它不会访问 Kubernetes API,因此 lint 通过并不代表渲染出的对象一定合法。正确做法是在 CI 中同时执行 lint 与渲染校验,并且使用与生产环境一致的 values 文件;同时开启 --strict,把警告当作错误处理,避免废弃字段被忽略。
步骤
- 使用生产 values 执行严格 lint:
helm lint charts/payments-api --strict -f values/production.yaml
- 渲染模板并对照目标 Kubernetes 版本校验对象:
helm template payments charts/payments-api -f values/production.yaml \
| kubeconform -strict -summary -kubernetes-version 1.30.0
- 遍历所有环境的 values 文件,确保每个环境都能渲染:
for f in values/*.yaml; do
helm template payments charts/payments-api -f "$f" > /dev/null || exit 1
done
- 发布前确认 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,用一个必需状态检查覆盖全部规则。