2016-08-28 3 views
2

Ich habe einen GCE Container Cluster bestehend aus 3 Knoten. An jedem Knoten betreibe ich einen POD wie, dass man:Kann eine PersistentVolumeClaim an mehrere PersistentVolumes binden?

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: test-deployment 
spec: 
    replicas: 3 
    template: 
    metadata: 
     labels: 
     app: none 
     track: stable 
    spec: 
     containers: 
     - name: hello 
      image: gcr.io/persistent-volumes-test/alpine:v1.2 
      resources: 
      limits: 
       cpu: 0.2 
       memory: "10Mi" 
      volumeMounts: 
      - mountPath: "/persistentDisk" 
      name: persistent-disk 
      ports: 
      - containerPort: 65535 
      name: anti-affinity 
      hostPort: 65535 
     volumes: 
     - name: persistent-disk 
      persistentVolumeClaim: 
      claimName: myclaim 

Der Trick der Definition des „anti-Affinität“ Port sorgt dafür, dass jeder POD auf einem anderen Knoten ausgeführt wird. Ich habe 3 PersistentVolume erstellt wie folgt definiert:

kind: PersistentVolume 
apiVersion: v1 
metadata: 
    name: persistent-volume-1 
    annotations: 
     volume.beta.kubernetes.io/storage-class: "slow" 
    labels: 
     release: "dev" 
spec: 
    capacity: 
     storage: 10Gi 
    accessModes: 
     - ReadWriteOnce 
    persistentVolumeReclaimPolicy: Retain 
    gcePersistentDisk: 
     pdName: persistent-disk-1 
     fsType: ext4 

und sie sind gut

NAME     CAPACITY ACCESSMODES STATUS  CLAIM    REASON AGE 
persistent-volume-1 10Gi  RWO   Released default/myclaim    13h 
persistent-volume-2 10Gi  RWO   Released default/myclaim    5h 
persistent-volume-3 10Gi  RWO   Available        5h 

der Anspruch Definition eingesetzt ist folgende:

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: myclaim 
    annotations: 
    volume.beta.kubernetes.io/storage-class: "slow" 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 10Gi 
    selector: 
    matchLabels: 
     release: "dev" 

Was bemerkte ich, ist, dass der Anspruch Begrenzt nur auf eines der von mir erstellten Volumes. Daher kann nur einer meiner PODS erfolgreich bereitgestellt werden. Was ich erwartet hatte, war, dass der Claim, wenn er von einem POD verwendet wurde, ein verfügbares Volume gefunden hätte, an das er sich gebunden hatte, und die selectors-Regeln entsprach. Mit anderen Worten, was ich von PersistentVolumeClaims interpretiert habe, ist, dass ein POD Anspruch darauf verwendet, ein verfügbares Volume in einer Menge von PersistentVolumes zu suchen, die mit PVC-Spezifikationen übereinstimmen. Das ist meine Frage:

kann das gleiche PersistentVolumeClaim von verschiedenen Instanzen des gleichen POD verwendet werden, um mit verschiedenen PersistentVolumes verbunden zu werden? Oder ist die Reklamation nach der Erstellung an ein einziges Volume gebunden und kann nicht an ein anderes Volume gebunden werden?

Wenn die richtige Antwort die zweite ist, wie kann ich ein POD dynamisch an eine PersistentVolume (ausgewählt aus einer Menge) binden, wenn keine POD für jedes Volume erstellt wird Ich muss mich verbinden?

Antwort

3

Eine PersistentVolumeClaim reserviert eine bestimmte Speicherinstanz, die ihre Anforderung erfüllt. Unter Verwendung derselben PersistentVolumeClaim in mehreren Pods wird versucht, die gleiche Grenze PersistentVolume in jedem der Pods zu verwenden, was im Fall einer gcePersistentDisk nicht möglich ist.

Versuchen Sie, einen separaten PersistentVolumClaim für jeden Pod zu erstellen.

Der Lifecycle Abschnitt der Persistent Volumes doc bietet einen schönen Überblick.

+0

Also muss ich 3 verschiedene 'Pods' erstellen, jede mit einem anderen' PersistentVolumeClaim', ich kann nicht die 'Deployment' oben verwenden, die dreimal den gleichen' Pod' repliziert, das ist richtig? – Paolone

+0

Mit einer Bereitstellung ist das korrekt. Ich glaube, das [PetSet] (http://kubernetes.io/docs/user-guide/petset/) -Objekt bietet die Art von Speicherabstraktion, nach der Sie suchen (aber PetSets sind ziemlich neu und mir nicht so vertraut). –

+0

Ich denke 'Pets' sind was ich brauche:' PetSets' werden auch als ["Clustered Applications" bezeichnet] (http://kubernetes.io/docs/user-guide/petset/#what-is-a-pet- Set) das ist genau das, was ich versuche zu bauen. Ich werde untersuchen, wie man sie benutzt. – Paolone

Verwandte Themen