如何将动态参数传递给运行作业的头盔图

Aar*_*lli 6 go-templates kubernetes kubernetes-helm

我想允许我们的开发人员将动态参数传递给头盔模板(Kubernetes作业)。目前,我在舵模板中的参数有些静态(除了某些值),看起来像这样

      Args:
        --arg1
        value1
        --arg2
        value2
        --sql-cmd
        select * from db
Run Code Online (Sandbox Code Playgroud)

如果使用不带Kubernetes的docker容器运行任务,我将传递如下参数:

docker run my-image --arg1 value1 --arg2 value2 --sql-cmd "select * from db"
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以将舵图中的参数模板化,从而可以将任意数量的参数传递给模板。

例如。

cat values.yaml
...
arguments: --arg1 value1 --arg2 value2 --sql-cmd "select * from db"
...
Run Code Online (Sandbox Code Playgroud)

要么

cat values.yaml
...
arguments: --arg3 value3
...
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但没有成功。这是一个例子:

     Args:          
      {{  range .Values.arguments }}
        {{ . }}
      {{ end }}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ico 8

是的。在values.yaml你需要给它一个数组而不是一个空格分隔的字符串。

cat values.yaml
...
arguments: ['--arg3', 'value3', '--arg2', 'value2']
...
Run Code Online (Sandbox Code Playgroud)

或者

cat values.yaml
...
arguments:
- --arg3
- value3
- --arg2
- value2
...
Run Code Online (Sandbox Code Playgroud)

然后你像你在模板中提到的那样应该这样做:

     args:          
      {{  range .Values.arguments }}
        - {{ . }}
      {{ end }}
Run Code Online (Sandbox Code Playgroud)

如果你想覆盖命令行上的参数,你可以--set像这样传递一个数组:

--set arguments={--arg1, value1, --arg2, value2, --arg3, value3, ....}
Run Code Online (Sandbox Code Playgroud)


小智 7

在您的值文件中将参数定义为:

extraArgs:
  argument1: value1
  argument2: value2
  booleanArg1:
Run Code Online (Sandbox Code Playgroud)

在您的模板中执行以下操作:

    args:
{{- range $key, $value := .Values.extraArgs }}
    {{- if $value }}
    - --{{ $key }}={{ $value }}
    {{- else }}
    - --{{ $key }}
    {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)