Sobes.tech
Middle

Wat zijn PV en PVC in de context van Kubernetes?

sobes.tech AI

Antwoord van AI

Persistent Volume (PV) is een opslagresource in de Kubernetes-cluster. Het abstraheert de details van de specifieke implementatie van opslag van de consumenten. PV wordt beheerd door de clusterbeheerder en bestaat onafhankelijk van de levenscyclus van elke pod.

Persistent Volume Claim (PVC) is een verzoek van de gebruiker voor opslag. De gebruiker vraagt een opslagvolume met bepaalde kenmerken (grootte, toegangsmode). PVC wordt gekoppeld aan een geschikt PV. Als er geen geschikt PV wordt gevonden, kan dynamische provisioning van een nieuw PV worden uitgevoerd als een bijbehorende StorageClass is geconfigureerd.

Belangrijkste verschillen en interacties:

  • PV: Vertegenwoordigt de feitelijke opslagbron.
  • PVC: Vertegenwoordigt het opslagverzoek van de gebruiker.
  • PVC wordt gekoppeld aan PV.
  • PV kan statisch worden gemaakt door de beheerder of dynamisch worden gemaakt in reactie op een PVC met behulp van een StorageClass.
  • Pod verwijst naar PVC, niet rechtstreeks naar PV, waardoor de applicatielogica gescheiden kan worden van de opslagdetails.

Toegangsmodi (Access Modes) voor PV en PVC:

  • ReadWriteOnce (RWO): De volume kan door één knooppunt tegelijk worden gemonteerd voor lezen en schrijven.
  • ReadOnlyMany (ROX): De volume kan door meerdere knooppunten tegelijk alleen worden gemonteerd voor lezen.
  • ReadWriteMany (RWX): De volume kan door meerdere knooppunten tegelijk worden gemonteerd voor lezen en schrijven.

Voorbeeld YAML voor PV en PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Wat te doen met de volume na het verwijderen van PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Kan worden gebruikt om te koppelen aan een StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Affiniteit voor lokale opslag
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - my-node
# persistent-volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage # Koppeling met PV of StorageClass
# pod-using-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: nginx
      volumeMounts:
        - name: app-storage
          mountPath: /usr/share/nginx/html
  volumes:
    - name: app-storage
      persistentVolumeClaim:
        claimName: my-pvc # Verwijzing naar PVC