Τι είναι PV και PVC στο πλαίσιο του Kubernetes;
sobes.tech AI
Απάντηση από AI
Το Persistent Volume (PV) είναι ένας πόρος αποθήκευσης στο cluster Kubernetes. Αποκρύπτει τις λεπτομέρειες της συγκεκριμένης υλοποίησης της αποθήκευσης από τους καταναλωτές. Το PV διαχειρίζεται από τον διαχειριστή του cluster και υπάρχει ανεξάρτητα από τον κύκλο ζωής οποιουδήποτε pod.
Το Persistent Volume Claim (PVC) είναι ένα αίτημα του χρήστη για αποθήκευση. Ο χρήστης ζητά έναν όγκο αποθήκευσης με συγκεκριμένα χαρακτηριστικά (μέγεθος, τρόπο πρόσβασης). Το PVC συνδέεται με ένα κατάλληλο PV. Αν δεν βρεθεί κατάλληλο PV, μπορεί να πραγματοποιηθεί δυναμική παροχή ενός νέου PV αν έχει διαμορφωθεί ένα αντίστοιχο StorageClass.
Βασικές διαφορές και αλληλεπιδράσεις:
- PV: Αντιπροσωπεύει τον πραγματικό πόρο αποθήκευσης.
- PVC: Αντιπροσωπεύει το αίτημα αποθήκευσης του χρήστη.
- Το PVC συνδέεται με το PV.
- Το PV μπορεί να δημιουργηθεί στατικά από τον διαχειριστή ή δυναμικά σε απάντηση σε ένα PVC χρησιμοποιώντας ένα StorageClass.
- Το Pod αναφέρεται στο PVC, όχι άμεσα στο PV, επιτρέποντας τον διαχωρισμό της λογικής της εφαρμογής από τις λεπτομέρειες αποθήκευσης.
Τρόποι πρόσβασης (Access Modes) για PV και PVC:
ReadWriteOnce(RWO): Ο όγκος μπορεί να προσαρτηθεί για ανάγνωση και εγγραφή από έναν μόνο κόμβο ταυτόχρονα.ReadOnlyMany(ROX): Ο όγκος μπορεί να προσαρτηθεί μόνο για ανάγνωση από πολλούς κόμβους ταυτόχρονα.ReadWriteMany(RWX): Ο όγκος μπορεί να προσαρτηθεί για ανάγνωση και εγγραφή από πολλούς κόμβους ταυτόχρονα.
Παράδειγμα YAML για PV και PVC:
# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Τι να γίνει με τον όγκο μετά τη διαγραφή του PVC (Retain, Recycle, Delete)
storageClassName: local-storage # Μπορεί να χρησιμοποιηθεί για σύνδεση με StorageClass
local:
path: /mnt/data
nodeAffinity: # Συγγένεια για τοπική αποθήκευση
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 # Συνδέεται με το PV ή το 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 # Αναφορά στο PVC