【问题标题】:Getting label ValidationError Error while executing manifest file in kubernetes在 Kubernetes 中执行清单文件时出现标签 ValidationError 错误
【发布时间】:2020-05-06 04:44:12
【问题描述】:

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


    【解决方案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
    

    现在,请在发布任何问题之前尝试进行调查。这些是您只需匹配文档中的部署和服务示例即可找到的基础知识。

    【讨论】:

    • “感谢您的更改”,在这些更改之后,我可以运行相同的操作。但是....错误验证数据:ValidationError(Deployment.spec.selector):io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector中的未知字段“matchlabels”;如果您选择忽略这些错误,请使用 --validate=false 关闭验证
    【解决方案2】:

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

    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/

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2018-06-17
      • 1970-01-01
      • 2019-04-29
      • 2022-07-02
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      相关资源
      最近更新 更多