2017-09-12 11 views
0

YAMLファイルを使用して配置を作成しようとすると、無効なフィールドセレクタエラーが発生します。エラーはerror validating data: found invalid field selector for v1.PodSpecで、私のファイルは以下のとおりです。Kubernetes展開ファイルエラー:v1.PodSpecのフィールドセレクタが無効です。

apiVersion: apps/v1beta1 
kind: Deployment 
metadata: 
name: zalenium-deployment 
spec: 
replicas: 1 
template: 
    metadata: 
    labels: 
    app: zalenium 
    spec: 
    serviceAccountName: zalenium 
    serviceAccount: zalenium 
    selector: 
    app: zalenium 
    role: grid 
    containers: 
    - name: zalenium-pod 
     image: dosel/zalenium 
     ports: 
     - containerPort: 4444 
     protocol: TCP 
     volumeMounts: 
     - name: zalenium-shared 
     mountPath: /tmp/mounted 
     - name: zalenium-videos 
     mountPath: /home/seluser/videos 
     resources: 
     requests: 
     memory: "250m" 
     cpu: "500m" 
     limits: 
     memory: "1Gi" 
    volumes: 
    - name: zalenium-shared 
    persistentVolumeClaim: 
     claimName: zalenium-shared-claim 
    - name: zalenium-videos 
    persistentVolumeClaim: 
     claimName: zalenium-videos-claim 

私はオンラインのYAMLファイルバリデーターを使用しようとしましたが、フォーマットに問題がないようです。 validate = falseフラグを指定して上記のデプロイメントを作成しようとすると、デプロイメントは実行されますが、ポッドは継続的にクラッシュして再起動します(crashLoopBackOff)。何を調べるべきですか?私はまだk8に精通していますが、エラーから私は展開のコンテナ仕様と関係があると思います。これに近づくためのヒント?ありがとう!

答えて

1

エラーメッセージの状態セレクタがv1.PodSpecinvalid fieldであるため、このフィールドは.spec.template.spec.selectorでは無効です。あなたが探しているものは.spec.selectorだと思います。言われていること

、ドキュメントの状態:

If specified, .spec.selector must match .spec.template.metadata.labels, or it will be rejected by the API.

つまり、あなたのメタデータ・ラベル(.spec.template.metadata.labels時)にもrole: gridを追加する必要があります。 .yamlファイルは次のようになります。

apiVersion: apps/v1beta1 
kind: Deployment 
metadata: 
name: zalenium-deployment 
spec: 
selector: 
    matchLabels: 
    app: zalenium 
    role: grid 
replicas: 1 
template: 
    metadata: 
    labels: 
    app: zalenium 
    role: grid 
    spec: 
    serviceAccountName: zalenium 
    serviceAccount: zalenium 
    containers: 
    - name: zalenium-pod 
     image: dosel/zalenium 
     ports: 
     - containerPort: 4444 
     protocol: TCP 
     volumeMounts: 
     - name: zalenium-shared 
     mountPath: /tmp/mounted 
     - name: zalenium-videos 
     mountPath: /home/seluser/videos 
     resources: 
     requests: 
     memory: "250m" 
     cpu: "500m" 
     limits: 
     memory: "1Gi" 
    volumes: 
    - name: zalenium-shared 
    persistentVolumeClaim: 
     claimName: zalenium-shared-claim 
    - name: zalenium-videos 
    persistentVolumeClaim: 
     claimName: zalenium-videos-claim 
+0

ありがとうございました!しかし、ラベルフィールドを追加しても同じエラーが出力されます。 – appdap1

+0

'.spec.selector.matchLabels'フィールドに変更しましたか?これはセレクタフィールドとは異なります。 (k8sの '1.7.3'では.yamlファイルが動作します) – fishi

+0

ありがとう!今は動作しますが、最初にmatchLabelsフィールドを追加しませんでした。あなたが作成したポッドではなく、実際のデプロイメント/ハブのためにセレクタを使いたいと思っています。 matchLabelは、セレクタの代わりにすべてのDeploymentオブジェクトに対して何かを行うのですか?またはこの特定のケースでのみここで使用されていますか?また、展開によって作成された各ポッドにセレクタを追加しようとしているときに、私は何をしますか?もう一度助けてくれてありがとう! – appdap1

関連する問題