<p>I'm a novice regarding YAML format and kubernetes.</p>

<p>The following is a <em>dep_prom.yml</em> file.</p>

<pre><code>---
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
---
</code></pre>

<p>However... When I executed <strong>kubectl create -f dep_prom.yml</strong> </p>

<p><em>error: error converting YAML to JSON: yaml: line 47: mapping values are not allowed in this context</em></p>

<p>Line 47 is <em>nodeSelector: westporch-kubeminion-1</em></p>

<p>I think that YAML file format is normal. </p>

<p>What is causing this error?</p>

<p>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 <code>kubernetes.io/hostname</code> 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 </p>

<pre><code>      nodeSelector: westporch-kubeminion-1
        kubernetes.io/hostname: 10.0.24.52
</code></pre>

<p>you either need to do:</p>

<pre><code>      nodeSelector: westporch-kubeminion-1
      kubernetes.io/hostname: 10.0.24.52
</code></pre>

<p>but it might be that <code>nodeSelector</code> needs a mapping as argument instead of the scalar <code>westporch-kubeminion-1</code> it has now.</p>

<pre><code>      nodeSelector:
        kubernetes.io/hostname: 10.0.24.52
</code></pre>

<hr>

<p>This error might mask a second one in the file, depending on how lenient kubernetes is. The <code>---</code> 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: <code>...</code> at the beginning of a line followed by whitespace.</p>

<p>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.</p>
