簡體   English   中英

是否可以在 values.yaml 的 inner helm chart 中使用全局變量

[英]is it possible to use global variables in values.yaml of inner helm chart

我有兩個舵圖,第二個嵌套到第一棵樹 output:

.
└── outerChart
    ├── charts
    │   └── innerChart
    │       ├── charts
    │       ├── Chart.yaml
    │       ├── templates
    │       │   ├── deployment.yaml
    │       │   ├── _helpers.tpl
    │       │   ├── ingress.yaml
    │       │   ├── NOTES.txt
    │       │   ├── serviceaccount.yaml
    │       │   └── service.yaml
    │       └── values.yaml
    ├── Chart.yaml
    ├── templates
    └── values.yaml

我在外部values.yaml中有一個全局變量:

global:
 myreplicacount: 4

在嵌套圖表中有一個值文件

replicaCount: 1

以及使用它的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "foo.fullname" . }}
  labels:
{{ include "foo.labels" . | indent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}

使用全局變量的直接方法是替換:

replicas: {{ .Values.replicaCount }}

和:

replicas: {{ .Values.global.myreplicacount }}

deployment.yaml中。

但是可以在嵌套values.yaml中使用它嗎? 我想保持內部圖表完好無損。 我陷入這樣一種情況,一個軟件團隊為我提供內部圖表,另一個軟件團隊通過全局變量提供所需的配置。 replicaCount只是一個例子,它們有很多變量需要更改,如果我編輯內部圖表,將使內部圖表更新變得困難。

只是添加:

replicaCount: {{ .Values.global.myreplicacount }}

在 outerChart/charts/innerChart/values.yaml 返回

): error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.global.myreplicacount":interface {}(nil)}

在嵌套圖表中, .Values被視為.Values.nested的內容(使用requirements.yamlChart.yaml中的任何依賴名稱),與頂級global:鍵合並。

# requirements.yaml
- name: nested   # <-- this name will be used in values.yaml
  version: "^1"
  repository: ...

您可以使用其名稱作為values.yaml中的鍵為該依賴項提供特定設置。 這不需要global:或對依賴關系圖進行任何更改。

# outer chart values.yaml, or `helm install -f` YAML file
nested:          # <-- matches name: in requirements.yaml above
  replicaCount: 1

特別是對於部署副本計數,我更喜歡此選項而不是其他可能的選項。 很可能每個 Deployment 和 StatefulSet 都需要不同的副本數,尤其是在多個圖表中,並且全局地說“絕對所有東西都恰好有 4 個副本”是沒有意義的。

如果您可以編輯嵌套圖表,並且希望它有選擇地接受global:值,那么如果未設置本地值,您可以接受

# charts/nested/deployment.yaml
replicas: {{ .Values.replicaCount | default .Values.global.replicaCount | default 1 }}

一般來說,你想要實現的目標並沒有得到真正的支持。 但是,我正在考慮可能對您有所幫助的簡單解決方法。

在運行helm install命令或您使用的任何命令之前,您可以使用yq實用程序將嵌套values.yaml中的值替換為外部values.yaml (假設您與運行tree命令的目錄位於同一目錄中):

yq e -i ".replicaCount = $(yq e '.global.myreplicacount' ./outerChart/values.yaml)" ./outerChart/charts/innerChart/values.yaml

我們將內部values.yaml中的replicaCount值設置為外部values.yamlglobal.myreplicacount中設置的值,僅通過使用yq實用程序,您無需手動編輯。

您可以在腳本中插入多個yq命令,並在每次 helm 部署之前運行它,這樣您將在嵌套值中獲得值values.yaml始終是最新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM