在kubernetes中执行清单文件时获取标签验证错误

在kubernetes中执行清单文件时获取标签验证错误,kubernetes,manifest,elk,Kubernetes,Manifest,Elk,我正在尝试部署kubernetes清单文件,但由于下面的ValidationError而失败 错误: error validating data: ValidationError(Deployment.spec.selector): unknown field "app" in io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector; if you choose to ignore these errors, turn validation off

我正在尝试部署kubernetes清单文件,但由于下面的ValidationError而失败

错误:

error validating data: ValidationError(Deployment.spec.selector): unknown field "app" in io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector; if you choose to ignore these errors, turn validation off with --validate=false

清单文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elastickibana
spec:
  replicas: 1
  selector:
    app: elastickibana
  template:
    metadata:
    spec:
      containers:
      - name: elk
        image: daniccan/kibana-plugin-tester:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 5601
        - containerPort: 9200
        env:
        - name: KIBANA_VERSION
          value: 6.8.2
        - name: PLUGIN_FILE_NAME
          value: kibana-c8-plugin-Alpha-0.0.1-Kibana-6.8.2.zip
        - name: KIBANA_PLUGIN_PATH
          value: /home/sreenivasa/Projects/c8/infrastructure/capsule8-sandbox
---
kind: Service
apiVersion: v1
metadata:
  name: elk-service
  labels:
    app: elk-kibana
spec:
  type: LoadBalancer
  externalIPs:
  - 10.0.2.15
  selector:
    name: elk-kibana
  ports:
  - port: 5601
    name: elasticservice
  ports:
  - port: 9200
    name: serving-http

请验证我的清单文件是否正确,如果我遗漏了什么,请告诉我

您的部署中缺少标签选择器,模板下的标签也在部署中丢失,您的服务标签选择器应该与这些标签匹配

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elastickibana
spec:
  replicas: 1
  selector:
    matchlabels:                     <--missing this
      app: elastickibana
  template:
    metadata:
      labels:                        <--and this
        app: elastickibana
    spec:
      containers:
      - name: elk
        image: daniccan/kibana-plugin-tester:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 5601
        - containerPort: 9200
        env:
        - name: KIBANA_VERSION
          value: 6.8.2
        - name: PLUGIN_FILE_NAME
          value: kibana-c8-plugin-Alpha-0.0.1-Kibana-6.8.2.zip
        - name: KIBANA_PLUGIN_PATH
          value: /home/sreenivasa/Projects/c8/infrastructure/capsule8-sandbox
apiVersion:apps/v1 种类:部署 元数据: 姓名:elastickibana 规格: 副本:1份 选择器:
匹配标签:您的部署中缺少标签选择器,模板下的标签也在部署中丢失,您的服务标签选择器应该与这些标签匹配

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elastickibana
spec:
  replicas: 1
  selector:
    matchlabels:                     <--missing this
      app: elastickibana
  template:
    metadata:
      labels:                        <--and this
        app: elastickibana
    spec:
      containers:
      - name: elk
        image: daniccan/kibana-plugin-tester:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 5601
        - containerPort: 9200
        env:
        - name: KIBANA_VERSION
          value: 6.8.2
        - name: PLUGIN_FILE_NAME
          value: kibana-c8-plugin-Alpha-0.0.1-Kibana-6.8.2.zip
        - name: KIBANA_PLUGIN_PATH
          value: /home/sreenivasa/Projects/c8/infrastructure/capsule8-sandbox
apiVersion:apps/v1 种类:部署 元数据: 姓名:elastickibana 规格: 副本:1份 选择器:
匹配标签:首先,只有在有标签时才需要使用选择器。您必须在部署元数据中定义标签,并在副本集中使用它

apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: elastickibana
      labels:
        app: elastickibana
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: elastickibana
      template:
        metadata:
          labels:
            app: elastickibana
        spec:
          containers:
          - name: elk
            image: daniccan/kibana-plugin-tester:latest
            imagePullPolicy: Always
            ports:
            - containerPort: 5601
            - containerPort: 9200
            env:
            - name: KIBANA_VERSION
              value: 6.8.2
            - name: PLUGIN_FILE_NAME
              value: kibana-c8-plugin-Alpha-0.0.1-Kibana-6.8.2.zip
            - name: KIBANA_PLUGIN_PATH
              value: /home/sreenivasa/Projects/c8/infrastructure/capsule8-sandbox
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: elk-service
      labels:
        app: elastickibana
    spec:
      type: LoadBalancer
      externalIPs:
      - 10.0.2.15
      selector:
        app: elastickibana
      ports:
      - port: 5601
        name: elasticservice
      ports:
      - port: 9200
        name: serving-http
您的服务也不正确:它需要匹配pod的标签,如果不匹配,服务将不会分配给任何端点(pod IP)


参考资料:

首先,只有当您有标签时才需要使用选择器。您必须在部署元数据中定义标签,并在副本集中使用它

apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: elastickibana
      labels:
        app: elastickibana
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: elastickibana
      template:
        metadata:
          labels:
            app: elastickibana
        spec:
          containers:
          - name: elk
            image: daniccan/kibana-plugin-tester:latest
            imagePullPolicy: Always
            ports:
            - containerPort: 5601
            - containerPort: 9200
            env:
            - name: KIBANA_VERSION
              value: 6.8.2
            - name: PLUGIN_FILE_NAME
              value: kibana-c8-plugin-Alpha-0.0.1-Kibana-6.8.2.zip
            - name: KIBANA_PLUGIN_PATH
              value: /home/sreenivasa/Projects/c8/infrastructure/capsule8-sandbox
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: elk-service
      labels:
        app: elastickibana
    spec:
      type: LoadBalancer
      externalIPs:
      - 10.0.2.15
      selector:
        app: elastickibana
      ports:
      - port: 5601
        name: elasticservice
      ports:
      - port: 9200
        name: serving-http
您的服务也不正确:它需要匹配pod的标签,如果不匹配,服务将不会分配给任何端点(pod IP)

参考资料:

“感谢您的更改”,在这些更改之后,我可以运行相同的程序。但是验证数据时出错:ValidationError(Deployment.spec.selector):io.k8s.apimachinery.pkg.API.meta.v1.LabelSelector中的未知字段“matchlabels”;如果选择忽略这些错误,请使用--validate=false“感谢您的更改”关闭验证,在这些更改之后,我可以运行相同的验证。但是验证数据时出错:ValidationError(Deployment.spec.selector):io.k8s.apimachinery.pkg.API.meta.v1.LabelSelector中的未知字段“matchlabels”;如果选择忽略这些错误,请使用--validate=false关闭验证
$ kubectl get ep elk-service 
NAME          ENDPOINTS         AGE
elk-service   172.17.0.6:9200   10m