我正在尝试部署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
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示例来了解这些基础知识。
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/