2016-05-20 33 views
11

Kubernetes 1.2.4'ü kullanarak, neden aşağıdaki Deployment tanımım (redis.yaml) aşağıdaki hatayı veriyor?Kubernetes - Seçim alanı neden Dağıtım için doğrulanamıyor?

$ kubectl apply -f redis.yaml 
error validating "redis.yaml": error validating data: found invalid field name for v1beta1.LabelSelector; if you choose to ignore these errors, turn validation off with --validate=false 

redis.yaml: Eğer matchLabels veya matchExpressions ya bir alt alanını kullanmak require Dağıtımları içinde

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: redis 
spec: 
    replicas: 3 
    selector: 
    name: redis 
    template: 
    metadata: 
     labels: 
     name: redis 
    spec: 
     containers: 
     - name: redis 
     image: kubernetes/redis:v1 
     ports: 
     - containerPort: 6379 
     resources: 
      limits: 
      cpu: "0.1" 
     volumeMounts: 
     - mountPath: /redis-master-data 
      name: data 
     volumes: 
     - name: data 
      emptyDir: {} 

cevap

10

Seçici direktifleri, benim durumumda ben matchLabels faydalanmak gerekir böylece:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: redis 
spec: 
    replicas: 3 
    selector: 
    matchLabels: 
     name: redis 
    template: 
    metadata: 
     labels: 
     name: redis 
    spec: 
     containers: 
     - name: redis 
     image: kubernetes/redis:v1 
     ports: 
     - containerPort: 6379 
     resources: 
      limits: 
      cpu: "0.1" 
     volumeMounts: 
     - mountPath: /redis-master-data 
      name: data 
     volumes: 
     - name: data 
      emptyDir: {} 
11

birarasında selector alannesnesi, yalnızca düz bir haritadan ziyade v1beta1.LabelSelector tipindedir. Yani, selector ait matchLabels alanının altındaki etiket ekleyebilirsiniz ya:

Redis-ile-matchLabels.yaml

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: redis 
spec: 
    replicas: 3 
    selector: 
    matchLabels: 
     name: redis 
    template: 
    metadata: 
     labels: 
     name: redis 
    spec: 
     containers: 
     - name: redis 
     image: kubernetes/redis:v1 
     ports: 
     - containerPort: 6379 
     resources: 
      limits: 
      cpu: "0.1" 
     volumeMounts: 
     - mountPath: /redis-master-data 
      name: data 
     volumes: 
     - name: data 
      emptyDir: {} 

Veya DeploymentSpec üzerinden LabelSelector bırakın bu durumda o olacak PodSpec etiketlerin maç:

Redis-podSpec-labels.yaml

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: redis 
    template: 
    metadata: 
     labels: 
     name: redis 
    spec: 
     containers: 
     - name: redis 
     image: kubernetes/redis:v1 
     ports: 
     - containerPort: 6379 
     resources: 
      limits: 
      cpu: "0.1" 
     volumeMounts: 
     - mountPath: /redis-master-data 
      name: data 
     volumes: 
     - name: data 
      emptyDir: {} 

Dağıtım belgelerinin Selector section'una bakın.

+0

".spec.selector" amacına göre detaylandırır mısınız? Belgeleme ile biraz kafam karışmış, özellikle "Paragraf" belirtilmişse, ".spec.selector" ile eşleşmelidir .spec.template.metadata.labels "[...]. Eğer .spec.selector' belirtilmemişse , .spec.selector.matchLabels, '.spec.template.metadata.labels' için varsayılan olacak. ".spec.selector.matchLabels" ile eşleşmesi gerekiyorsa .spec.selector'ın amacının ne olduğu, ancak belirtilmemişse de varsayılanı nedir? –

+0

Son cümledeki ".spec.selector.matchLabels" yerine ".spec.template.metadata.labels" demek istedim, üzgünüm. –

İlgili konular