I'm a novice regarding YAML format and kubernetes.
The following is a dep_prom.yml file.
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
name: prometheus-deployment
name: prometheus
#namespace: prometheus
spec:
replicas: 1
template:
metadata:
labels:
app: prometheus
spec:
containers:
- image: prom/prometheus:master
name: prometheus
command:
- "/bin/prometheus"
args:
- "-config.file=/etc/prometheus/prometheus.yml"
- "-storage.local.path=/prometheus"
- "-storage.local.retention=24h"
ports:
- containerPort: 9090
protocol: TCP
volumeMounts:
- mountPath: "/prometheus"
name: data
- mountPath: "/etc/prometheus"
name: config-volume
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 2500Mi
volumes:
- name: data
hostPath:
path: /data/prometheus
- name: config-volume
configMap:
name: prometheus
nodeSelector: westporch-kubeminion-1
kubernetes.io/hostname: 10.0.24.52
---
However... When I executed kubectl create -f dep_prom.yml
error: error converting YAML to JSON: yaml: line 47: mapping values are not allowed in this context
Line 47 is nodeSelector: westporch-kubeminion-1
I think that YAML file format is normal.
What is causing this error?
You indicate you think the YAML format is normal, but it is not. This is a YAML error caused by the line at the end of the first document, starting with kubernetes.io/hostname
being indented relative to the one before it. Because these are both key-value pair lines (i.e. item pairs of a block-style mapping) instead of
nodeSelector: westporch-kubeminion-1
kubernetes.io/hostname: 10.0.24.52
you either need to do:
nodeSelector: westporch-kubeminion-1
kubernetes.io/hostname: 10.0.24.52
but it might be that nodeSelector
needs a mapping as argument instead of the scalar westporch-kubeminion-1
it has now.
nodeSelector:
kubernetes.io/hostname: 10.0.24.52
This error might mask a second one in the file, depending on how lenient kubernetes is. The ---
is the end-of-directives marker and since the directives are optional it can occur at the start of a YAML document. The one at the bottom of your example indicates the start of a new document. Once you address the first error, you might get a warning about single documents based on that. (The end-of-document marker consists of three dots: ...
at the beginning of a line followed by whitespace.
Of course any changes you make should confirm to what kubernetes is expecting, but the above stream is clearly non-valid as YAML in itself.