web-dev-qa-db-ja.com

YAMLからJSONへの変換エラー、予期されたキーKubernetesが見つかりませんでした

私は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
8
user10944669

全体的なファイルは良さそうです。私が推測するインデントにはいくつかの問題があります。

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

yamllintパッケージは、デバッグしてこの種のエラーを見つけるのに役立ちます。yamllint filenameとすると、見つかった問題のリストが表示されます。ディストリビューションパッケージマネージャー(利用可能な場合は通常推奨)または以下のnpm installコマンド(グローバルにインストールされます)を介してインストールします。

npm install -g yaml-lint

Npmコマンドを提供してくれたKyle VGに感謝

5
higuita

Helmを使用してIngressのyamlファイルを作成しているときにエラーが発生しました。私は私のイングレス仕様としてこのようなものを持っていました

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

そして、values.yaml

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

エラーの原因となっているブラケットが判明しました。

この問題は、quote関数を使用して値に引用符を付けることで修正できます。

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

これは Helm doc が推奨するものでもあります

型変換エラーを回避する最も簡単な方法は、文字列を明示し、それ以外のすべてを暗黙的にすることです。または、要するに、すべての文字列を引用します。

および ここ

文字列データを操作するときは、文字列をそのままの単語として残すよりも、文字列を引用する方が常に安全です。

1
LazerBass