【问题标题】:how to pass conditional argument as command in kubernetes with helm charts如何在带有 helm 图表的 Kubernetes 中将条件参数作为命令传递
【发布时间】:2022-01-17 13:00:40
【问题描述】:

当我的 pod 在 kubernetes 中启动时,我必须运行一个命令,该命令需要一些参数,但这些参数是有条件的。如何设置这些值。我的配置看起来像

#file: values.yaml
arguments:
  debug: false
  values: 16 # this is not necessarily set
#deployment command section looks like
command: [ "/bin/bash", "-ce", "./my_app.sh" ]
args:
    - {{ -f .Values.arguments.debug }}
    - {{ -v .Values.arguments.values}}

但它似乎不接受争论。这是不是错误的方式。如何传递多个参数?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    Helm 使用带有多个扩展的Go text/template language; Helm Chart Template Guide 有很多例子。

    特别是模板语言包括if...else...end 构造。你可以这样使用:

    args:
      - -f
      - {{ quote .Values.arguments.debug }}
    {{- if .Values.arguments.values }}
      - -v
      - {{ quote .Values.arguments.values}}
    {{- end }}
    

    请注意,-f-v 文本位于模板花括号之外,我已将它们拆分为参数列表中的单独项目。最后一部分测试是否设置了values 选项,如果没有设置-v 选项,则不会发出。

    【讨论】:

    • 感谢您的回答@David Maze,但是当我使用 args 时,它显然没有接受参数,因为我进行了检查,它给出了消息 Missing mandatory argument -f,而当我在 @ 中传递参数时它工作正常987654333@标签
    • 在问题中,您将命令包装在/bin/bash -c 中。这需要您将整个命令打包到一个参数中并应用 shell 转义;您仍然可以在该字符串中使用 Helm 模板,包括 {{ if }} 条件。如果命令只是您显示的一个简单单词,则将其更改为 command: ["./my_app.sh"] 而不使用 sh -c 包装器将使其尊重 args:
    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2011-02-10
    • 1970-01-01
    • 2021-10-04
    • 2015-09-12
    相关资源
    最近更新 更多