私はk8s 1.11.2を使用してサービスを構築していますが、YAMLファイルは次のようになります。
導入
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx-test
namespace: default
labels:
- type: test
spec:
replicas: 1
selector:
matchLabels:
- type: test
template:
metadata:
labels:
- type: test
spec:
containers:
- image: nginx:1.14
name: filebeat
ports:
- containerPort: 80
サービス
apiVersion: v1
kind: Service
metadata:
labels:
- type:test
spec:
type: ExternalName
externalName: my.nginx.com
externalIPs:
- 192.168.125.123
clusterIP: 10.240.20.1
ports:
- port: 80
name: tcp
selector:
- type: test
そして私はこのエラーを受け取ります:
データの検証中にエラーが発生しました:[ValidationError(Service.metadata.labels):io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta.labelsの型が無効です:got "array"、expected "map"、ValidationError(Service.spec .selector):io.k8s.api.core.v1.ServiceSpec.selectorのタイプが無効です: "array"を取得しました、 "map"が必要です];
私はウェブサイト http://www.yamllint.com/ を使用して検証したので、YAMLファイルの形式は正しいと確信しています。
このエラーが発生するのはなぜですか?
yamllint.com は、それがチェックしているYAMLバージョンと使用している実装を通知しないため、疑わしいサービスです。それを避けなさい。
さらに重要なことに、入力は有効なYAMLである可能性がありますが、これがkubernetesの有効な入力であることを意味するものではありません。 YAMLでは、あらゆる種類の構造を作成できますが、kubernetesでは特定の構造を想定しています。これはエラーがあなたに言っていることです:
「配列」を取得しましたが、「マップ」が必要です
これは、kubernetesがmappingを期待する場所で、配列(sequence適切なYAML用語で)。エラーメッセージには、この問題が発生する場所も表示されます。
ValidationError(Service.metadata.labels):
Kubernetesのメタデータラベルを簡単に確認すると、ラベルが配列ではなくマッピングである必要があることを示す このドキュメント がわかります。
したがって、あなたの入力では、ここの最後の行は犯人です:
metadata:
name: nginx-test
namespace: default
labels:
- type: test
-
はシーケンスアイテムのYAMLインジケーターで、キーlabels:
の値としてシーケンスを作成します。ドロップすると、代わりにマッピングになります。
metadata:
name: nginx-test
namespace: default
labels:
type: test
Yamlフォーマットでは、文字「-」は配列の開始を意味します。
あなたが持っている:
apiVersion: v1
kind: Service
metadata:
labels:
- type:test
あなたが欲しい:
apiVersion: v1
kind: Service
metadata:
labels:
type:test
問題は2番目のファイルにあります。
apiVersion: v1
kind: Service
metadata:
labels:
- type:test
# ^
キャレットの上(^
)スペースを作りませんtype:test
マッピングの代わりに単一のスカラー(文字列)を使用して得られるマッピング
apiVersion: v1
kind: Service
metadata:
labels:
- type: test
そして、あなたがプログラムに期待することは何ですか。
どちらも有効なYAMLであるため、プリミティブな構文チェックは役に立ちません。