私はGoogle Cloudでkubernetesに関するラボを行っています。
YAMLファイルを作成しましたが、それをデプロイしようとすると、シェルに次のエラーが表示されます。
error converting YAML to JSON: yaml: line 34: did not find expected key
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
全体的なファイルは良さそうです。私が推測するインデントにはいくつかの問題があります。
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
yamllintパッケージは、デバッグしてこの種のエラーを見つけるのに役立ちます。yamllint filename
とすると、見つかった問題のリストが表示されます。ディストリビューションパッケージマネージャー(利用可能な場合は通常推奨)または以下のnpm installコマンド(グローバルにインストールされます)を介してインストールします。
npm install -g yaml-lint
Npmコマンドを提供してくれたKyle VGに感謝
Helmを使用してIngress
のyamlファイルを作成しているときにエラーが発生しました。私は私のイングレス仕様としてこのようなものを持っていました
spec:
tls:
- hosts:
- {{ .Values.ingress.Host }}
そして、values.yaml
ingress:
Host: "[NAMESPACE]-example.com"
エラーの原因となっているブラケットが判明しました。
この問題は、quote
関数を使用して値に引用符を付けることで修正できます。
- {{ .Values.ingress.Host | quote }}
これは Helm doc が推奨するものでもあります
型変換エラーを回避する最も簡単な方法は、文字列を明示し、それ以外のすべてを暗黙的にすることです。または、要するに、すべての文字列を引用します。
および ここ
文字列データを操作するときは、文字列をそのままの単語として残すよりも、文字列を引用する方が常に安全です。