Sobes.tech
Middle

Τι είναι 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