2016-07-28 5 views
1

Ich möchte Volumes für Bereitstellungen mit mehr als einem Replikat verwenden. Wie definiere ich eine PersistentVolumeClaim, so dass es für jedes Replikat generiert wird? Im Moment (siehe Beispiel unten) kann ich ein Volume erstellen und es den Pods zuweisen. Das Problem ist, dass nur ein Volumen erzeugt wird, die diese Fehlermeldungen verursacht:Wie werden Volumes in Kubernetes-Bereitstellungen verwendet?

38m 1m 18 {kubelet worker-1.loc}  Warning FailedMount Unable to mount volumes for pod "solr-1254544937-zblou_default(610b157c-549e-11e6-a624-0238b97cfe8f)": timeout expired waiting for volumes to attach/mount for pod "solr-1254544937-zblou"/"default". list of unattached/unmounted volumes=[datadir] 
    38m 1m 18 {kubelet worker-1.loc}  Warning FailedSync Error syncing pod, skipping: timeout expired waiting for volumes to attach/mount for pod "solr-1254544937-zblou"/"default". list of unattached/unmounted volumes=[datadir] 

Wie kann ich Kubernetes sage ein Volumen für jede Replik zu generieren?

Ich verwende Kubernetes 1.3.


Beispiel:

--- 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: solr-datadir 
    annotations: 
    volume.alpha.kubernetes.io/storage-class: anything 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 50Gi 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 

metadata: 
    name: solr 
    labels: 
    team: platform 
    tier: search 
    app: solr 

spec: 
    revisionHistoryLimit: 3 
    replicas: 3 

    template: 
    metadata: 
     name: solr 
     labels: 
     team: platform 
     tier: search 
     app: solr 

    spec: 
     containers: 
     - name: solr 
     image: solr:6-alpine 
     imagePullPolicy: IfNotPresent 
     ports: 
     - name: http 
      containerPort: 80 
     resources: 
      requests: 
      cpu: 512m 
      memory: 512Mi 
     command: 
     - /bin/bash 
     args: 
     - -c 
     - /opt/solr/bin/solr start -f -z zookeeper:2181 
     volumeMounts: 
     - mountPath: "/opt/solr/server/solr/mycores" 
      name: datadir 
     volumes: 
     - name: datadir 
     persistentVolumeClaim: 
      claimName: solr-datadir 

Erzeugen Schoten:

$ kubectl get pods -lapp=solr 
NAME     READY  STATUS    RESTARTS AGE 
solr-1254544937-chenr 1/1  Running    0   55m 
solr-1254544937-gjud0 0/1  ContainerCreating 0   55m 
solr-1254544937-zblou 0/1  ContainerCreating 0   55m 

generierten Volumen:

$ kubectl get pv 
NAME          CAPACITY ACCESSMODES STATUS CLAIM       REASON AGE 
pvc-3955e8f1-549e-11e6-94be-060ea3314be5 50Gi  RWO   Bound  default/solr-datadir     57m 

Erzeugen Ansprüche:

0.123.
$ kubectl get pvc 
NAME     STATUS VOLUME          CAPACITY ACCESSMODES AGE 
solr-datadir   Bound  pvc-3955e8f1-549e-11e6-94be-060ea3314be5 0      57m 

Antwort

9

ReplicaSets behandeln Volumes als zustandslos. Wenn Ihre Replikat-Pod-Vorlage ein Volume angibt, das nur einmal mit Lese-/Schreibzugriff verknüpft werden kann, wird dasselbe Volume von allen Pods in diesem Replikat verwendet. Wenn dieses Volume nur mit Lese- und Schreibzugriff auf einen Knoten gleichzeitig verbunden werden kann (wie GCE-PDs), können nach dem erfolgreichen Planen und Starten des ersten Pods nachfolgende Instanzen des Pods nicht gestartet werden, wenn sie auf einem anderen Knoten geplant sind , weil das Volume nicht an den zweiten Knoten anhängen kann.

Was Sie suchen, ist Pet Sets, mit denen Sie ein Volumen für jedes Replikat erstellen können. Siehe http://kubernetes.io/docs/user-guide/petset/ Die Funktion befindet sich derzeit in Alpha, sollte jedoch Ihren Anwendungsfall ansprechen.

Update: In Kubernetes wurden 1,5+ PetSets in StatefulSets umbenannt. Siehe Dokumentation here.

+0

Beachten Sie, dass Bereitstellungen derzeit nur Pods und Replikatsets und keine PetSets unterstützen. –

+0

Und das wird von GKE zumindest in der Beta noch nicht unterstützt :( –

+0

Warten auf 1.5 auf GKE –