Ошибка преобразования YAML в JSON: не найдена ожидаемая ключевая ошибка в конвейере

#kubernetes #yaml #kubernetes-helm

#kubernetes #yaml #kubernetes-helm

Вопрос:

Я получаю следующую ошибку в моем конвейере развертывания

 Error: YAML parse error on cnhsst/templates/deployment.yaml: error converting YAML to JSON: yaml: line 38: did not find expected key
  

Файл yml, соответствующий этой ошибке, приведен ниже:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "fullname" . }}
  namespace: {{ .Values.namespace }}
  labels:
    app: {{ template "fullname" . }}
    chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: {{ template "fullname" . }}
      release: "{{ .Release.Name }}"
  # We dont need a large deployment history limit as Helm keeps it's own
  # history
  revisionHistoryLimit: 2
  template:
    metadata:
      namespace: {{ .Values.namespace }}
      labels:
        app: {{ template "fullname" . }}
        release: "{{ .Release.Name }}"
      annotations:
        recreatePods: {{ randAlphaNum 8 | quote }}
    spec:
      containers:
      - name: {{ template "fullname" . }}
        image: {{ template "docker-image" . }}
        imagePullPolicy: Always
        ports:
        # The port that our container listens for HTTP requests on
        - containerPort: {{ default 8000 .Values.portOverride }}
          name: http
        
      {{- if .Values.resources }}
        resources:
{{ toYaml .Values.resources | indent 10 }}
      {{- end }}
      {{- if and (.Values.livenessProbe) (.Values.apipod)}}
        livenessProbe:
{{ toYaml .Values.livenessProbe | indent 10 }}
      {{- end }}
      {{- if and (.Values.readinessProbe) (.Values.apipod)}}
        readinessProbe:
{{ toYaml .Values.readinessProbe | indent 10 }}
      {{- end }}
      imagePullSecrets:
      - name: regcred
       securityContext:
        runAsNonRoot: true
        runAsUser: 5000
        runAsGroup: 5000 
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - {{ template "fullname" . }}
              topologyKey: failure-domain.beta.kubernetes.io/zone
  

Я застрял с этой проблемой на несколько часов. Я просмотрел множество сообщений, пробовал онлайн-инструменты, пытаясь выяснить синтаксические ошибки, но, к сожалению, безуспешно. Если кто-нибудь сможет указать на проблему, это было бы действительно здорово.

Комментарии:

1. Просто выстрел в темноте: есть единственная пустая строка 37. Может ли эта пустая строка быть причиной ошибки?

2. Я попытался удалить эту пустую строку, но она по-прежнему показывает ту же ошибку при ее проверке yamllint.com

3. Я не эксперт в YAML. Вы уверены, что yamllint.com совместим ли с kubernetes-helm? Я попытался вставить в линтер несколько примеров из документов helm: helm.sh/docs/chart_template_guide/control_structures и этот линтер почти всегда допускает ошибки.

Ответ №1:

Вы можете увидеть несоответствующий отступ под regcred :

       imagePullSecrets:
      - name: regcred
      # <-- indented "-"
      #VVV not indented
       securityContext:
        runAsNonRoot: true
  

которая, как назло, является 38-й строкой в выходном YAML

 $ helm template --debug my-chart . 2>amp;1| sed -e '1,/^apiVersion:/d' | sed -ne 38p
       securityContext: