K8s Deployment添加PURPOSE环境变量时出现YAML转JSON错误
Kubernetes Deployment环境变量配置错误修复
问题原因
YAML解析失败是因为数组结构缩进错误:env是一个数组类型字段,你通过toYaml渲染的.Values.envVariables已经是数组内的条目(每个条目以- name:开头),但新增的PURPOSE变量没有和这些渲染出的条目处于同一层级,反而被当成了容器的独立属性,导致YAML结构混乱。
修复后的配置
调整PURPOSE变量的缩进,让它成为env数组的一员,和渲染出的环境变量条目对齐:
apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.scheduler.name }} spec: selector: matchLabels: app: {{ .Values.scheduler.name }} template: metadata: labels: app: {{ .Values.scheduler.name }} spec: containers: - name: {{ .Values.scheduler.name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" ports: - containerPort: {{ .Values.scheduler.targetPort }} imagePullPolicy: Always env: {{- toYaml .Values.envVariables | nindent 10 }} - name: PURPOSE value: "SCHEDULER"
关键说明
- 原代码中
- name: PURPOSE和env:处于同一层级,YAML解析器会把它识别为容器的新属性,而非env数组的元素,这是错误的核心原因。 - 调整缩进后,
PURPOSE变量和values.yaml中读取的环境变量同属env数组,结构符合Kubernetes YAML规范,解析即可正常完成。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

