次のファイルがあります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の表示に必要な「メタデータ」および「仕様」要素は、定義の最上位レベルにあります。kubectl
Pod仕様を定義する '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)image
とname
要素は画像を使用するように変更されましたbash
。 4)command
とキーを使用するようにコマンド定義が変更されましたargs
。
YAMLはインデントにタブの代わりにスペースを使用し、推奨されるYAML構文は既存の4つのスペースの代わりにインデントレベルごとに2つのスペースを使用することです。
その他のサンプル YAML ファイルについては、次をご覧ください。GitHubのKubernetesウェブサイトリポジトリ。