我想允许我们的开发人员将动态参数传递给头盔模板(Kubernetes作业)。目前,我在helm模板中的参数有些静态(除了某些值),看起来像这样
Args:
--arg1
value1
--arg2
value2
--sql-cmd
select * from db
如果我是使用不带Kubernetes的docker容器运行任务的,那么我将像这样传递参数:
docker run my-image --arg1 value1 --arg2 value2 --sql-cmd "select * from db"
是否有任何方法可以将舵图中的参数模板化,从而可以将任意数量的参数传递给模板。
例如。
cat values.yaml
...
arguments: --arg1 value1 --arg2 value2 --sql-cmd "select * from db"
...
或
cat values.yaml
...
arguments: --arg3 value3
...
我尝试了几种方法,但没有成功。这是一个示例:
Args:
{{ range .Values.arguments }}
{{ . }}
{{ end }}
答案 0 :(得分:1)
是的。在values.yaml
中,您需要给它一个数组而不是用空格分隔的字符串。
cat values.yaml
...
arguments: ['--arg3', 'value3', '--arg2', 'value2']
...
或
cat values.yaml
...
arguments:
- --arg3
- value3
- --arg2
- value2
...
然后您喜欢模板中提到的内容:
Args:
{{ range .Values.arguments }}
{{ . }}
{{ end }}
答案 1 :(得分:0)
Rico的答案有待改进。 使用前面的示例,我收到了以下错误:
templates/deployment.yaml: error converting YAML to JSON: yaml
或
failed to get versionedObject: unable to convert unstructured object to apps/v1beta2, Kind=Deployment: cannot restore slice from string
这是我使用逗号进行工作的设置: (列表的垂直格式更具可读性)
cat values.yaml
...
arguments: [
"--arg3,",
"value3,",
"--arg2,",
"value2,",
]
...
应该这样做:
```
args: [
{{ range .Values.arguments }}
{{ . }}
{{ end }}
]
```
答案 2 :(得分:0)
在您的值文件中,将参数定义为:
extraArgs:
argument1: value1
argument2: value2
booleanArg1:
在您的模板中执行:
args:
{{- range $key, $value := .Values.extraArgs }}
{{- if $value }}
- --{{ $key }}={{ $value }}
{{- else }}
- --{{ $key }}
{{- end }}
{{- end }}
容易
答案 3 :(得分:0)
helm install --name "airflow" stable/airflow --set secrets.database=mydatabase,secrets.password=mypassword
这是有问题的头盔图表:https://github.com/helm/charts/tree/master/stable/airflow
现在我想覆盖头盔图表中的默认值
secrets.database和
secrets.password,所以我使用--set参数,然后是用逗号分隔的键=值对。
helm install --name "<name for your chart>" <chart> --set key0=value0,key1=value1,key2=value2,key3=value3
答案 4 :(得分:0)
由于某些限制,我不得不使用 split
并使用 delimiter
,所以在我的情况下:
deployment.yaml
:
{{- if .Values.deployment.args }}
args:
{{- range (split " " .Values.deployment.args) }}
- {{ . }}
{{- end }}
{{- end }}
使用 --set
时:
helm install --set deployment.args="--inspect server.js" ...
结果:
- args:
- --inspect
- server.js