Kubernetes – PersitentVolume vs. StorageClass

Kubernetes – PersitentVolume vs. StorageClass

Ich habe dieses Beispiel eines persistenten Volumes vondieser Artikel über PostgreSQL über Kubernetes Statefulset

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pgdata
  labels:
    app: postgres
    type: local
spec:
  storageClassName: sc001
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/data"

Dies scheint zu funktionieren, hat aber ein Problem mit der Logik.

  1. soweit ich die Angelegenheit verstehe, die Sie brauchenentwederApersistentVolume odera, storageClassum die Bedürfnisse von a zu erfüllen PersistentVolumeClaim. Wobei a PVstatisch ist, während SCa dynamisch ist. Ich verstehe entweder/oder als exklusiventwedereinsoderdas andere,nicht beide(Ich glaube, das wird NORim Gegensatz zu aufgerufen OR.)
    Ich verstehe also nicht, was a storageClaseNamehier macht. Kann mir jemand beim logischen Verständnis helfen?

  2. Ich glaube type: localund path: "/var/data"meine, dass das Volume im lokalen Dateisystem des Knotens existiert und sein Inhalt im /var/dataVerzeichnis auf diesem Knoten gefunden werden kann.
    Welchen Wert müsste ich verwenden, typewenn ich etwas anderes verwenden möchte? Wie etwa von einem Provisioner bereitgestellten Speicher (in meinem Fall csi.vsphere.vmware.com)?

Antwort1

Hoffe, ich habe die Frage richtig beantwortet.

Ein persistentVolumeClaim wird immer an ein persistentes Volumen gebunden. Die Idee besteht darin, einen Anspruch mit einer Festplatte zu verbinden, sodass der Pod sich an dieselbe Festplatte anhängen kann, unabhängig davon, auf welchem ​​Knoten er bereitgestellt wird.

Eine StorageClass ist ein automatischer Bereitstellungsmechanismus für persistente Datenträger. Das bedeutet, wenn Sie einen persistenten Datenträgeranspruch angeben und eine Standard-StorageClass konfiguriert ist, wird ein persistenter Datenträger erstellt und an den persistenten Datenträgeranspruch angehängt.

Sie können auch manuell ein persistentes Volumen erstellen und es wird an den persistenten Volumenanspruch angehängt (unabhängig von einer Speicherklasse), aber stellen Sie sich eine große Umgebung mit Hunderten von PVCs vor und verwalten Sie für jedes PVC ein PV.

Sie können auch ein PV angeben, an das das PVC angehängt werden soll.

Die type:localKonfiguration ist ein lokales Volume auf dem Knoten, das als PV fungiert. In Ihrem Fall erstellt VMware eine VMDK-Datei und kopiert sie auf den Knoten, auf dem der Pod bereitgestellt wird.

Hoffentlich hilft das.

Antwort2

Question: So I do not understand what a storageClaseName is doing in here. Can anybody help me out with the logical understanding?

Der storageClaseName dient zur Angabe der Klasse eines persistenten Datenträgers. Ich werde das anhand eines Anwendungsfalls erklären. Stellen Sie sich vor, Sie möchten den Speicher Ihrer produktionskritischen Apps in drei verschiedenen Kategorien verwalten: Gold, Silber und Bronze. Gold ist für produktionskritische Anwendungen und der Rest für weniger kritische Apps. Jetzt können Sie einer Anwendung basierend auf ihrem Risikoniveau ganz einfach den gewünschten Speichertyp zuweisen. Wenn ich beispielsweise Gold-Klasse-Speicher für meinen Video-Streaming-Dienst verwenden möchte, muss ich ein PVC mit einem storageClassName angeben, der auf die Gold-Klasse eingestellt ist. Jetzt findet Kubernetes (sofern verfügbar) ein PV der Gold-Klasse, um diese Anforderung zu erfüllen. Wenn ein PV vorhanden ist, dessen Größe für dieses PVC ausreicht, das aber nicht zur Gold-Klasse gehört, wird dieses PV nicht verwendet, um diese Anforderung zu erfüllen.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gold-class-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: gold-class-storage
  ....
Question: What value would I have to use for type whether I wanted to use something else?

Bitte folgen Sie diesem Link: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes

verwandte Informationen