首页 > 解决方案 > 无效的 Kubernetes YAML 规范。此处不允许映射值

问题描述

我正在尝试部署我的 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:

从这个错误中,我至少可以将其缩小到我的 deployment.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 的新手。我相信这是一个格式问题,但是无论我在哪里看,格式看起来都是正确的。

标签: kubernetes

解决方案


看起来这是一个缩进问题:

- name: FILE_SYSTEM_ID
    valueFrom:
      configMapKeyRef:

应该

- name: FILE_SYSTEM_ID
  valueFrom:
    configMapKeyRef:

推荐阅读