Das Erstellen mehrerer lokaler persistenter Volumes auf demselben Knoten mit demselben Pfad funktioniert einwandfrei

Das Erstellen mehrerer lokaler persistenter Volumes auf demselben Knoten mit demselben Pfad funktioniert einwandfrei

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.

verwandte Informationen