如何通过--set参数为Helm chart的Deployment传递容器command启动命令
问题根因
你遇到的配置不生效有三个核心错误:
- 模板渲染逻辑错误:直接输出数组类型的
.Values.command.cmd不会自动转换为合法的YAML数组格式,必须用toYaml函数转换并匹配正确缩进 --set传参格式错误:不需要手动给每个参数加-前缀,toYaml会自动为数组元素生成YAML列表标记- 字符错误:你之前传的
-с用了西里尔字母的c,不是英文字母c,就算格式正确执行也会报错
第一步:修正Deployment模板
将你deployment.yaml里的command渲染部分替换为如下内容:
{{- if $.Values.command }} command: {{- toYaml .Values.command.cmd | nindent 12 }} {{- end }}
这里用toYaml将数组参数转为YAML格式,nindent 12保证缩进和同级的securityContext配置对齐。
第二步:调整安装传参
方式1:直接用--set传参(适合短脚本)
你需要的command实际是3个元素的数组,无需拆分脚本为多行传参,正确命令如下:
helm install NAME nexus/stand \ --set command.cmd[0]=/bin/sh \ --set command.cmd[1]=-c \ --set command.cmd[2]="while true; do sleep 60; done"
方式2:用值文件传参(适合多行脚本,更易维护)
新建custom-values.yaml文件,内容如下:
command: cmd: - /bin/sh - -c - | while true; do sleep 60; done
执行安装时指定值文件即可:
helm install NAME nexus/stand -f custom-values.yaml
第二种方式渲染出来的配置和你预期的效果完全一致。
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

