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?
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
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). –
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