将 YAML 转换为 JSON 时出错:未找到预期的密钥

AVa*_*arf 7 yaml kubernetes kubernetes-helm

我刚刚创建了一个新的 Helm 图表,但是当我运行时 helm install --dry-run --debug我得到:

错误:多相机跟踪/模板/多相机跟踪.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错:yaml:第 30 行:未找到预期的键

这是我的 Yaml 文件:

---
# apiVersion: apps/v1beta1
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: multi-camera-tracking
  annotations:
    Process: multi-camera-tracking
  labels:
    io.kompose.service: multi-camera-tracking
spec:
  serviceName: multi-camera-tracking
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: multi-camera-tracking
  podManagementPolicy: "Parallel"
  template:
    metadata:
      labels:
        io.kompose.service: multi-camera-tracking
    spec:
      containers:
      - name: multi-camera-tracking
        env:
        - name: MCT_PUB_PORT
          value: {{ .Values.MCT_PUB_PORT | quote }}
        - name: SCT_IP_ADDR_CSV
          value: {{ .Values.SCT_IP_ADDR_CSV | quote }}
        - name: SCT_PUB_PORT_CSV
          value: {{ .Values.SCT_PUB_PORT1 | quote }}, {{ .Values.SCT_PUB_PORT2 | quote }}
        image: {{ .Values.image_multi_camera_tracking }}
        #name: multi-camera-tracking
        ports:
        - containerPort: {{ .Values.MCT_PUB_PORT }}
        resources:
          requests:
            cpu: 0.1
            memory: 250Mi
          limits:
            cpu: 4
            memory: 10Gi
        readinessProbe:
          exec:
            command:
            - ls
            - /tmp
          initialDelaySeconds: 5
          periodSeconds: 60
      restartPolicy: Always
      #imagePullSecrets:
      #- name: wwssecret
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    Process: multi-camera-tracking
  creationTimestamp: null
  labels:
    io.kompose.service: multi-camera-tracking
  name: multi-camera-tracking
spec:
  ports:
  - name: "MCT_PUB_PORT"
    port: {{ .Values.MCT_PUB_PORT }}
    targetPort: {{ .Values.MCT_PUB_PORT }}
  selector:
    io.kompose.service: multi-camera-tracking
status:
  loadBalancer: {}
Run Code Online (Sandbox Code Playgroud)

奇怪的是我已经创建了多个其他舵图,它们都与此非常相似,但是这个不起作用并产生错误。

NIr*_*odi 6

就我而言,我写了

name: { { template "cp-kafka.fullname" . } }-jaas-configmap
Run Code Online (Sandbox Code Playgroud)

由于该错误。

正确的是

name: {{ template "cp-kafka.fullname" . }}-jaas-configmap
Run Code Online (Sandbox Code Playgroud)

区别在于大括号之间的空格。


Ant*_*ods 6

我认为template命令--debug是此类问题的预期调试路径,例如:

helm template  ./yourchart/ -f your-overrides.yaml -n your-ns --debug
Run Code Online (Sandbox Code Playgroud)

这里 helm 会尽力尝试生成 YAML,并让你检查并看看是否可以更清楚地看到错误。

  • 调试不添加任何可用信息。这些错误就像大海捞针一样,只是你甚至不知道它是一根针还是大海捞针。 (2认同)

AVa*_*arf 5

我找到了它不起作用的原因。首先,允许有逗号分隔的值,但有问题的部分是引号。

这是错误的语法:

value: {{ .Values.SCT_PUB_PORT1 | quote }}, {{ .Values.SCT_PUB_PORT2 | quote }}
Run Code Online (Sandbox Code Playgroud)

这是正确的:

value: {{ .Values.SCT_PUB_PORT1 }}, {{ .Values.SCT_PUB_PORT2 }}
Run Code Online (Sandbox Code Playgroud)