簡體   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