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

问题描述 投票:0回答:1

输入

我正在写一个包含以下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自动缩放器(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时,解析模板将抛出nil异常(即使backend.hpa.enabled = false)。

尝试2

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

backend:
  container:
    resources:
      requests:
        cpu: ""
  hpa:
    enabled: false
    targetCPUUtilizationPercentage: 50
kubernetes kubernetes-helm
1个回答
1
投票
在Helm 3中,您可以使用JSON模式验证,您可以阅读有关它的内容here。您可以使用IF condition there

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

© www.soinside.com 2019 - 2024. All rights reserved.