Sobes.tech
Middle

Ce sunt PV și PVC în contextul Kubernetes?

sobes.tech AI

Răspuns de la AI

Volumul Persisten (PV) este o resursă de stocare în clusterul Kubernetes. Acesta abstractizează detaliile implementării specifice a stocării pentru consumatori. PV este gestionat de administratorul clusterului și există independent de ciclul de viață al oricărui pod.

Cererea de Volum Persisten (PVC) este o solicitare a utilizatorului pentru stocare. Utilizatorul solicită un volum de stocare cu caracteristici specifice (dimensiune, mod de acces). PVC se leagă de un PV potrivit. Dacă nu se găsește un PV potrivit, se poate realiza o provisioning dinamică a unui nou PV dacă este configurat un StorageClass corespunzător.

Diferențele principale și interacțiunile:

  • PV: Reprezintă resursa de stocare efectivă.
  • PVC: Reprezintă solicitarea de stocare a utilizatorului.
  • PVC se leagă de PV.
  • PV poate fi creat static de administrator sau dinamic în răspuns la o PVC folosind un StorageClass.
  • Pod face referire la PVC, nu direct la PV, ceea ce permite separarea logicii aplicației de detaliile de stocare.

Modurile de acces (Access Modes) pentru PV și PVC:

  • ReadWriteOnce (RWO): Volumul poate fi montat pentru citire și scriere de către un singur nod simultan.
  • ReadOnlyMany (ROX): Volumul poate fi montat doar pentru citire de către mai mulți noduri simultan.
  • ReadWriteMany (RWX): Volumul poate fi montat pentru citire și scriere de către mai mulți noduri simultan.

Exemplu YAML pentru PV și PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Ce să facă cu volumul după ștergerea PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Poate fi folosit pentru a lega cu un StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Afiliație pentru stocare locală
    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 # Legat de PV sau 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 # Referință la PVC