繁体   English   中英

如何验证 values.yaml 中不存在的 Helm 值

[英]How to validate Helm values that are not present in values.yaml

输入

我正在编写一个包含以下 values.yaml 的舵图:

backend:
  container:
    resources: {}
  hpa:
    enabled: false
    targetCPUUtilizationPercentage: 50

然后在模板文件中,部署定义如下所示:

template:
  spec:
    containers:
      - name: "some-name"
        image: "some-repo/some-image:latest"
        resources:
          {{- toYaml .Values.backend.container.resources | nindent 12 }}

问题

默认情况下,我禁用 Horizo​​ntal Pod Autoscaler ( backend.hpa.enabled=false ),但如果用户启用它,我想确保属性backend.container.resources.requests.cpu已指定。 否则 HPA 将无法工作。 所以我想在这种情况下抛出异常。 如何实现这样的验证检查?

尝试 1

我尝试在以下包装器中编写 HPA 模板:

{{- if .Values.backend.hpa.enabled -}}
{{- if required "Specify requests!" .Values.backend.container.resources.requests.cpu -}}
...
{{- end -}}
{{- end -}}

但是当backend.container.resources.requests.cpu未指定时(即使backend.hpa.enabled=false ),它会在解析模板上抛出 nil 异常。

尝试 2

如果我用下面的片段替换 values.yaml,那么 kubernetes 将不允许设置这样的 cpu 值(非法格式,null 也是无效的)。 这是我可以分配给 cpu 字段的东西,在 kubernetes 中将被视为默认值吗? 我认为这可能不是很优雅,但可行的解决方案。

backend:
  container:
    resources:
      requests:
        cpu: ""
  hpa:
    enabled: false
    targetCPUUtilizationPercentage: 50

在 Helm 3 中,您可以使用 JSON Schema Validation,您可以在此处阅读相关内容。 您可以在那里使用IF 条件

我不会尝试在图表本身中进行验证,因为它会使您的舵图更加复杂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM