我想允许我们的开发人员将动态参数传递给helm模板(Kubernetes job)。目前我在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 }}
是。在values.yaml
中,你需要给它一个数组而不是空格分隔的字符串。
cat values.yaml
...
arguments: ['--arg3', 'value3', '--arg2', 'value2']
...
要么
cat values.yaml
...
arguments:
- --arg3
- value3
- --arg2
- value2
...
然后你喜欢你在模板中提到应该这样做:
args:
{{ range .Values.arguments }}
- {{ . }}
{{ end }}
如果要覆盖命令行上的参数,可以使用--set
传递数组,如下所示:
--set arguments={--arg1, value1, --arg2, value2, --arg3, value3, ....}
在您的值文件中,将参数定义为:
extraArgs:
argument1: value1
argument2: value2
booleanArg1:
在您的模板中执行:
args:
{{- range $key, $value := .Values.extraArgs }}
{{- if $value }}
- --{{ $key }}={{ $value }}
{{- else }}
- --{{ $key }}
{{- end }}
{{- end }}
简单。
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 }}
]
```
helm install --name "airflow" stable/airflow --set secrets.database=mydatabase,secrets.password=mypassword
所以这是有问题的掌舵图:https://github.com/helm/charts/tree/master/stable/airflow现在我想覆盖helm chart secrets.database和secrets.password中的默认值,所以我使用--set参数然后用逗号分隔的key = value对。
helm install --name "<name for your chart>" <chart> --set key0=value0,key1=value1,key2=value2,key3=value3