无法将values.yaml中带缩进的affinityNode配置导入deployment.yaml
问题解决:K8s Deployment中无法正确渲染affinityNode配置
问题场景
尝试将values.yaml中带缩进的affinityNode配置添加到deployment.yaml,但未生效。
values.yaml中的原配置
affinityNode: | affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nodepool operator: In values: - loadbalancer-pool
deployment.yaml中的原引用代码
{{- toYaml .Values.affinityNode }}
问题原因
- 数据类型错误:values.yaml里用
|把affinityNode定义成了多行字符串,但toYaml函数是用来转换YAML对象的,直接处理字符串会导致渲染结果格式错乱(比如保留冗余缩进、被转义为字符串格式)。 - 缩进冗余:多行字符串内部的
affinity已经带了额外缩进,渲染到Deployment的层级结构中时,会破坏YAML的缩进规则。
修复方案
第一步:调整values.yaml的配置格式
把affinityNode从多行字符串改成YAML对象,去掉|和多余的缩进:
affinityNode: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nodepool operator: In values: - loadbalancer-pool
第二步:修正deployment.yaml的引用逻辑
在Deployment的spec.template.spec层级下正确引用,并通过nindent控制缩进匹配层级:
spec: template: spec: {{- toYaml .Values.affinityNode | nindent 8 }}
toYaml负责将affinityNode对象转换为标准YAML字符串nindent 8给每一行添加8个空格缩进,匹配当前层级的缩进要求(可根据你的Deployment实际缩进情况调整数字)
如果你的Deployment中原本就存在affinity字段,也可以直接嵌套引用nodeAffinity部分:
# values.yaml对应调整为只保留nodeAffinity内容 affinityNode: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nodepool operator: In values: - loadbalancer-pool # deployment.yaml中引用 spec: template: spec: affinity: {{- toYaml .Values.affinityNode | nindent 10 }}
内容的提问来源于stack exchange,提问作者MrTux01
相关产品推荐
相关产品推荐

