我正在开发一个图表,但其中有一个错误-错误地放置了imagePullSecrets
。当我尝试通过
helm install ./mychart
放错位置的元素被简单地忽略了,我想知道出了什么问题。
当我做了
helm template ./mychart | kubectl apply --dry-run -f -
而是打印:
error: error validating "STDIN": error validating data: ValidationError(Deployment.spec.template.spec.containers[0]): unknown field "imagePullSecrets" in io.k8s.api.core.v1.Container
这清楚地表明了什么是错误的。我不确定它是否符合什么蒂勒实际上做的扩展模板。
但如果我只做一个
helm install --dry-run --debug ./mychart
它只显示展开的模板,看起来还不错。
那么,我如何正确地验证我的所有模板匹配相应的模式与helm?
4条答案
按热度按时间ve7v8dk21#
您可以通过运行
helm lint ./mychart
来lint图表,如果发现问题,应打印以下内容:参见舵面绒布。
ao218c7q2#
使用kubeconform。
如果您有CRD,可能需要使用
kubeconform -ignore-missing-schemas
。我建议您提供模式版本:kubeconform -kubernetes-version 1.18
.建议:使你的图表专业化并验证它们。2例子如下。
简单:
复杂:
stszievb3#
我强烈建议使用以下两种解决方案的组合。
溶液1
使用values.schema.json在values.yaml文件上添加一个结构。
示例:
(!)此架构将应用于值以对其进行验证。调用以下任何命令时将进行验证:
为了向验证添加条件,请在此处阅读。
(*)进一步阅读:Nice article。
溶液2
在使用条件时,
values.schema.json
中的代码可能可读性较差,或者我们希望在验证中使用更动态的逻辑。在这种情况下,我们可以创建一个
validations.yaml
文件(一些供应商更喜欢使用.tpl
文件),并使用go templates添加验证逻辑。示例:
如果特定功能(启用时)需要IP或DNS:
验证逻辑可以显式编写为:
(*)也可以使用json-schema if-else语句编写此逻辑,但其可读性可能较差。
(**)考虑将所有确认放在
/tests
或/validations
文件夹下,其中所有测试都被分为单独的文件(如单元测试)。falq053o4#
为避免舵图安装失败,我建议在本地或/和CI管道中遵循以下顺序:
如果linter遇到会导致图表安装失败的情况,它将发出[ERROR]消息。
kubeval
(不支持CRD)或kubeconform
(支持CRD)验证图表Kubernetes清单是否符合Kubernetes模式:helm template [chart_name] . | kubeval
hostPath
等):helm unittest [chart_name] [chart_name]