Skip to content

Cum să folosești PersistentVolumeClaim în Kubernetes

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să folosești PersistentVolumeClaim în Kubernetes. We cover key concepts, practical examples, and best practices.

Problema

Aplicațiile tale cu stare (baze de date, fișiere) au nevoie de stocare care să supraviețuiască restart-urilor de Pod-uri și migrărilor între noduri.

Soluția Pas cu Pas

1. Creează un PersistentVolume (PV)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data
kubectl apply -f pv.yaml

Output:

persistentvolume/data-pv created

2. Creează un PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
kubectl apply -f pvc.yaml

Output:

persistentvolumeclaim/data-pvc created

3. Verifică legătura PV-PVC

kubectl get pv
kubectl get pvc

Output:

NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM
data-pv   5Gi        RWO            Retain           Bound    default/data-pvc

NAME       STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS
data-pvc   Bound    data-pv   5Gi        RWO

4. Montează PVC într-un Pod

apiVersion: v1
kind: Pod
metadata:
  name: pvc-pod
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - name: storage
      mountPath: /usr/share/nginx/html
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: data-pvc

5. Testează persistența

kubectl exec pvc-pod -- sh -c "echo 'Date persistente' > /usr/share/nginx/html/test.txt"
kubectl delete pod pvc-pod
kubectl apply -f pod.yaml  # re-creează Pod-ul
kubectl exec pvc-pod -- cat /usr/share/nginx/html/test.txt

Output:

Date persistente

6. Șterge PVC-ul

kubectl delete pvc data-pvc

StorageClass și Dynamic Provisioning

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
spec:
  storageClassName: fast

Prevenție

  • Alege accessModes corect: ReadWriteOnce (un singur nod), ReadOnlyMany, ReadWriteMany.
  • Configurează storageClassName pentru a controla tipul de stocare.
  • Setează persistentVolumeReclaimPolicy: Retain pentru date importante.
  • Folosește dynamic provisioning cu StorageClass pentru automatizare.

Greșeli Comune

  1. PVC fără PV sau StorageClass — Rămâne în Pending dacă nu există resurse.
  2. AccessMode incompatibil — PVC-ul nu se leagă de un PV cu accessMode diferit.
  3. Storage insuficient — PVC-ul cere mai mult spațiu decât oferă orice PV disponibil.
  4. ReclaimPolicy Delete — PV-ul și datele se șterg automat când PVC-ul este șters.
  5. Selector greșitselector.matchLabels trebuie să se potrivească cu label-urile PV-ului.

Exercițiu

Creează un PV de 2Gi, un PVC care cere 1Gi, montează-l într-un Pod, scrie un fișier, șterge Pod-ul, creează un Pod nou și verifică că fișierul există.

FAQ

### Ce diferență este între PV și PVC?

PV (PersistentVolume) este resursa de stocare din cluster. PVC (PersistentVolumeClaim) este cererea de stocare. PVC-ul se leagă de un PV compatibil.

Cum funcționează dynamic provisioning?

Când un PVC specifică un storageClassName, provisioner-ul asociat creează automat un PV și resursa de stocare reală (disk în cloud).

Ce se întâmplă când șterg un PVC cu ReclaimPolicy Delete?

PV-ul și resursa de stocare subiacentă (volumul în cloud) sunt șterse automat. Datele se pierd.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează seamless cu Kubernetes pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro