Sobes.tech
Middle

Cosa sono PV e PVC nel contesto di Kubernetes?

sobes.tech AI

Risposta dell'AI

Il Volume Persistente (PV) è una risorsa di archiviazione nel cluster Kubernetes. Astrae i dettagli dell'implementazione specifica dello storage dai consumatori. Il PV è gestito dall'amministratore del cluster ed esiste indipendentemente dal ciclo di vita di qualsiasi pod.

La Richiesta di Volume Persistente (PVC) è una richiesta dell'utente per lo storage. L'utente richiede un volume di storage con caratteristiche specifiche (dimensione, modalità di accesso). La PVC si collega a un PV appropriato. Se non viene trovato un PV adatto, può essere effettuata una provisioning dinamico di un nuovo PV se è configurato un StorageClass corrispondente.

Differenze principali e interazioni:

  • PV: Rappresenta la risorsa di storage effettiva.
  • PVC: Rappresenta la richiesta di storage dell'utente.
  • La PVC si collega a un PV.
  • Il PV può essere creato staticamente dall'amministratore o dinamicamente in risposta a una PVC utilizzando uno StorageClass.
  • Il Pod fa riferimento alla PVC, non direttamente al PV, consentendo di separare la logica dell'applicazione dai dettagli dello storage.

Modalità di accesso (Access Modes) per PV e PVC:

  • ReadWriteOnce (RWO): Il volume può essere montato in lettura-scrittura da un singolo nodo alla volta.
  • ReadOnlyMany (ROX): Il volume può essere montato in sola lettura da molti nodi contemporaneamente.
  • ReadWriteMany (RWX): Il volume può essere montato in lettura-scrittura da molti nodi contemporaneamente.

Esempio YAML per PV e PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Cosa fare con il volume dopo la rimozione della PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Può essere usato per collegare a uno StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Affinità per lo storage locale
    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 # Collega al PV o allo 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 # Riferimento alla PVC