web-dev-qa-db-fra.com

erreur de conversion de YAML en JSON, n'a pas trouvé les kubernetes de clé attendus

Je fais un laboratoire sur kubernetes dans google cloud.
J'ai créé le fichier YAML, mais lorsque j'essaie de le déployer, un Shell me montre cette erreur:

error converting YAML to JSON: yaml: line 34: did not find expected key

Fichier YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  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
          mountPath: /var/www/data
        - name: php-config
          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
8
user10944669

Le fichier global semble bon. Il y a quelques problèmes avec l'indentation, je suppose.

Fichier YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  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
9
Ankit Deshpande

le package yamllint est utile pour déboguer et trouver ce genre d'erreurs, faites simplement yamllint filename et il listera les problèmes possibles qu'il trouve. Installez via votre gestionnaire de packages distro (généralement recommandé si disponible) ou via la commande d'installation npm ci-dessous (il s'installera globalement)

npm install -g yaml-lint

Merci à Kyle VG pour la commande npm

5
higuita

J'ai obtenu cette erreur lors de la création d'un fichier yaml pour un Ingress à l'aide de Helm. J'avais quelque chose comme ça comme spécification Ingress

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

et dans values.yaml

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

Il s'est avéré que les supports étaient à l'origine de l'erreur.

Le problème pourrait être résolu en mettant des guillemets sur la valeur à l'aide de la fonction quote.

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

C'est aussi ce que le Helm doc recommande

Le moyen le plus simple d'éviter les erreurs de conversion de type est d'être explicite sur les chaînes et implicite sur tout le reste. Ou, en bref, citez toutes les chaînes.

et ici

Lorsque vous travaillez avec des données de chaîne, vous êtes toujours plus sûr de citer les chaînes que de les laisser comme des mots nus:

1
LazerBass