Kubernetes 如何将动态参数传递给运行作业的头盔图表
我希望允许我们的开发人员将动态参数传递给helm模板(Kubernetes作业)。目前,我在helm模板中的参数是静态的(除了某些值之外),如下所示Kubernetes 如何将动态参数传递给运行作业的头盔图表,kubernetes,kubernetes-helm,go-templates,Kubernetes,Kubernetes Helm,Go Templates,我希望允许我们的开发人员将动态参数传递给helm模板(Kubernetes作业)。目前,我在helm模板中的参数是静态的(除了某些值之外),如下所示 Args: --arg1 value1 --arg2 value2 --sql-cmd select * from db 如果我在没有Kubernetes的情况下使用docker容器运行任务,我会这样传递参数: docker run my-
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"
...
或
我尝试了一些方法,但没有成功。以下是一个例子:
Args:
{{ range .Values.arguments }}
{{ . }}
{{ end }}
对。在
values.yaml
中,需要给它一个数组,而不是空格分隔的字符串
cat values.yaml
...
arguments: ['--arg3', 'value3', '--arg2', 'value2']
...
或
然后你就像模板中提到的那样应该这样做:
args:
{{ range .Values.arguments }}
- {{ . }}
{{ end }}
args: [
{{ range .Values.arguments }}
{{ . }}
{{ end }}
]
如果要覆盖命令行上的参数,可以通过如下方式传递带有--set
的数组:
--set arguments={--arg1, value1, --arg2, value2, --arg3, value3, ....}
Rico的答案需要改进。 使用前面的示例,我收到了如下错误:
templates/deployment.yaml:将yaml转换为JSON:yaml时出错
获取versionedObject失败:无法将非结构化对象转换为应用/v1beta2,种类=部署:无法从字符串还原切片
这是我在元素中使用coma的工作设置:
(列表的垂直格式更具可读性)
在模板中,应执行以下操作:
args:
{{ range .Values.arguments }}
- {{ . }}
{{ end }}
args: [
{{ range .Values.arguments }}
{{ . }}
{{ end }}
]
在值文件中,将参数定义为:
extraArgs:
argument1: value1
argument2: value2
booleanArg1:
在模板中,请执行以下操作:
args:
{{- range $key, $value := .Values.extraArgs }}
{{- if $value }}
- --{{ $key }}={{ $value }}
{{- else }}
- --{{ $key }}
{{- end }}
{{- end }}
helm-install--name“airflow”stable/airflow--set secrets.database=mydatabase,secrets.password=mypassword
这就是我们讨论的舵图:
现在我想覆盖头盔图表中的默认值
机密。数据库和
secrets.password所以我使用--set参数,然后它是由逗号分隔的键=值对。
helm install--name”“--设置key0=value0,key1=value1,key2=value2,key3=value3
由于一些限制,我不得不使用拆分
并使用分隔符,因此在我的情况下:
deployment.yaml
:
{{- if .Values.deployment.args }}
args:
{{- range (split " " .Values.deployment.args) }}
- {{ . }}
{{- end }}
{{- end }}
当使用--设置:
helm install --set deployment.args="--inspect server.js" ...
结果如下:
- args:
- --inspect
- server.js
你使用的是哪种舵图?@Pau Campaña Soler v2.10.0不是哪种版本,我指的是哪种舵图。Jenkins、mongo或其他什么。我已经将其用于我的自定义微服务,但我认为这与以下问题无关:如果您使用--set调用helm install
,该如何工作?现在可以用任意名称设置任意数量的参数了吗?如果您使用--set
它基本上覆盖了值中的内容。yaml
因此您可以执行--set arg1=val1--set arg2=val2
等操作。在这种情况下,参数
是一个数组,因此它必须像这样传递:`--set arguments={--arg1,value1,--arg2,value2,--arg3,value3,…..}。传递数组:
- args:
- --inspect
- server.js