Helm Chart--dry-run正常,实际发布触发StatefulSet replicas字段错误
问题根源与解决方案
从你提供的错误日志可以直接定位到核心问题:你的StatefulSet的replicas字段被设置成了字符串类型(比如日志里的"replicas":"3"),但Kubernetes v1beta1版本的StatefulSet规范要求这个字段必须是无符号整数类型,这才是导致部署失败的真正原因——和你写的PARTNER_NODES环境变量模板无关哦。
修复步骤
检查
values.yaml中的配置
确保postgres_nodes的值是整数类型,不要加引号:# 正确写法 postgres_nodes: 3 # 错误写法(会被识别为字符串) postgres_nodes: "3"检查StatefulSet模板的
replicas配置
确认你在模板中引用postgres_nodes时没有额外添加引号,避免把整数转成字符串:# 正确写法(直接引用整数) spec: replicas: {{ $.Values.postgres_nodes }} # 错误写法(引号会强制转成字符串) spec: replicas: "{{ $.Values.postgres_nodes }}"验证修复效果
再次执行helm install --dry-run --debug,查看生成的StatefulSet YAML内容,确认replicas字段是无引号的整数格式,比如:spec: replicas: 3
为什么--dry-run时没报错?
helm --dry-run只是完成模板渲染,不会严格校验Kubernetes API的类型约束;而实际部署时,K8s API Server会对提交的资源做严格的Schema校验,所以才会出现本地渲染正常但集群部署失败的差异。
另外,你写的PARTNER_NODES环境变量模板是没问题的,从--dry-run的结果来看已经能正确生成预期的节点列表字符串,不需要修改这部分代码。
内容的提问来源于stack exchange,提问作者user10075632
相关产品推荐
相关产品推荐

