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

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-

我希望允许我们的开发人员将动态参数传递给helm模板(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"
...

我尝试了一些方法,但没有成功。以下是一个例子:

     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