我想允许我们的开发人员将动态参数传递给helm模板(Kubernetes作业)。
Args:
--arg1
value1
--arg2
value2
--sql-cmd
select * from db
如果我使用Docker容器运行一个任务,而不使用Kubernetes,我将传递如下参数:
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 }}
8条答案
按热度按时间z4iuyo4d1#
是的。在
values.yaml
中,你需要给予它一个数组,而不是一个空格分隔的字符串。或
然后你就像你在模板中提到的那样去做:
如果你想覆盖命令行上的参数,你可以像这样用
--set
传递一个数组:ha5z0ras2#
在值文件中,将参数定义为:
在模板中执行以下操作:
zyfwsgd63#
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
这是我在元素中使用昏迷的工作设置:(列表的垂直格式更易读)
模板中的代码应该可以做到:
brccelvz4#
由于一些限制,我不得不使用
split
和delimiter
,因此在我的示例中:deployment.yaml
:使用
--set
时:结果:
kwvwclae5#
在这种情况下,参数格式需要保持一致。下面是我的案例,它工作得很好。
不幸的是,以下混合参数格式在容器构造中不起作用-
上述命令的正确格式应为-
这可以通过以下构造来实现-
vsnjm48y6#
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
l5tcr1uw7#
你试过这个吗?
zmeyuzjn8#
Acid R的键/值解决方案是唯一对我有效的。
最后我得到了这个:
values.yaml
在我的模板中: