error converting YAML to JSON, did not find expected key kubernetes error converting YAML to JSON, did not find expected key kubernetes kubernetes kubernetes

error converting YAML to JSON, did not find expected key kubernetes


yamllint package is useful to debug and find this kind of errors, just do yamllint filename and it will list the possible problems it finds. Install via your distro package manager (usually recommended if available) or via the below npm install command (it will install globally)

npm install -g yaml-lint

Thanks to Kyle VG for the npm command


The overall file looks good.There are some issues with indentation.

YAML file

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx  labels:    app: nginxspec:  replicas: 2  selector:    matchLabels:      app: nginx    spec:      volumes:      - name: nginx-config        configMap:          name: nginx-config      - name: php-config        configMap:          name: php-config      containers:      - image: php-fpm:7.2        name: php        ports:        - containerPort: 9000        volumeMounts:        - name: persistent-storage            # looks like indentation issue here                             mountPath: /var/www/data         - name: php-config            # looks like indentation issue here                             mountPath: /usr/local/etc/php-fpm.d/www.conf            subPath: www.conf      - image: nginx:latest        name: nginx        - containerPort: 80        volumeMounts:        - name: persistent-storage            mountPath: /var/www/data        - name: nginx-config            mountPath: /etc/nginx/nginx.conf            subPath: nginx.conf      volumes:        - name: persistent-storage          persistentVolumeClaim:            claimName: nfs-pvc


I got that error while creating a yaml file for an Ingress using Helm. I had something like this as my Ingress specification

spec:  tls:  - hosts:    - {{ .Values.ingress.host }}

and in the values.yaml

ingress:  host: "[NAMESPACE]-example.com"

Turned out that the brackets where causing the error.

The issue could be fixed by putting quotes on the value using the quote function.

- {{ .Values.ingress.host | quote }}

This is also what the Helm doc recommends

The easiest way to avoid type conversion errors is to be explicit about strings, and implicit about everything else. Or, in short, quote all strings.

and here

When you are working with string data, you are always safer quoting the strings than leaving them as bare words: