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
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
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
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: