Недопустимые спецификации YAML Kubernetes. значения сопоставления здесь не допускаются

#kubernetes

Вопрос:

Я пытаюсь развернуть свое приложение Kubernetes, и оно продолжает выдавать ошибку:

 Exception while processing templates/deployment.yaml
ERROR   2021-06-17 14:57:05    Invalid Kubernetes YAML Spec. mapping values are not allowed here
ERROR   2021-06-17 14:57:05     in 'string', line 27, column 24:
ERROR   2021-06-17 14:57:05                      valueFrom:
 

Исходя из этой ошибки, я могу, по крайней мере, сузить ее до моего развертывания.файл yaml. Далее с ошибкой «valueFrom» я могу перейти к разделу «env:». С этого момента я считаю, что это проблема форматирования.

Развертывание.yaml

 {{- if .Values.env.config}}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{.Values.name}}
data:
{{.Values.env.config | toYaml | indent 2}}
---
{{- end}}

{{- if .Values.env.secrets}}
apiVersion: v1
kind: Secret
metadata:
  name: {{.Values.name}}
stringData:
{{.Values.env.secrets | toYaml | indent 2}}
---
{{- end}}

{{- if .Values.dockercfg}}
apiVersion: v1
kind: Secret
metadata:
  name: {{.Values.name}}-dockercfg
  annotations:
    harness.io/skip-versioning: true
data:
  .dockercfg: {{.Values.dockercfg}}
type: kubernetes.io/dockercfg
---
{{- end}}

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{.Values.name}}-deployment
spec:
  replicas: {{int .Values.replicas}}
  selector:
    matchLabels:
      app: {{.Values.name}}
  template:
    metadata:
      labels:
        app: {{.Values.name}}
        tags.datadoghq.com/env: {{.Values.environment_name}}
        tags.datadoghq.com/service: {{.Values.name}}
        tags.datadoghq.com/version: "{{.Values.version}}"
    spec:
      {{- if .Values.dockercfg}}
      imagePullSecrets:
      - name: {{.Values.name}}-dockercfg
      {{- end}}
      serviceAccountName: {{.Values.name}}-service-account
      containers:
      - name: {{.Values.name}}
        image: {{.Values.image}}
        env:
          - name: FILE_SYSTEM_ID
              valueFrom:
                configMapKeyRef:
                  name: efs-provisioner
                  key: file.system.id
          - name: AWS_REGION
              valueFrom:
                configMapKeyRef:
                  name: efs-provisioner
                  key: aws.region
          - name: PROVISIONER_NAME
              valueFrom:
                configMapKeyRef:
                  name: efs-provisioner
                  key: provisioner.name
          - name: DD_AGENT_HOST
            valueFrom:
              fieldRef:
                fieldPath: status.hostIP
          volumeMounts:
            - name: pv-volume
              mountPath: /usr/local/share/mapserver
      volumes:
        - name: pv-volume
          nfs:
            server: {{.Values.EFS_ID}}.efs.{{.Values.AWS_REGION}}.amazonaws.com
            path: /
        {{- if or .Values.env.config .Values.env.secrets}}
        envFrom:
        {{- if .Values.env.config}}
        - configMapRef:
            name: {{.Values.name}}
        {{- end}}
        {{- if .Values.env.secrets}}
        - secretRef:
            name: {{.Values.name}}
        {{- end}}
        {{- end}}
 

Я новичок в использовании Kubernetes и YAML. Я считаю, что это проблема с форматированием, однако, куда бы я ни посмотрел, форматирование выглядит правильным.

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

1. ваш volumes блок должен быть ниже envFrom первого — последний является частью вашего контейнера И того, что сказал @berk-soysal.

Ответ №1:

Похоже, это проблема с отступами:

 - name: FILE_SYSTEM_ID
    valueFrom:
      configMapKeyRef:
 

должно быть

 - name: FILE_SYSTEM_ID
  valueFrom:
    configMapKeyRef: