YAMLをJSONに変換中にエラーが発生しました。 yaml:行10:予想されるキーが見つかりません。

YAMLをJSONに変換中にエラーが発生しました。 yaml:行10:予想されるキーが見つかりません。

次のファイルがありますyaml

---
apiVersion: v1
kind: pod
metadata:
    name: Tesing_for_Image_pull -----------> 1
    spec:
        containers:
        - name: mysql ------------------------> 2
          image: mysql ----------> 3
          imagePullPolicy: Always ------------->4
          command: ["echo", "SUCCESS"]  -------------------> 5

実行後、kubectl create -f my_yaml.yaml次のエラーが発生します。

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

修正する:yamllint次のエラーが発生します。

root@debian:~# yamllint my_yaml.yaml
my_yaml.yaml
  8:9       error    wrong indentation: expected 12 but found 8  (indentation)
  11:41     error    syntax error: expected <block end>, but found '<scalar>'

私の問題は何で、どのように解決しますか?

答え1

これ単純なポッドの例YAMLKubernetesの表示に必要な「メタデータ」および「仕様」要素は、定義の最上位レベルにあります。kubectlPod仕様を定義する 'spec'要素が見つからないため、命令が失敗する可能性があります。

echo SUCCESSイメージのインポート設定をテストし、コンテナ内でのみ実行するように指定したようです。これら2つの条件を考慮すると、画像の代わりに画像をドロップbashダウンすることをお勧めしますmysql

次の代替YAMLはあなたの要件を満たす必要があります。

---
apiVersion: v1
kind: Pod
metadata:
  name: testing-for-image-pull
spec:
  containers:
  - name: bash
    image: bash
    imagePullPolicy: Always
    command: ["echo"]
    args: ["SUCCESS"]

元の YAML ファイルに次の変更が適用されました。 1)kind要素が値に変更されましたPod。 2)Kubernetesの要件を満たすようにPod名が変更されました(DNSに似た小文字の名前)。 3)imagename要素は画像を使用するように変更されましたbash。 4)commandとキーを使用するようにコマンド定義が変更されましたargs

YAMLはインデントにタブの代わりにスペースを使用し、推奨されるYAML構文は既存の4つのスペースの代わりにインデントレベルごとに2つのスペースを使用することです。

その他のサンプル YAML ファイルについては、次をご覧ください。GitHubのKubernetesウェブサイトリポジトリ

関連情報