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

无法将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 }}

问题原因

  1. 数据类型错误:values.yaml里用|把affinityNode定义成了多行字符串,但toYaml函数是用来转换YAML对象的,直接处理字符串会导致渲染结果格式错乱(比如保留冗余缩进、被转义为字符串格式)。
  2. 缩进冗余:多行字符串内部的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:09:27