You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:18:03