2017-09-12 39 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標誌創建上面的部署時,部署運行,但是隨後POD不斷崩潰並重新啓動(crashLoopBackOff)。我應該看什麼?我仍然熟悉k8s,但從錯誤我會認爲它與我的部署中的容器規格有關。任何提示接近這個?謝謝!

回答

1

由於錯誤消息狀態選擇器是invalid fieldv1.PodSpec - 所以此字段在.spec.template.spec.selector無效。我認爲你要找的是.spec.selector

話雖這麼說,在文檔中指出:

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

所以還必須添加role: grid到您的元數據標籤(在.spec.template.metadata.labels)。你的.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字段。對於我想要使用選擇器來進行實際部署/集線器而不是其創建的pod,你是對的。 matchLabel是我們爲所有Deployment對象而不是選擇器所做的事情,還是僅在此特定情況下才使用它?當我試圖將選擇器添加到由部署創建的每個Pod時,我該怎麼辦?再次感謝您的幫助! – appdap1

相關問題