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