为 helm 中的容器命令提供多个参数

问题描述 投票:0回答:1

我有一个 cron 作业的 helm 图表,它一直按预期工作,直到现在我必须将多个参数传递给命令并希望将参数分解为多行。

到目前为止,我尝试将参数分解为多行,导致命令根本没有收到所需的参数(可能是换行问题),或者 helm 出现语法问题,并出现以下错误:

json:无法将字符串解组到 Go 结构字段中

作为一个简单的例子,我的命令将从 bash 运行,如下所示;

python -m django scale_workloads --appserver-reg 1 --appserver-up 2 --nginx-reg 1 --nginx-up 2

通常为此,我的头盔模板就可以:

containers:
  - name: word-check
    image: {{ .Values.gke_registry }}/my_image:{{ .Values.global.build }}
    command: ["/bin/sh","-c"]
    args: ["python -m django word_check --log-all --wordlist /etc/words.txt"]

我尝试了许多不同的格式来将参数拆分为多行,并检查 yaml 语法

我尝试过的一些事情;

command: [ "/bin/sh","-c" ]
args: [
  "python -m django scale_workloads",
  "--appserver-reg={{ .Values.pods.appserver.minReplicas }}",
  "--appserver-up={{ .Values.pods.appserver.minReplicasUp }}",
  "--nginx-reg={{ .Values.pods.nginx.minReplicas }}",
  "--nginx-up={{ .Values.pods.nginx.minReplicasUp }}"
]
command: [ "/bin/sh","-c" ]
args: |
  python -m django scale_workloads
  --appserver-reg={{ .Values.pods.appserver.minReplicas }}
  --appserver-up={{ .Values.pods.appserver.minReplicasUp }}
  --nginx-reg={{ .Values.pods.nginx.minReplicas }}
  --nginx-up={{ .Values.pods.nginx.minReplicasUp }}
command: [ "/bin/sh","-c" ]
args: >-
  python -m django scale_workloads
  --appserver-reg={{ .Values.pods.appserver.minReplicas }}
  --appserver-up={{ .Values.pods.appserver.minReplicasUp }}
  --nginx-reg={{ .Values.pods.nginx.minReplicas }}
  --nginx-up={{ .Values.pods.nginx.minReplicasUp }}
kubernetes-helm
1个回答
0
投票

我怀疑你正在寻找的语法是

command: ["/bin/sh", "-c"]
args:
  - >-
      python -m django scale_workloads
      --appserver-reg={{ .Values.pods.appserver.minReplicas }}
      ...

在数据模型级别,

args:
必须是一个列表,并且列表中的每一项都必须是一个字符串。以缩进的
- 
开始新行引入了一个列表项。
>-
引入了 YAML 块标量 语法;以下缩进行用单个空格连接在一起,并且没有前导或尾随新行。

作为替代方案,您的第一次尝试使

args:
明确成为一个列表。这与需要单个命令字的
sh -c
不兼容,但另一方面,您没有使用任何 shell 功能(变量扩展、管道、重定向)。如果
args:
command:
是一个列表,那么每个 shell 单词都需要是它自己的列表项。您还可以将这种方法与 Helm(以及更广泛的 Kubernetes)一起使用

command:
  - python
  - -m
  - django
  - scale_workloads
  - --appserver-reg={{ .Values.pods.appserver.minReplicas }}
  - ...

请注意,我没有

sh -c
包装器,并且我没有尝试将单词列表拆分为单独的
command:
args:
(它们只是组合在一起)。

© www.soinside.com 2019 - 2024. All rights reserved.