如何通过values.yaml配置多个containerPort并解决参数类型报错
可以实现传入端口数组设置多个ContainerPort,报错原因及解决方法如下:
报错原因
你当前使用的Helm模板中,test.containerPort字段是直接赋值给单个containerPort属性的,该属性属于K8s标准的IntOrString类型,仅支持单个数值/字符串输入,直接传入数组会触发类型校验失败。
解决步骤
1. 调整Deployment模板(必改)
需要修改Chart中templates/deployment.yaml里的容器端口配置段,增加数组遍历逻辑,示例如下:
containers: - name: {{ .Values.test.name }} image: {{ .Values.test.image }} ports: {{- range .Values.test.containerPorts }} # 遍历端口数组 - containerPort: {{ . }} protocol: TCP {{- end }}
建议将变量名改为复数形式
containerPorts,更符合数组语义,也能和原有单值字段做区分。
2. 两种传入配置的方式
方式1:直接写在values.yaml文件中
test: containerPorts: - 8080 - 10102 - 19905
方式2:通过--set命令行传入
调整后你的传入命令修改为对应数组字段即可:helm install <你的发布名> <你的Chart路径> --set "test.containerPorts={8080,10102,19905}"
兼容单值场景的扩展写法
如果你需要兼容旧的单值端口配置,不想修改原有变量名,可以增加类型判断逻辑,模板写法如下:
ports: {{- if kindIs "slice" .Values.test.containerPort }} {{- /* 传入值为数组时遍历 */}} {{- range .Values.test.containerPort }} - containerPort: {{ . }} protocol: TCP {{- end }} {{- else }} {{- /* 传入值为单值时直接使用 */}} - containerPort: {{ .Values.test.containerPort }} protocol: TCP {{- end }}
这种写法下你原来的--set "test.containerPort={8080,10102,19905}"命令也可以正常使用,不会触发报错。
内容的提问来源于stack exchange,提问作者Chandra Sekar
相关产品推荐
相关产品推荐

