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

问题描述 投票:0回答:2

我正在尝试部署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

请确认清单文件是否正确,如果我错过了什么,请告诉我。

kubernetes manifest elk
2个回答
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


kind: Service apiVersion: v1 metadata: name: elk-service labels: app: elk-kibana spec: type: LoadBalancer externalIPs: - 10.0.2.15 selector: app: elastickibana <--and this should be like this ports: - port: 5601 name: elasticservice ports: - port: 9200 name: serving-http
现在,在发布任何问题之前,请尝试进行调查。您可以通过仅匹配文档中的Deployment和Service示例来了解这些基础知识。 

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

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)

$ kubectl get ep elk-service NAME ENDPOINTS AGE elk-service <none> 9m27s

如果分配了正确的标签选择器:

$ kubectl get ep elk-service NAME ENDPOINTS AGE elk-service 172.17.0.6:9200 10m

参考:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
© www.soinside.com 2019 - 2024. All rights reserved.