如何通过--set向Helm模板传递字符串数组并生成预期格式
解决Helm通过--set传递字符串数组生成Kubernetes标准格式的问题
你遇到的问题是因为--set的传参方式不对,导致数组被识别成了单个元素。下面是几种可行的解决方法:
正确的--set传参方式
方法1:逗号分隔并包裹每个元素
直接用大括号包裹、逗号分隔每个字符串元素,注意给每个元素加引号:
helm install <release-name> <chart-path> --set web.job.commands={"sleep","3"}
这样渲染后的模板会输出:
command: ["sleep", "3"]
方法2:通过数组索引逐个设置
如果元素里包含特殊字符(比如逗号),这种方式更稳妥:
helm install <release-name> <chart-path> --set web.job.commands[0]=sleep --set web.job.commands[1]=3
同样能生成符合要求的数组格式。
方法3:强制字符串类型(可选)
如果你的数组元素是数字但需要作为字符串传递(比如"3"而不是3),可以用--set-string:
helm install <release-name> <chart-path> --set-string web.job.commands[0]=sleep --set-string web.job.commands[1]=3
为什么原来的写法不行?
你之前用的--set web.job.commands={sleep 3}会把sleep 3当成单个字符串元素,Helm渲染后自然会输出[sleep 3],既没有引号包裹元素,也不符合Kubernetes command数组需要多个字符串元素的要求。
模板说明
你的模板command: {{ .Values.web.job.commands }}本身是没问题的——Helm的模板引擎会自动把Go语言的数组类型渲染成Kubernetes要求的JSON数组格式,只要你传入的.Values.web.job.commands是正确的数组类型就行。
内容的提问来源于stack exchange,提问作者Dedy Puji
相关产品推荐
相关产品推荐

