webentwicklung-frage-antwort-db.com.de

Kubernetes NFS Persistent Volumes - mehrere Ansprüche auf demselben Volume? Anspruch anhängig?

Anwendungsfall:

Ich habe ein NFS-Verzeichnis zur Verfügung und möchte es verwenden, um Daten für mehrere Bereitstellungen und Pods beizubehalten.

Ich habe ein PersistentVolume erstellt:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: http://mynfs.com
    path: /server/mount/point

Ich möchte, dass mehrere Bereitstellungen dieses PersistentVolume verwenden können. Daher muss ich nach meinem Verständnis mehrere PersistentVolumeClaims erstellen, die alle auf dieses PersistentVolume verweisen.

kind: PersistentVolumeClaim
apiVersion: v1
metaData:
  name: nfs-pvc-1
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Mi

Ich glaube, dass dies einen Anspruch von 50 MB auf das PersistentVolume schafft. Wenn ich kubectl get pvc Ausführe, sehe ich:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s

Ich verstehe nicht, warum ich 10Gi-Kapazität sehe, nicht 50Mi.

Wenn ich dann das PersistentVolumeClaim Implementierungs-YAML ändere, um eine PVC mit dem Namen nfs-pvc-2 Zu erstellen, erhalte ich Folgendes:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s
nfs-pvc-2   Pending                                        10s

PVC2 bindet niemals an die PV. Ist das erwartetes Verhalten? Kann ich mehrere PVCs auf dieselbe PV zeigen lassen?

Wenn ich nfs-pvc-1 Lösche, sehe ich dasselbe:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-2   Pending                                        10s

Ist das wieder normal?

Wie kann eine gemeinsam genutzte NFS-Ressource auf geeignete Weise zwischen mehreren Bereitstellungen/Pods verwendet/wiederverwendet werden?

18
John

Grundsätzlich können Sie nicht tun, was Sie wollen, da die Beziehung PVC <-> PV eins zu eins ist.

Wenn NFS der einzige verfügbare Speicher ist und Sie mehrere PV/PVC-Speicher bei einem NFS-Export benötigen, verwenden Sie Dynamic Provisioning und eine Standardspeicherklasse.

Es ist noch nicht im offiziellen K8, aber dieses ist im Inkubator und ich habe es ausprobiert und es funktioniert gut: https://github.com/kubernetes-incubator/external-storage/tree/master/nfs -Client

Dies vereinfacht Ihre Volumenbereitstellung enorm, da Sie sich nur um die PVC kümmern müssen, und die PV wird als Verzeichnis auf dem von Ihnen definierten nfs export/server erstellt.

12
Volker Kerkhoff

Von: https://docs.openshift.org/latest/install_config/storage_examples/shared_storage.html

Wie von Baroudi Safwen erwähnt, können Sie nicht zwei PVCs an dasselbe PVC binden, aber Sie können dasselbe PVC in zwei verschiedenen Gehäusen verwenden.

volumes:
- name: nfsvol-2
  persistentVolumeClaim:
    claimName: nfs-pvc-1 <-- USE THIS ONE IN BOTH PODS   
10
Javier Salmeron

Ein Anspruch auf ein persistentes Volume ist ausschließlich an ein persistentes Volume gebunden.
Sie können nicht 2 PVC an dasselbe PV binden .

Ich denke, Sie interessieren sich für die dynamische Bereitstellung. Dieses Problem trat auf, als ich Statefulsets bereitstellte, für die eine dynamische Bereitstellung für Pods erforderlich ist. Sie müssen also einen NFS-Bereitsteller in Ihrem Cluster bereitstellen. Der NFS-Bereitsteller (Pod) hat Zugriff auf den NFS-Ordner (Hostpfad). Jedes Mal, wenn ein Pod ein Volume anfordert, wird er vom NFS-Bereitsteller im NFS-Verzeichnis im Auftrag bereitgestellt der Hülse.
Hier ist das Github-Repository, um es bereitzustellen:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs/deploy/kubernetes
Sie müssen jedoch vorsichtig sein und sicherstellen, dass der nfs-Bereitsteller immer auf demselben Computer ausgeführt wird, auf dem sich der NFS-Ordner befindet, indem Sie die Knotenauswahl verwenden, da das Volume vom Typ hostpath ist.

6
Baroudi Safwen

einige Punkte zur dynamischen Bereitstellung.

wenn Sie die dynamische Bereitstellung von NFS verwenden, können Sie keine der standardmäßigen NFS-Mount-Optionen ändern. Auf meiner Plattform wird eine Größe von 1M verwendet. Dies kann in einigen Anwendungen, die kleine Dateien verwenden oder das Lesen blockieren, zu großen Problemen führen. (Ich habe gerade dieses Problem in einer großen Weise getroffen)

dynamic ist eine großartige Option, wenn es Ihren Bedürfnissen entspricht. Ich bin jetzt damit beschäftigt, 250 PV/PVC-Paare für meine Anwendung zu erstellen, die aufgrund der 1-1-Beziehung von Dynamic verarbeitet wurden.

0
Pete Smith