代码之家  ›  专栏  ›  技术社区  ›  Anton Shelenkov

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

  •  0
  • Anton Shelenkov  · 技术社区  · 5 年前

    输入

    我正在编写一个包含以下值的helm图表.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 }}
    

    问题

    默认情况下,我禁用水平Pod自动缩放器( 后端.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 -}}
    

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

    尝试2

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

    backend:
      container:
        resources:
          requests:
            cpu: ""
      hpa:
        enabled: false
        targetCPUUtilizationPercentage: 50
    
    0 回复  |  直到 5 年前
        1
  •  4
  •   Rafał Leszko    5 年前

    在Helm 3中,您可以使用JSON模式验证,您可以阅读有关它的信息 here 。您可以使用 IF condition there .

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