【问题标题】:How to validate Helm values that are not present in values.yaml如何验证 values.yaml 中不存在的 Helm 值
【发布时间】:2020-02-02 09:58:43
【问题描述】:

输入

我正在编写一个包含以下 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

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    在 Helm 3 中,您可以使用 JSON Schema Validation,您可以阅读它here。您可以使用IF condition there

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

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2021-06-17
      • 2021-06-02
      • 2020-03-31
      • 2020-03-02
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多