![Das Erstellen mehrerer lokaler persistenter Volumes auf demselben Knoten mit demselben Pfad funktioniert einwandfrei](https://rvso.com/image/747335/Das%20Erstellen%20mehrerer%20lokaler%20persistenter%20Volumes%20auf%20demselben%20Knoten%20mit%20demselben%20Pfad%20funktioniert%20einwandfrei.png)
Während des Setup-Tests auf einem Kubernetes-Cluster mit 2 Worker-Knoten unter Verwendung von kind (https://kind.sigs.k8s.io/docs/user/quick-start), ist mir das eingefallen und ich kann nirgendwo sonst Informationen dazu finden.
Ich habe auf allen meinen Arbeitsknoten in /var/testpv einen Ordner erstellt und das folgende PV erstellt:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pg-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: fast-disks
local:
path: /var/testpv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- fvi-worker2
- fvi-worker
Es hat gut funktioniert, also habe ich ein zweites erstellt:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pg-pv2
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: fast-disks
local:
path: /var/testpv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- fvi-worker
- fvi-worker2
(Dasselbe, nur anderer Name)
Dann habe ich 2 PVC mit dieser Speicherklasse erstellt:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-local-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: fast-disks
Und
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-local-claim2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: fast-disks
Und schließlich zwei Pods, die diese PVCs verwenden:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: example-local-claim
Und
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: example-local-claim2
Es funktioniert alles einwandfrei. Ich kann sehen, dass die auf jedem dieser Pods erstellten Dateien in den richtigen Speicher gelangen, wobei sich jeder Pod auf einem anderen Arbeitsknoten befindet.
Wenn ich jedoch versuche, ein neues PV, PVC und Pod zu erstellen, tritt keinerlei Fehler auf!
Schlimmer noch, PV wird am selben Ort erstellt, sodass ich tatsächlich (je nach Situation) Pod1- oder Pod2-Dateien sehen kann!
Ich hätte angenommen, dass Kubernetes eine Art Prüfung durchführt, ob tatsächlich ein PV für denselben Host mit demselben Code existiert, aber das ist anscheinend nicht der Fall.
Übersehe ich etwas? Mache ich etwas falsch? Oder ist es äußerst wichtig, beim Erstellen von PVs tatsächlich sehr vorsichtig zu sein?
Vielen Dank für alle Informationen,
Antwort1
Ja, es funktioniert, weil es die einzige Möglichkeit ist, Festplatten bei Verwendung von lokalem PV freizugeben. Dies ist das erwartete Verhalten. In einigen Fällen möchten Sie möglicherweise Dateien zwischen Pods freigeben, und dies ist eine Möglichkeit, dies zu erreichen.